Binominalverteilung (3er Pasch bei 6 Würfeln)

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
mariomueller
User
Beiträge: 11
Registriert: Montag 25. Februar 2019, 14:51

Hallo zusammen,

um die Häufigkeit eines 3er-Pasch bei 6 Würfeln zu ermitteln, verwende ich die Binomialverteilung:

Code: Alles auswählen

import scipy.special

n = 6
k = 3
p = 1/6

ergebnis = scipy.special.binom(n, k) * p**k * (1-p)**(n-k)
print(f"Wahrscheinlichkeit 3er z.B. '555':\t  {ergebnis}")
print(f"Wahrscheinlichkeit aller 3er Pasch:\t  {ergebnis * 6}")
Ergebnis:

Code: Alles auswählen

Wahrscheinlichkeit 3er z.B. '555':	  0.05358367626886146
Wahrscheinlichkeit aller 3er Pasch:	  0.32150205761316875
Das scheint zu stimmen. Ich habe ein Youtube-gefunden, in dem die WK für einen Zweierpasch berechnet wurde. Das Ergebnis aus dem Youtube ist identisch mit meinem Code.
Mit anderen Worten: Der Code scheint korrekt zu sein

Trotzdem wollte ich mal Gegenrechnen.
Ich verwende hierzu das kartesiche Produkt. Bei 6 Würfeln sind das 6^6 = 46656 verschiedene Möglichkeiten, wie die Würfel fallen können .
Dann suche such alle 5er-Pasch (ich hätte auch 333 oder nach 666 suchen können)

Code: Alles auswählen

import itertools
products = list(itertools.product("123456", repeat=6))
# products = list(itertools.product("123", repeat=4))

def convertTuple(tup):
    str = ''.join(tup)
    return str

kartesisches_produkt = len(list(products))
# print(f"kartesisches_produkt:\t  {kartesisches_produkt}")
treffer_pasch = 0
# Print 
for tup in list(products): 
  tup = tuple(sorted(tup))  
  # print(tup)
  tup_as_string = convertTuple(tup)
  # print(f"tup_as_string:\t  {tup_as_string}")
  if '555' in tup_as_string:
    treffer_pasch += 1
    
print(f"treffer_pasch:\t  {treffer_pasch}")
print("Treffer geteilt durch Gesamtzahl", (treffer_pasch / kartesisches_produkt))
print("multiplizier mit 6 Würfelseiten: ", (treffer_pasch / kartesisches_produkt) * 6)
Ergebnis:

Code: Alles auswählen

treffer_pasch:	  2906
Treffer geteilt durch Gesamtzahl 0.062285665294924554
multiplizier mit 6 Würfelseiten:  0.37371399176954734
Hat jemand eine Idee, warum ich mit dem loop über das kartisische Produkt das Ergebnis 0.37371399176954734 erhalten.
Mit der Binominalverteilung aber 0.32150205761316875?

Wo liegt mein Denkfehler?


Danke, viele Grüße Mario
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mariomueller: Wie ist denn Deine Definition von Pasch hier? Mir scheint ``if '555' in tup_as_string`` ist als Bedingung falsch. Oder ist beispielsweise "152535" *kein* Pasch mit drei 5en?

Edit: Ups, ich habe das sortieren übersehen. Und wie oft da sinnlos Daten kopiert werden. Aaaalter…
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
grubenfox
User
Beiträge: 430
Registriert: Freitag 2. Dezember 2022, 15:49

Zählt die Binominalverteilung jetzt genau die 3er Pasche? Also '555' ist ein Treffer, aber '5555' nicht. Der Programmcode zählt '5555' jedenfalls auch als Treffer.
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

Wie Grubenfox im Prinzip schon meinte: 0.32 inkludiert nur exakte Dreierpasche, 0.37 auch 3er, 4er, 5er und 6er Pasche.

EDIT:
siehe auch:

Code: Alles auswählen

In [1]: from itertools import product

In [2]: trials = list(trial for trial in product(range(1,7), repeat=6))

In [3]: sum(trial.count(5) == 3 for trial in trials) / len(trials) * 6
Out[3]: 0.3215020576131687

In [4]: sum(trial.count(5) >= 3 for trial in trials) / len(trials) * 6
Out[4]: 0.37371399176954734
Zuletzt geändert von nezzcarth am Freitag 30. Dezember 2022, 15:18, insgesamt 2-mal geändert.
Manul
User
Beiträge: 53
Registriert: Samstag 13. Februar 2021, 16:00

Kann es unabhängig davon sein, daß doppelte 3er-Paschs in beiden Ansätzen mehrfach gezählt werden?
mariomueller
User
Beiträge: 11
Registriert: Montag 25. Februar 2019, 14:51

grubenfox hat geschrieben: Freitag 30. Dezember 2022, 15:07 Zählt die Binominalverteilung jetzt genau die 3er Pasche? Also '555' ist ein Treffer, aber '5555' nicht. Der Programmcode zählt '5555' jedenfalls auch als Treffer.
Super, Danke das wars.
Bin happy!
mariomueller
User
Beiträge: 11
Registriert: Montag 25. Februar 2019, 14:51

nezzcarth hat geschrieben: Freitag 30. Dezember 2022, 15:12 Wie Grubenfox im Prinzip schon meinte: 0.32 inkludiert nur exakte Dreierpasche, 0.37 auch 3er, 4er, 5er und 6er Pasche.

EDIT:
siehe auch:

Code: Alles auswählen

In [1]: from itertools import product

In [2]: trials = list(trial for trial in product(range(1,7), repeat=6))

In [3]: sum(trial.count(5) == 3 for trial in trials) / len(trials) * 6
Out[3]: 0.3215020576131687

In [4]: sum(trial.count(5) >= 3 for trial in trials) / len(trials) * 6
Out[4]: 0.37371399176954734

Hi nezzcarth,

vielen Dank für Deinen Kommentar. Wie geschrieben, war der Fehler, dass ich auch 4er, 5er, 6er Pasch mitgezählt habe.
Würdest Du mir bitter erklären, was die beiden sum-Befehle machen, die Du verwendest?

Danke, viele Grüße Mario
Benutzeravatar
grubenfox
User
Beiträge: 430
Registriert: Freitag 2. Dezember 2022, 15:49

mariomueller hat geschrieben: Samstag 31. Dezember 2022, 08:43
grubenfox hat geschrieben: Freitag 30. Dezember 2022, 15:07 Zählt die Binominalverteilung jetzt genau die 3er Pasche? Also '555' ist ein Treffer, aber '5555' nicht. Der Programmcode zählt '5555' jedenfalls auch als Treffer.
Super, Danke das wars.
Bin happy!
@mariomueller und alle anderen die dieses lesen: Dann wünsche ich auch schon mal einen guten Rutsch und ein Jahr das ebenso 'happy' verläuft... :D
Antworten