0 Daumen
1,8k Aufrufe


die Poker-Programme, die die Gewinn-/Verlustwahrscheinlichkeiten von zwei bestimmten Händen gegeneinander berechnen, arbeiten ausschließlich mit der relativen Wahrscheinlichkeit, d.h. es werden etliche Zufallsversuche durchgeführt und daraus die Wahrscheinlichkeit berechnet.

Ist es wirklich so aufwendig, mathematisch zu berechnen, wie wahrscheinlich es ist, dass eine Hand gegen eine andere gewinnt, dass man es nur simulieren mag oder liegt das noch im Bereich des Möglichen und die Programmierer waren dafür zu faul oder unmathematisch?

Wie ist es z.B., wenn der eine Spieler eine Hand wie AhKh (h = Herz) und der andere 2h2c (c = Pik) hält? Wie berechnet man die Gewinnchancen von AhKh gegen 2h2c?

Würde mich mal interessieren.

Thilo
Avatar von 4,3 k

1 Antwort

+1 Daumen
 
Beste Antwort
Die Berechnung über eine Simulation wird in der Wahrscheinlichkeit schon seit sehr langer Zeit gemacht. Das konnte man bereits machen als man von Baumdiagrammen und Pfadregeln keine Ahnung hatte.

Das Problem ist hier auch das man immer 2 Hände zusammen untersuchen muss. Ich kann also nicht die Gewinnwahrscheinlichkeit gut berechnen wenn ich nur eine Hand kenne.

Wenn ich also 2 * 2 = 4 Karten kenne, bleiben 48 Karten für die öffentlichen Karten übrig. Die Möglichkeiten daraus 5 zu wählen gibt 1.7 Millionen Möglichkeiten. Diese jetzt einfach durchzuspielen ist für jeden heutigen PC ein Klacks. Ich spiele also alle 1.7 Millionen Möglichkeiten durch und notiere mir immer, wer in welchem Fall gewinnt. Dann habe ich am Ende eine genaue Einschätzung welche Hand besser ist.

Diese Methode findet immer Anwendung, bei der Rechenleistung keine Rolle spielt, weil sie sehr einfach zu programmieren ist. Erst wenn man mit der Rechenleistung nicht auskommt, fangen Programmieren an Optimierungen zu machen. Dieses ist von der Arbeit her aufwändiger und lohnt sich eigentlich nur wenn man ohne sie eh nicht auskommt.

Das ganze ist also eine reine Input Output Strategie. Meist wird hier das Minimum Prinzip angewendet. Bei gegebenem Output ist der Input zu Minimieren.
Avatar von 488 k 🚀
danke für die ausführliche Antwort. Ein Klacks ist es nicht ganz für den PC, denn auch diese Programme brauchen immerhin 3-4 Sekunden Rechenzeit, um einen ausschlaggebenden Teil der möglichen Kombinationen durchzuspielen. Es braucht ja auch einiges an Rechenaufwand, um zu erkennen, ob z.B. eine Straße oder ein Full House vorliegt. Da dachte ich mir, dass es vielleicht mit zwar komplexeren Algorithmen, in denen aber mehr Mathematik vorkommt, schneller geht. Z.B. um die Anzahl der Kombinationen zu berechnen, in denen die ersten drei Karten, die in der Mitte liegen, Asse sind (4 über 3 = 4 Möglichkeiten), geht mit der Kombinatorik viel schneller als es mit einem PC zu simulieren.
Ja. dann hast du aber nur Möglichkeiten das in der Mitte 3 Asse sind aber noch nicht was ist wenn 2 Asse oder 1 Ass dort ist. Letztendlich muss man so viel berücksichtigen das man auch gleich alles probieren kann. Und unoptimiert 4 Sekunden Rechenzeit ist doch ein guter Wert. Stell dir vor jeder Schachcomputer bräuchte nur 4 Sekunden Rechenzeit. Das geht beim Schach auch nur über große Eröffnungsbibliotheken und gute Optimierung. Außerdem kann ein Schachcomputer meist nur eine bestimmte Zahl von Halbzügen vorausschauen.

Ich hatte früher mal eine Roulette Simulation gemacht (recht langweilig, da das wirklich sehr einfach zu berechnen ist. Außerdem eine Simulation von 17 & 4 (Black Jack) mit Berechnung der Gewinnwahrscheinlichkeit, was schon etwas komplexer war. Poker ist noch etwas komplexer.

Man beachte, das gute Programme inzwischen ja auch im Hintergrund rechnen können. Das konnte man damals noch nicht machen. D.h. mein Blackjack hat immer erst angefangen zu rechnen wenn der Vorderman entschieden hat ob er eine Karte nimmt oder nicht. Inzwischen könnte man auch schon berechnen, wenn der Vorderman sich noch nicht entschieden hat. Dann würde man selber eventuell kalkulieren ob man seber eine Karte ziehen würde und rechnet dann im Grunde genommen schon die wahrscheinlichsten Dinge durch.
Ja, das stimmt, dass man extrem viele Fälle berücksichtigen müsste und es dann auch gleich simulieren könnte. Aber dennoch würde es doch schneller gehen, wenn man alle Fälle berücksichtigen würde (also ein optimierter Code). Ich kann es ja mal im Ansatz versuchen ^^ Mal sehen, wann ich die Lust verliere ;)

Kennst du dich damit aus, wie man die optimale Rechenzeit berechnet? Also es gibt ja Algorithmen, bei denen man sagen kann, dass kein Algorithmus existiert, der noch schneller ist.

Ja. Sowas haben wir mal bei Sortieralgorithmen durchgesprochen. Das war aber eigentlich wie der Aufwand eines Algorithmus mit erhöhten Werten umgeht. Also wie der Aufwand im Verhältnis zu den Daten steigt. Dort mussten wir aber einen Algorithmus gegeben haben und konnten nur Algorithmen vergleichen.

Da gibt es das Der Aufwand exponentiell steigt, quadratisch, linear oder sogar logarithmisch. Letzteres wäre für große Daten vorteilhaft.

Beim Poker hast du aber immer gleich viele Daten.

Das Abarbeiten einer Liste von 1.7 Millionen Möglichkeiten wäre jetzt mal mein linearer Ansatz. Nun ist die Frage ob man das nicht reduzieren kann. Jetzt könnte man schauen ob es Karten gibt mit denen beide nichts anfangen können. D.h. es ist vielleicht erstmal günstig von einer Hand auszugehen und sich zu fragen was man damit machen kann.

Mit zwei Zweien habe ich erstmal nur die Möglichkeit auf ein Paar oder höheres (2 Paare, Drilling, Full House, Vierling) zu setzen. 

Mit AhKh habe ich schon mal mehr Möglichkeiten Straße, Flush, Straight Flush oder gar Royal Flush. Wobei die Wahrscheinlichkeit hier deutlich geringer ist es zu realisieren als ein Drilling beim ersten.

Also wenn ich es programmieren sollte würde ich erstmal mit einem einfachen Algo anfangen. Auch weil man dann beim optimieren schon eine Referenz hat.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community