Jump to content
Tom Next - Daytrading Community

Texas Hold'em KI


Mythos

Recommended Posts

Finally 100%!

 

Ja, der Ausschluss der Flushcards war deutlich komplexer. Aber jetzt hab ich endlich eine (hoffentlich) korrekte, vollständige Berechnung der exklusiven Wahrscheinlichkeiten. Der Algorithmus ist noch schlimm ineffizient und der Source dank vielen Fehlschlägen etwas gewuchert, aber das kann man ja jetzt optimieren ;)

 

Also lt. meinem Algo sehen die W! vor den PocketCards (also bevor man irgendwas hat, und noch 7 Karten bekommt) so aus:

 

HighCard: 17,41%

Pair: 43,82%

TwoPair: 23,50%

ThreeAKind: 4,83%

Straight: 4,62%

Flush: 3,03%

FullHouse: 2,60%

FourAKind: 0,17%

StraightFlush: 0,03%

 

Das GUI ist noch immer rudimentär und man kann auch funktionell noch nicht stark eingreifen. Derzeit kann man ein Spiel mit 3 Spielern "spielen". Sprich die Karten werden geteilt, man sieht die W!, entscheided was der Spieler macht und es ist der nächste dran.

 

Als nächstes steht also optimieren des Algos am Programm, damit das Testen etc. etwas geschmeidiger geht. Und dann wirds endlich auch für euch interessant. Dann geht die Entwicklung der KI-Strategien los!

 

Falls es jemand nicht erwarten kann und das aktuelle Programm durchklicken will, einfach melden.

 

Wenn sich irgendwer für den konkreten Algo/Source interessiert und mir beim optimieren helfen will: detto einfach melden. Ich will nur niemanden hier langweilen :D

  • Upvote 3
Link to comment
Share on other sites

Es ist soweit, bzgl. Performance ist noch einiges zu optimieren (Berechnung der Table-W! PreFlop dauert ein paar Sekunden) aber es gibt den "AdminMode" wo man (zugegeben noch etwas primitiv) die gegebenen Karten eingeben kann und die berechneten Wahrscheinlichkeiten etc. erhält.

 

Ich leg dann jetzt mal mit den Strategien etc. los. Und da ist gleich die erste Frage: Wie berechnet man den "Wert" einer Hand?

 

Wie die Werte gereiht sein sollen ist klar, aber mit welchem Abstand?

Lassen wir mal die unterschiedlichen Kartenwerte außen vor für ein Beispiel:

Wertberechnung 1:

Highcard: 0

Pair: 1

TwoPair: 2

...

FullHouse: 6

...

 

Wertberechnung 2:

Highcard: 1

Pair: 2

TwoPair: 4

...

Fullhouse: 64

...

 

Bei Berechnung 2 wirkt sich eine leicht höhere Chance auf ein Fullhouse (oder irgendeine hohe Hand) deutlich stärker auf den Erwartungswert aus, als bei Berechnung 1. Aber soll sie das?

 

Irgendwelche Idee/Anregungen was hier eine gute Berechnung wäre?

 

In der aktuellen Version hab ich die Wertberechnung schon flexibel gemacht und man kann per GUI eine der vordefinierten Varianten auswählen. Wenn also jemand Vorschläge hat, oder das Ding mal ausprobieren will, kann man das schnell einbauen und testen.

Link to comment
Share on other sites

Was du auch beachten solltest. Die Wertigkeit der Starthände ist abhängig von der Anzahl der Mitspieler. Oder hast du das schon berücksichtigt? Wäre es Performancetechnisch nicht vielleicht besser, einmal alle möglichen Ergebnisse in eine Tabelle zu legen und dann nur richtig auslesen? Ich weiss ja nicht wie das z.B. bei Pokerübertragungen gemacht wird.

Link to comment
Share on other sites

Was du auch beachten solltest. Die Wertigkeit der Starthände ist abhängig von der Anzahl der Mitspieler. Oder hast du das schon berücksichtigt? Wäre es Performancetechnisch nicht vielleicht besser, einmal alle möglichen Ergebnisse in eine Tabelle zu legen und dann nur richtig auslesen? Ich weiss ja nicht wie das z.B. bei Pokerübertragungen gemacht wird.

Andere Spieler sind bei Strategien der ersten Generation noch nicht berücksichtigt. Ich muss einfach starten, is so schon kompliziert genug ;)

 

bzgl Performance: Ich müsste eine Tabelle für alle möglichen Starthände machen, das wäre natürlich möglich. Zumindest wenn ich nur die Erwartungswerte haben will. Die Liste mit den x-tausend einzelnen Möglichkeiten + Wahrscheinlichkeit pro Hand zu speichern wär dann vielleicht wieder ein bissl übertrieben.

Link to comment
Share on other sites

Aja: was die Pokerübertragungen angeht: Es geht ja recht schnell zu errechnen welche Karten ich bräuchte um eine gewisse Hand zu erhalten. Wenn man jetzt für alle Outs der Spieler zusammen in eine Liste haut, und jeweils schaut wer bei welchen Karten gewinnen würde, hat man die % Verteilung.

Is eine andere Berechnung als meine allgemeine Form hier. Glaub ich zumindest.

Link to comment
Share on other sites

  • 1 month later...

Nach freizeitbedingter langer Pause gehts wiedermal ein Stück weiter:

 

Wertberechnung:

Hier hab ich mich erstmal für die "UnitValue" entschieden. Sprich ich hab jeder Hand den Wert 1/Wahrscheinlichkeit gegeben. Mit einem offset sodass Hände mit gleicher W! aber unterschiedlichen Werten um 1/Wahrscheinlichkeit herum gestreut sind. Dadurch ist der Erwartungswert vor dem Erhalten der Karten gleich 1 (ich verwende die W! für 7 Karten).

Warum kann ich ehrlich gesagt nicht genau begründen. Ich hatte das Gefühl das diese Berechnung die "sinnvollste" ist ;)

 

Strategien:

Ich hab mal mit einem "Framework" für Strategien angefangen. Sprich es gibt ein Baseclass die gewisse Grundfunktionen zur Verfügung stellt. Diese hat auch schon einen Parameter "bluffProbability". Sprich die Baseclass kann auf "isBluffing" gesetzt werden wodurch sie dann die gesamte restliche Runde erhöht. Keine Ahnung ob das ein guter Ansatz für Bluffs ist, aber es ist mal ein Ansatz ;)

 

Ich hab jetzt mal eine erste simple Strategie implementiert. Diese hat 6 Parameter jeweils für PreFlop, Flop und River/Turn 2 : thresholdCall und thresholdRaise.

Wenn EigenerErwartungsWert > TischErwartungswert*threshold ist wird die Aktion ausgeführt. Liegt der Wert unter thresholdCall wird gefolded (außer man kann checken versteht sich).

 

 

Programm:

 

Zusätzlich zum Adminmode gibt es jetzt einen Strategychecker. Hier lass ich 9 zufällige Strategien gegeneinander Spielen. Nach 1000 games kommen die Strategien mit einem gewissen Mindestchipcount in die nächste Runde, von der besten Strategie wird ein zufälliger "Nachkomme" (als eine Strategie mit ähnlichen Parametern) erzeugt und mitaufgenommen. Der Rest wird mit zufälligen Strategien aufgefüllt.

 

Erste interessante Erfahrung hierbei: Strategien mit geringer Bluffwahrscheinlichkeit überleben zwar 1-2 Runden, aber auf Dauer scheinen nur Strategien zu überleben die mindestens 30% Bluffwahrscheinlichkeit haben. (Geblufft wird aber nur falls man auch callen würde). Die erfolgreichste Strategie jetzt gerade blufft mit 42%.

 

Soweit mal wieder ein kurzer Zwischenstand.

Falls jemand ideen für Strategien (vorerst rein Kartenbasiert) hat immer her damit ;)

 

 

 

 


  • Upvote 1
Link to comment
Share on other sites

Aufgrund der Frage hab ich mal die Erwartungswerte ein bissl verglichen. Und es scheint die Unit-Value Bewertung doch nicht optimal zu sein. bzw. je nachdem wie man es sieht. Da aufgrund der geringen W! straight etc. einen sehr hohen Wert haben, ist bei dieser Bewertung zB J10s höher bewertet als ein Assenpaar. Bei der linearen Bewertung ist es andersrum.

 

Wenn ich so drüber nachdenke ist vermutlich die lineare Bewertung doch "logischer" weil die nächsthöhere Hand sollte immer gleichviel mehr Wert sein, egal obs von Königspaar auf Assenpaar wechselt oder von Straße mit König Hoch auf Ass Hoch geht...

 

thx für den Hinweis.

 

Link to comment
Share on other sites

Ja, linear ist deutlich besser als UnitValue :D

 

Es scheint als würden Strategien mit anderen Wertberechnungen nicht dauerhaft erfolgreich sein.

 

Zur super-thight Strategie: Ich hab jetzt eine Strategie mit reingeworfen die Preflop nur mitgeht wenns mindestens den Erwartungswert von AKs hat, und erhöht ca. ab Damenpäarchen. In den weiteren Runde geht die Strategie dann immer mit und erhöht wenn der eigene Erwartungswert über dem Tischwert liegt. Ohne zu bluffen und mit LinearValue ist die Strategie zumindest gegen die anderen Strategien erfolgreich. Gewinnt zwar nur 4% aller Spiele, aber das reicht scheinbar.

 

Aber eine Strategie die schneller mitgeht und erhöht, mit 30% Bluff und LinearValue hat einen ca. 5fachen Chipcount...

 

Derzeit analysieren die strategien übrigens keine Daten der anderen Spieler. Sie spielen wirklich nur die Karten. Auch die Position am Tisch bleibt derzeit unberücksichtigt.

Link to comment
Share on other sites

  • 1 month later...

Ja, geht weiter. Leider aufgrund dieser externer Einflüsse derzeit deutlich langsamer als gehofft. Im Moment bastel ich ein bissl an der GUI und dem Game-Modus wodurch man die gesamte Grundlogik einfach auf Korrektheit prüfen kann, andererseits dann auch sieht was die Strategien können...

Neue Erkenntnisse gibts vorerst noch nicht.

Link to comment
Share on other sites

  • 1 month later...

Ok neues von der Front. Ich glaub ich weiß langsam warum es angeblich so schwer ist eine gute Poker-KI zu schreiben ;)

 

Die GUI is inzwischen soweit das man recht einfach gegen gespeicherte Strategien (vom Strategytester generierte) spielen kann. Dadurch merkt man auch sofort das die Strategien Schrott sind :(

 

Ich bin immer noch auf dem Level "nur die Karten zählen". Und da eigentlich auch noch an dem Punkt "wie bewerte ich die aktuelle Hand?".

 

Bisheriger Versuch:

Ich berechne aufgrund der aktuellen Hand die Wahrscheinlichkeiten für alle Ausgänge mach damit eine gewichtete Summe der möglichen Hände. Die Berechnung der Wahrscheinlichkeiten ist performancemäßig schwierig aber sonst klar. Aber welchen Wert soll welche Hand haben? Der ursprüngliche Plan mit der Bewertung entsprechend der Wahrscheinlichkeit funkt nicht wirklich, weil die unwahrscheinlichen Hände dadurch sehr hoch gewichtet werden, und man damit schnell einen hohen erwartungswert bekommt nur weil man eine minimal bessere Wahrscheinlichkeit für einen Straight Flush hat etc.

Derzeitiger Favourit ist die lineare Berechnung, also zwischen je zwei "Typen" (Pair, ThreeAKind, TwoPair etc.) ist immer Wertänderung genau 1.

Aber im direkten Spiel gewinne ich trotzdem, auch wenn ich nur auf meine Karten schaue.

 

Hat zufällig irgendjemand eine tolle Idee wie man die Karten besser bewerten kann?

  • Upvote 2
Link to comment
Share on other sites

Wie wählst du die Starthände aus? Das könnte sowas helfen: http://www.thepokerbank.com/strategy/basic/starting-hand-selection/sklansky-groups/

Danach hängt ja auch viel von der Potsize und implied odds ab. Also wird so ein Ranking dann vermutlich nichts weiter bringen.

 

Starke Hände die nicht getroffen haben will man ja auch nicht unbedingt wegschmeißen. Man denke an AK und das Board ist irgendwie 2,8,J in unterschiedlichen Farben.

Ich glaube, bzw. denke dass es gut wäre zu schauen welche Hände einen beim gegebenen Board noch schlagen können. Ist aber vermutlich auch schwer umzusetzen.

Link to comment
Share on other sites

Ich versteh die Frage nicht ganz. Die Starthände werden nicht gewählt sondern zufällig geteilt. Die Bewertung der Hand ist dann eben die Frage.

 

Wenn es nur um die Bewertung der Starthand gänge wäre so eine Tabelle sicher ein Ansatz. Aber dann bleibt die Frage: Wie bewertet man die Situation nach dem Flop. Die KI muss ja das gesamte Spiel durch Entscheidungen treffen...

 

Derzeit bewerte ich wie gesagt aufgrund des Erwartungswertes meiner Hand gegen den Erwartungswert des Tisches. Bei der Starthand sind die Tischwahrscheinlichkeiten ja noch recht ähnlich, aber auch hier ist es ein Unterschied ob ich ein Assenpaar auf der Hand habe oder 2,3 ...

Aber spätestens nach dem Flop kann man da schön rechnen.

Link to comment
Share on other sites

Ich meinte, wie entscheidest du welche Starthände deine KI wählt, also mit welchen sie überhaupt spielt. Da wären solche Ratings vielleicht ganz praktisch um eine Vorauswahl zu treffen. Das hattest du oben aber so auch gesagt. Ab dem Flop muss halt gerechnet werden und da hat man verdammt viel Auswahl. Und das ist hier vermutlich auch gerade das Problem. Die Ratings könnten die hier z.B noch bei folgendem helfen. Hast du nach dem Flop Karten aus der Kategorie 1 kommt auf jeden Fall ein Raise/ReRaise. Aus Kategorie 2 ein Raise/Call. etc. Bei den weiteren muss man sich dann die Flops anschauen. Ne Einfache Strategie könnte dann sein ob die Odds/PotOdds für die Draws (Drilling), Straße, Flush, Full House, Vierling ein callen rechtfertigen. Kommt der Draw kann man ja nochmal betten. Hier schaut man aber zunächst nur auf seine Karten und die größe des Pots.

 

Denke aber sowas könnte ne einfache Strategie sein. Ist halt die Frage wie man da von so einem elementaren Muster abweichen möchte/kann.

Link to comment
Share on other sites

Hast du nach dem Flop Karten aus der Kategorie 1 kommt auf jeden Fall ein Raise/ReRaise. Aus Kategorie 2 ein Raise/Call. etc

Soweit ok, das werd ich bei Gelegenheit mal umsetzen. Aber:

Bei den weiteren muss man sich dann die Flops anschauen. Ne Einfache Strategie könnte dann sein ob die Odds/PotOdds für die Draws (Drilling), Straße, Flush, Full House, Vierling ein callen rechtfertigen.

Genau hier wirds schwierig. Was bedeutet "rechtfertigen". Und wie definierst du Odds/PotOdds? Bzw. was ist in deinem Fall "Odds"?

Kommt der Draw kann man ja nochmal betten. Hier schaut man aber zunächst nur auf seine Karten und die größe des Pots.

"kann"... in welchem Fall betten? Und was wenn der Draw nicht kommt, oder gar kein Draw da war? Spätestens nach dem Turn sind die Kategorien nicht mehr anwendbar weil es hauptsächlich darauf ankommt was man getroffen hat. Und damit ist man hier wieder bei Frage 1: Worauf basiert man die Entscheidung, und wie entscheidet man dann?

 

Alles leider nicht so einfach.

Ist halt die Frage wie man da von so einem elementaren Muster abweichen möchte/kann.

Das ist dann der nächste Punkt. Wenn man sich für Preflop und Flop auf die Kategorien festlegt ist man eher unflexibel. Und da man für Turn und River sowieso ein allgemeineres Model braucht könnte man vielleicht dieses Model gleich für PreFlop und Flop durchziehen.
Link to comment
Share on other sites

Also, wenn du normal poker spielst, schätzt du doch auch mit ein bisschen Kopfrechnen ab, ob es sich lohnt mitzugehen wenn du einen Draw hast. Da gibts doch die Faustregel auf dem Flop bis zum River: Karten die dir helfen, mal 4. (oder nur bis zum Turn, dann mal 2). Das (besser das in Klammern) setzt man dann in Relation zu den Chips im Pot und dem was man Zahlen muss (aber das weisst du ja sicherlich). (Sowas sollten dann die Pot Odds sein)

Eigentlich müsste man ja auch für einen Menschen eine vielleicht Naive Strategie in so einer Art vorschreiben können. Diese sollte nur sehen, was die eigenen Karten sind, was im Pot und im Flop/Turn/River ist. Die Strategie ist vermutlich nicht lukrativ. Aber wäre ein Anfang.

 

Wenn kein Draw ist, würde ich die Hand folden. Das ist ja gerade der Sinn mit vielen kleinen Händen bei wenig Action den Flop zu sehen um dann ausgezahlt zu werden wenn ein Draw kommt.

Link to comment
Share on other sites

In gewisser Weise geb ich dir Recht. Für erfolgreiches Poker muss vermutlich etwas mehr als "ein bissl Kopfrechnen" her aber das klingt nach einer guten Strategie.

 

Das mit den Karten mal 4 is mir nicht ganz klar was du meinst. Rechnest du den Pot in Bigblinds oder wie setzt du den Pot in Verbindung zu den Outs?

 

PS: for the record: ich bin weit weg von einem Pokerprofi und realistisch gesehen auch nicht besonders gut...

Link to comment
Share on other sites

Also, die Faustregel sich vom Flop zum Turn zu verbessern ist Anzahl der Outs mal 2. Bis zum River ist es mal 4. http://poker.oddschecker.com/poker-features/poker-odds/4-x-2-rule.html

Also kann man bei Straßen/Flushdraws immer rechtfertigen auf dem Flop/Turn mitzugehen wenn man bis zu ca. 20-25% des Pots Zahlen muss (die Zahlen hier müssen kleiner sein, 14-16%). Aber man darf da ja auch die Implied Odds nicht vergessen. Das heißt wenn mein Draw ankommt kann ich möglicherweise erwarten noch Geld vom Gegner zu bekommen. (dann sind evtl 20-25% okay)

Link to comment
Share on other sites

Hmm ok, also die W! das ich zB am Schluss eine Straße hab krieg ich derzeit exakt. d.h. da müsste ich nicht schätzen. Aber man könnte die Strategie insofern umsetzen, als das ich die Wahrscheinlichkeiten für die "hohen" Hände (über Drilling) zusammenzähle und mit diesem Wert in die Entscheidung ob ich mitgehen will reingehe.

 

Wenn ich es richtig Verstehe heißt es

"Wenn meine W! für gute Hand größer ist als Prozent vom Pot was ich callen müsste -> mitgehen" richtig?

 

Sprich wenn ich 20% W! habe am Ende etwas über Drilling zu haben, dann bin ich bereit bis zu 20% des Pots zu zahlen damit ich weiterkomme. Wenn ich jetzt nur 5% zahlen müsste könnte man hier raisen oder?

Link to comment
Share on other sites

Wichtig ist dass man von Runde zu Runde geht. 20% "gewinnwahrscheinlichkeit" insgesamt und 2 mal 20% Zahlen is schlecht.

Mit dem Raisen, kommt drauf an was man verkaufen will. Kannst dann ja auch in ein Reraise laufen oder du hast eine zu schwache Hand und jemand nimmt dich dann aus. 5% sieht ja auch eher nach nem Bluff aus.

Psychologie wird halt schwer umzusetzen. Dazu müsstest du vermutlich Daten über den Spieler sammeln

Link to comment
Share on other sites

Naja, in Phase 1 will ich mal die anderen Spieler ignorieren. Keine Psychologie etc. Rein die Karten (+Potsize) spielen.

 

Von Runde zu Runde ist schön, aber was wenn nach mir ein raise passiert etc? Und wenn in der nächsten Runde die Karte kommt, was dann? wie entscheide ich dann ob ich calle?

 

Ich denke man darf es am Anfang mal nicht zu kompliziert machen. Es sind so schon sehr viele "könnte man" und "ggf." in der Beschreibung...

Link to comment
Share on other sites

naja wenn nen raise passiert geht es wieder um die gleiche Sache: Wie hoch ist die Wahrscheinlichkeit dass ich gewinne bzw dass ich vermutlich ne bessere Hand habe (der könnte ja z.B nen Straight Flush treffen) und wieviel muss ich dafür zahlen. Wenn die Karte dann kommt, dann solte man versuchen Geld zu generieren, also setzen, reraisen etc. Hat man natürlich ne kleine Straße sollte das vorsichtiger passieren.

 

Ja da sind viele ggf drinnen. Wichtig ist halt: wenn man richtig liegt dann sollte man Geld bekommen. Wie man das genau macht ist schwierig. Nen Allin auf dem Flop wirft selten Geld ab.

Link to comment
Share on other sites

  • 2 weeks later...

Hallo zusammen,

 

ich hab jetzt mal probiert das umzusetzen. Also PreFlopentscheidung basierend auf den Starthand-gruppen. Danach basierend auf der W! für > ThreeOfAKind. Und die Ergebnisse sind interessant:

 

Wenn ich die Strategie mit verschiedenen Varianten (Verhältnis Pot zu Odds für Call/Raise) gegen die bisherigen Strategien laufen lasse, überleben sie meist nit lange. Sie verlieren nit sofort alles, aber bisher hat noch keine mehr als 200 Spiele "überlebt".

Wenn ich jetzt aber selber mitspiele. Also zB ich gegen die neue Strategie und die zwei besten "alten" Strategien. Dann gewinne immer noch ich, aber die neue Strategie ist eindeutig zweiter (sogar leicht profitabel). Zugegeben ich hab noch keine 200 Spiele gespielt aber es ist trotzdem interessant.

 

Beim coden fällt auf das die Strategie noch schwieriger zu implementieren ist als gedacht. Die ganzen Fragen "was passiert bei raise, reraise, rereraise etc?" müssen ja alle allgemeingültig beantwortet werden... und das für jede Runde.

 

Bleibt die Frage was man an der Strategie verbessern kann. Ich werd vielleicht mal versuchen die beiden Logiken zu kombinieren...

 

Edit: jetzt hab ich die Strategie grad etwas aggressiver gemacht, jetzt is nimmer so klar das ich gewinne... spannend

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...