Wahrscheinlichkeit bei Kartenspiel
-
Hallo,
Ich habe hier eine seltsame Aufgabe, die ich mathematisch einfach nicht so recht lösen kann.
Es gibt ein Kartenspiel, bestehend aus 60 Karten. 4 Karten davon sind Gewinn Karten. 4 Weitere sind Joker Karten.Man mischt die Karten und zieht 7:
Wenn mind. eine Gewinn Karte dabei ist, hat man gewonnen.
Wenn mind. eine Joker Karte dabei ist, mischt man die 7 gezogenen unter das Kartendeck zurück und zieht nochmal 7 ziehen.
Wenn weder eine Gewinn noch eine Joker Karte dabei ist, mischt man die Karten unter das Deck und zieht 6 Karten.Ist eine Gewinn Karte unter diesen 6, hat man gewonnen.
Ist eine Joker Karte dabei, mischt man wieder alle Karten und zieht 6 Neue.
Weder Gewinn noch Joker Karte bedeutet, dass man mischt und 5 neue Karten zieht.Die Joker Karte lässt einen also nochmal so viele Karten ziehen, wie in der Runde davor. Ohne die Joker Karte, zieht man eine weniger.
Man verliert, wenn man keine Karte mehr ziehen kann (man also irgendwann nur noch eine Karte ziehen darf, und diese weder eine Gewinn, noch eine Joker Karte ist).
Da ich mathematisch dieses Problem nicht lösen konnte, habe ich mir ein kleines Simulationsprogramm geschrieben (quick & dirty):
const int GEWINN = 1; const int JOKER = 2; const int Spiele = 10000000; int cards[60] = {GEWINN,GEWINN,GEWINN,GEWINN,JOKER,JOKER,JOKER,JOKER,0,0,0,0,0,/*...*/}; int gewinne[8]= {}; bool pruefen(int anzahl_karten, int Karte){ for(int a = 0;a!=anzahl_karten;++a) if(cards[a]==Karte) return true; return false; } int main() { for(int i=0; i!=Spiele; ++i) { int karten_ziehen = 7; while(karten_ziehen != 0) { random_shuffle(cards, cards+60); if (pruefen(karten_ziehen, GEWINN)) break; else if(pruefen(karten_ziehen, JOKER)) continue; else --karten_ziehen; } ++gewinne[karten_ziehen]; } cout<<"7 cards: "<<static_cast<double>(gewinne[7])/Spiele*100.0L<<"%"<<endl; //... cout<<"loss : "<<static_cast<double>(gewinne[0])/Spiele*100.0L<<"%"<<endl; }
Laut dem Programm sähe die Wahrscheinlichkeit nach 10 Millionen spielen so aus:
Gewinn mit X Karten: 7 cards: 53.5485% 6 cards: 21.5483% 5 cards: 9.62806% 4 cards: 4.69364% 3 cards: 2.39913% 2 cards: 1.2099% 1 card : 0.49672% loss : 6.47576%
Ist das so plausibel? Und wie errechnet man soetwas wirklich mathematisch?
-
Du kannst Deine Methode mal mit was anderem prüfen:
Erzeuge zwei Zufallszahlen zwischen 0 und 1, das seien x und y.
Nun schaust Du, ob die Koordinate im Vierteleinheitskreis liegt, also ob:
x2+y2 <= 1 gilt.
Die Fläche des Vierteleinheitskreises ist pi/4, die des gesamten Trefferbereichs 1.
Setze das mal in Relation, und bestimme aus 1 Mio. Versuchen pi!
Es wird 2-3 Stellen nach dem Komma genau sein!
Nennt sich Monte-Carlo-Methode.Den mathematischen Ansatz für das Kartenspiel möchte ich jetzt gar nicht versuchen, das sieht ziemlich gemein aus mit der Wiederholbarkeit.
-
Hallo,
zeichne dir doch einfach mal ein Baumdiagramm, dann siehst du wie das mit den Wahrscheinlichkeiten ausschaut.Also du hast 60 Karten, diese bilden dein Ereignisraum Ω, dann hast du noch 3mögliche Ereignisse:
A := die gezogene Karte ist eine Gewinn-Karte
B := die gezogene Karte ist eine Joker-Karte
C := die gezogene Karte ist weder Gewinn- noch Joker-KarteDie Wahrscheinlichkeiten für die Ereignisse betragen am Anfang des Experimentes
P( A ) = 4/60
P( B ) = 4/60
P( C ) = 52/60So nun fängt das Spiel an und man zieht 7 Karten, dabei sind folgende Möglichkeiten zu betrachten:
Vor ab eine kleine Festlegung:
G := Gewinn-Karte
J := Joker-Karte
N := Weder Joker noch Gewinn01. Mögl.: { G, G, G, G, J, J, J } // Sieg
02. Mögl.: { G, G, G, J, J, J, J } // Sieg
03. Mögl.: { G, G, J, J, J, J, N } // Sieg
04. Mögl.: { G, J, J, J, J, N, N } // Sieg
05. Mögl.: { J, J, J, J, N, N, N } // Chance
06. Mögl.: { J, J, J, J, N, N, N } // Chance
07. Mögl.: { J, J, J, N, N, N, N } // Chance
08. Mögl.: { J, J, N, N, N, N, G } // Sieg
09. Mögl.: { J, N, N, N, N, G, G } // Sieg
10. Mögl.: { N, N, N, N, G, G, G } // Sieg
11. Mögl.: { N, N, N, G, G, G, G } // Sieg
12. Mögl.: { N, N, G, G, G, G, J } // Sieg
13. Mögl.: { N, G, G, G, G, J, J } // Sieg
14. Mögl.: { N, N, N, N, N, G, J } // Sieg
15. Mögl.: { N, N, N, N, N, J, J } // Chance
16. Mögl.: { N, N, N, N, N, G, G } // Sieg
17. Mögl.: { N, N, N, N, N, N, J } // Chance
18. Mögl.: { N, N, N, N, N, N, G } // Sieg
19. Mögl.: { N, N, N, N, N, N, N } // VerlorenDies wären alle möglichen Ereignisse die auftretten könnten, die Wahrscheinlichkeit der einzelnen Ereignisse berechnest du so:
Nur 1. Möglichkeit als Beispiel, Rest machste alleine
01. Mögl.: { G, G, G, G, J, J, J }:
4/60 * 3/59 * 2/58 * 1/57 * 4/56 * 3/55 * 2/54 = 2.95918349 * 10^(-10)
also was ziemlich kleines. Falls dir jetzt nicht klar ist wie die Brüche zu stande kommen. Im Nenner steht die momentane Kartenanzahl im Deck, da du ja nun nach einander 7 ziehst wird diese auch kleiner, genau wie der Zähler welche die momentane Anzahl des Kartentypes ist, die ja auch kleiner wird.
So das machst du jetzt noch mit allen anderen Ereignissen, welche zum Sieg führen können und addierst zum Schluss die Ereignisse auf.
Wenn du jetzt eine Chance hast, machst du das gleiche Spiel wie oben noch einmal nur mit 6Karten (ACHTUNG! Alle Karten wurden zurückgemischt, also geht man wieder vom vollen Ereignisraum aus!)Wenn man eine Chance hatte, muss diese Wahrscheinlichkeit in der Endsumme der nächsten Wahrscheinlichkeit mit reinmultipliziert werden usw.
So hoffe das bringt dich jetzt ein wenig weiter
Lg Tobi
-
Ah ok, ich habe gerade noch mal die Aufgabe durchgelesen und muss mich da etwas korigieren. Falls das Ereignis auftrit das alles N-Karten sind, verkleinert man die hand, sonst nicht, aber das Prinzip bleibt gleich.
Lg Tobi
-
T0bi schrieb:
.. verkleinert man die hand,...
Lg TobiAua! *fg*
-
Wenn mind. eine Gewinn Karte dabei ist, hat man gewonnen.
Invertierung des Ereignisses: Wie gross ist die Wahrscheinlichkeit, keine Gewinnkarte zu ziehen? Fuer Karte 1: 56/60, Karte 2: 55/59, Karte 3: 54/59 ... Multiplizieren und von eins abziehen.
Wenn mind. eine Joker Karte dabei ist, mischt man die 7 gezogenen unter das Kartendeck zurück und zieht nochmal 7 ziehen.
Naja, das Gleiche: Wie hoch ist die Wahrscheinlichkeit keine Jokerkarte (und Gewinnkarte) zu ziehen?
Jetzt kommt die Entscheidung, eine Karte weniger zu ziehen. Kann man in einem schoenen Diagramm darstellen. Hat 6 "Ebenen". Danach addiert man die Wahrscheinlichkeit ueber alle moeglichen Pfade, die vom Ausgangszustand zum Gewinnzustand fuehren. Es ist einfacher mit einem kleineren Problem anzufangen, z.B. zwei Karten und induktiv eine weitere Karte hinzufuegen.
-
Wie man auf die Wahrscheinlichkeiten für einzelne Ereignisse kommt, ist mir schon klar. Bloß die Tatsache, dass man durch die Joker Karte Ereignisse wiederholen lassen kann irritiert micht.
Inder Schule haben wir mit Matritzen ähnliche Aufgaben gelöst:y% z% Ereignis A ----> Ereignis B ----> Ereignis C | ^ <---- | | w% --- x%
Käme man so hier weiter?
-
Ich möchte den Thread noch nicht sterben lassen - das Resultat interessiert mich wirklich.
Mit der Wiederholbarkeit habe ich so meine Probleme.Nun mache ich mir ein vereinfachtes Beispiel mit drei Kugeln:
weiße Kugel Sieg, schwarze Kugel Niederlage, rote Kugel nochmal spielen.
Das Ding mit der roten Kugel durchzurechnen - tja - wie?
Dass sie das Sieg/Niederlage-Verhältnis letztlich aber gar nicht beeinflußt und man sie deshalb einfach aus der Rechnung rausnimmt - das dürfte offensichtlich sein. So müßte man bei dem Kartenproblem doch ein Stück weiter kommen.
-
Also, ich hätte da mal so was wie einen Lösungsvorschlag:
(mit der Funktion v ist 'n über k')Im Zähler jeder Einzelwahrscheinlichkeit steht die Anzahl der Nicht-Gewinn-Kombinationen.
Im Nenner eben dieser Wert plus der Anzahl der Gewinnkombinationen.
Pure Joker- und Joker/Verlust-Kombinationen fallen damit vollkommen raus -
ebenso jene Wiederholbarkeit (basierend auf dem im letzten Post Gesagten).k7 = v(52,7) / (v(52,7) + v(56,3) + 4*v(56,4) + 6*v(56,5) + 4*v(56,6)); k6 = v(52,6) / (v(52,6) + v(56,2) + 4*v(56,3) + 6*v(56,4) + 4*v(56,5)); k5 = v(52,5) / (v(52,5) + v(56,1) + 4*v(56,2) + 6*v(56,3) + 4*v(56,4)); k4 = v(52,4) / (v(52,4) + 1 + 4*v(56,1) + 6*v(56,2) + 4*v(56,3)); k3 = v(52,3) / (v(52,3) + 4 + 6*v(56,1) + 4*v(56,2)); k2 = v(52,2) / (v(52,2) + 6 + 4*v(56,1)); k1 = v(52,1) / (v(52,1) + 4); chancezuverlieren = k7*k6*k5*k4*k3*k2*k1;
Müßte man jetzt so in cpp umsetzen, dass er halbwegs korrekt rechnet -
käme etwa 0.00075 raus.
Plausibel?
-
Die Wahrscheinlichkeit, mit m Karten nach n Jokern zu gewinnen ist:
\[ P\_m(\text{n mal Joker, dann Gewinn}) = P\_m(\text{Joker})^n P_m(\text{Gewinn}) \]
(das Mischen macht die Sache natürlich einfach, weil dann die einzelnen Züge unabhängig sind)Für die Gesamtwahrscheinlichkeit mit k Karten zu gewinnen musst du nun entsprechend über n und m summieren:
\[P(\text{Gewinn}) = \sum_{m=1}^{k}\sum_{n=0}^{\infty} P_m(\text{n mal Joker, dann Gewinn})\]
wobei
\[ P\_m(\text{Gewinn}) = P\_m(\text{Joker}) = P(\text{nicht alle Karten keine Gewinn- bzw. Joker-Karte}) = 1 - \left( \frac{60-4}{60}\right)^{m} \]
Viel Spass beim aus-x-en!
(http://de.wikipedia.org/wiki/Geometrische_Reihe)PS: Ok, hab nun verstanden, wie das mit latex hier funktioniert
-
ok, bei nochmaligem Durchlesen fällt mir auf, dass es so einfach doch nicht geht.
Ich hab vergessen zu berücksichtigen, dass man nur zu m-1 Karten kommt, wenn man davor bei m Karten verloren hat.Du solltest also zunächst die Gewinnwahrscheinlichkeit für 7 Karten ( =: P_7_neu) nach der Formel oben berechnen (P_7_neu = P_7), und dann das ursprüngliche P_6 mit der Gegenwahrscheinlichkeit 1 - P_7_neu multiplizieren usw.
(sprich dich mit P_n_neu = P_n * (1 - P_(n+1)_neu) runterhangeln)
-
Hey C14 - bist ja auch noch hier!
Vergiß Gewinnwahrscheinlichkeit und Joker hier - Du mußt die Verlustlinie lang gehen. Habe in meiner Rechnerei noch keinen besseren Einfall gehabt - sie könnte tatsächlich stimmen. Die Joker beeinflussen zwar die Karten- und damit Kombinationszahlen, aber sie gehen nicht wiederholend in die Rechnung ein.
Verfolge mal meinen vorherigen Gedanken.
Mit einer einfachen Summenformel kommst Du auch nur bei 7-4 Karten hin - bei drei Karten gibt es eine entscheidende Änderung (nämlich mehr Gewinnkarten im Pack als auf der Hand!).
Die Aufgabenstellung gefällt mir, leitet sie im ersten Moment doch total in die Irre. Das Ergebnis - dass man eigentlich kaum verlieren kann - ist zweitrangig, aber lustig. Ist so auch nicht unbedingt zu erwarten.
-
Hi Bitsy!
Dass du die Joker ignorieren kannst, glaub ich nicht.
Dein Beispiel mit drei Kugeln, bei dem du nur eine Kugel ziehst, vereinfacht die Sache zu sehr: Wenn du mehrere Kugeln ziehen kannst, ist Gewinn und Verlust bei Anwesenheit eines Jokers eben nicht mehr symmetrisch:
Wenn ne Gewinnkugel dabei ist, hast du gewonnen, wenn keine dabei ist aber noch NICHT verloren!
Im Übrigen kann dein Ergenis deswegen nicht stimmen, weil es ja mit dem "Monte-Carlo-Test" (der code sieht denk ich vernünftig aus) nicht übereinstimmt.
Bei 10^7 Spielen sollte sich deine Wkt maximal um 0.1% unterscheiden, sonst wärs schon ein arger Zufallnochmal zu meinem Ansatz:
Damit man über die Ereignisse bei m Kugeln zu gewinnen, summieren kann, müssen sie natürlich disjunkt sein, deswegen sollte es für die Wkt mit m Kugeln zu gewinnen heissen:
\[ P\_m = \sum\_{k=0}^{\infty} P\_m(\text{k mal (Joker und nicht Gewinn), dann Gewinn}) = \sum\_{k=0}^{\infty} (1-\left(\frac{56}{60}\right)^m)\cdot P_m(\text{Joker und nicht Gewinn})^k \]Hat jemand ne Ahnung, wie ich
\[ P\_m(\text{Joker und nicht Gewinn}) = P\_m(\text{nicht Gewinn}) \cdot P_m(\text{Joker}|\text{nicht Gewinn}) \]
berechnen kann?
-
Ich sagte doch - das Beispiel führt gut in die Irre.
Guckst Du:Nimm 5 Karten, zwei auf die Hand.
Wir rechnen nicht mit anschließender Verminderung, sondern nur diesen Fall.Kartenverteilung:
g1 g2 j n1 n2mögliche Kombinationen: (S=Sieg, W=Wiederholung, N=Niederlage)
g1+g2=S,g1+j=S,g1+n1=S,g1+n2=S,g2+j=S,g2+n1=S,g2+n2=S,j+n1=W,j+n2=W,n1+n2=Nfolglich: 7 S, 2 W, 1 N
Reihenentwicklung für Sieg:
0.7 + 0.2 * (0.7 + 0.2 * (...)) = 0.7 + 0.14 + 0.04 * (...)
Reihenentwicklung für Niederlage:
0.1 + 0.2 * (0.1 + 0.2 * (...)) = 0.1 + 0.02 + 0.04 * (...)#include <stdio.h> double N = 1.0; double W = 2.0; double S = 7.0; double total = N+W+S; double ssum() { static int i=0; i++; if (i<1000) return S/total + W/total * ssum(); return 0; } double nsum() { static int i=0; i++; if (i<1000) return N/total + W/total * nsum(); return 0; } int main(void) { double s = S/total + W/total * ssum(); double n = N/total + W/total * nsum(); // nach meiner Theorie - Joker wegfallen lassen: double nbitsy = N/(S+N); printf("s=%g n=%g *grins*=%g\n",s,n,nbitsy); }
Dass mein Resultat vom Ausspielen stark abweicht, kann an der Methode
liegen, mit der ich ausgerechnet habe - muß man nämlich schon auf
unsigned long hoch bei diesen Werten. Kürzen wäre angebracht...
Aber die Formel könnte stimmen
-
ja hast Recht, müsste so stimmen und sollte eigentlich äquivalent zu dem sein, was ich vorhatte, nur einfacher!
-
Ja, ich dachte es mir, Überlauffehler in 'n über k' in meinem Programm:
6.46% hätte ich dann für den Verlust wirklich raus.
Damit liegt das Durchgespielte in der Nähe!