Jump to content
Tom Next - Daytrading Community

Texas Hold'em KI


Mythos
 Share

Recommended Posts

Hallo zusammen,

 

es wird wiedermal Zeit für ein kleines Softwareprojekt, und da ich derzeit Spass am Pokern habe wirds eine Poker-KI. Gleichmal vorweg: Ich nutze es wie immer auch für andere Lernzwecke, in dem Fall um C# zu lernen.

 

Ursprünglich wollte ich einen Blog dazu schreiben (kommt vielleicht noch), aber erstmal würd ich gern die Thematik mit euch diskutieren.

 

Geplant ist also eine KI zu schreiben die in erster Instanz mal korrekt Pokerspielen kann (inkl. dem ganzen Framework rundherum) und dann natürlich auch halbwegs gut spielt.

 

Vor allem der Teil mit dem "gut spielen" wird vermutlich eine Herausforderung... deswegen die Frage: Hat jemand von euch schon Erfahrungen mit PokerKI/Bots? Also im Sinne von "selber geschrieben oder entwickelt". Im Endeffekt werde ich das ganze Ding auch so bauen das man unterschiedliche Strategien gegeneinander antreten lassen kann, ich freu mich also auch über Anregungen was Pokerstrategien angeht.

 

Wenn das Game fertig ist, stell ichs natürlich auch gerne hier zur Verfügung, wird aber aufgrund meines vollen Kalenders noch ein bissl dauern.

  • Upvote 5
Link to comment
Share on other sites

Willst du die Karten und die Spieler getrennt oder gemeinsam betrachten?

IMHO wäre eine getrennte betrachtungsweise einfacher.

 

Punkte die man beachten sollte

 

Spiele die Karten

Karteninterepretation

- in jeder Phase (vor/nach Flop usw)

- Wahrscheinlichkeitsberechnung in jeder Phase

-

 

Position zum Button oder BigBlind

- Verhalten der Spieler vor dir

- Welche Position hast du

-

 

Spiele den Spieler

Spieler

- Risikobereitschaft (konservativ vs aggressiv)

- rebuy/add

- knockout

- wie hoch erhöht er in welcher Position

-

 

Soll es ein autobot oder hud werden?

Ich selber habe keine Erfahrung bei der Entwicklung dieser Software → halte aber den Lernfaktor bei so etwas mitzuwirken für sehr hoch.

  • Upvote 1
Link to comment
Share on other sites

Da ich selber auch noch keine Erfahrung damit hab, will ich simpel starten und ggf. die Komplexität erhöhen.

 

Deine Liste könnte eine gute Unterteilung der Komplexitätslevel sein:

- Phase 1: Eine Strategie die rein aufgrund der Karten entscheidet (wie stehen die eigenen Wahrscheinlichkeiten gegen die der anderen)

- Phase 2: Zusätzliche Einbeziehung der Position und Tischsituation (Höhe des Pot, Anzahl Spieler etc.)

- Phase 3: Entwickeln einer "Einschätzung" der Gegner und anpassen der Strategie je nachdem wer im Spiel ist und sich wie verhält.

 

Was im Endeffekt rauskommen soll: Erstes Ziel ist eine Standalone Applikation die den Ablauf grafisch darstellt, sozusagen der Pokerroom. Eingebettet darin kann dann jedem Player eine Strategie zugewiesen werden.

Je nachdem wie sich das Projekt bis dahin entwickelt sollte man daraus dann alle möglichkeiten haben:

- Herauslösen einer erfolgreichen Strategieimplementierung in einen autobot

- Verwenden der App im Adminmode (manuelle Eingabe aller Aktionen etc.) für die Unterstützung im manuellen Spiel. (ich glaub das wär ein HUD oder? Sprich anzeige der eigenen Wahrscheinlichkeiten, ggf. inkl. Empfehlungen der Strategie)

- Verwenden der App als Trainingsraum für das eigene Pokerspiel. (Schlägt man den Bot kann man es Nutzen um die Strategie zu verbessern, verliert man kann man damit die eigene Strategie verbessern ;)

 

Ich freu mich auf jeden Fall über Beteiligung, derzeit bin ich dabei das Regelwerk bzw. die Berechnung der Wahrscheinlichkeiten zu implementieren.

  • Upvote 1
Link to comment
Share on other sites

Eine kleine Hilfestellung wenn man die Karten spielen will (Phase1 und teilweise auch Phase2)


http://de.pokerstrategy.com/strategy/bss/1535/1/

http://resources.pokerstrategy.com/Strategy/pdf/ps_nl_bigstackstrategie_en.pdf

EDIT: Warum frisst er nicht den Link zur PDF File? Beim editieren sehe ich es noch aber beim abschicken wird er nicht angezeigt

Link to comment
Share on other sites

Ja das SHC von pokerstrategy liegt neben mir ;) Sofern algorithmisch umsetzbar werd ich natürlich versuchen viele solcher "Standardstrategien" zu implementieren und gegeneinander antreten zu lassen.

willst du eigentlich no limit, fixed limit oder pot limit simulieren?

Zu Beginn sicher fixed da am einfachsten.

 

Im Moment kämpf ich mich gerade eher durch das vollständige Berechnen der Wahrscheinlichkeiten/Möglichkeiten. Ist doch etwas komplexer als gedacht.

Link to comment
Share on other sites

Thx, das berechnen der W! selbst ist eh nicht so das Problem. Ich merk nur gerade das die Liste der nötigen Wahrscheinlichkeiten deutlich länger ist als gedacht. Zusätzlich hab ich gedacht das es etwas einfacher wird eine schöne Softwarestruktur für die Berechnung zu finden... aber mei, dafür macht man ja solche Projekte
Link to comment
Share on other sites

Was ja auch etwas unterschiedlich ist: Im TV wird dann ja direkt die richtige Gewinnwahrscheinlichkeit ausgerechnet. Das ganze unter der Kenntnis aller Handkarten. Das wird ja eine KI nicht leisten können. Dann hängt auch sehr viel von der Spieler Anzahl ab. In diesem Buch http://www.amazon.de/The-Mathematics-Poker-William-Chen/dp/1886070253/ref=sr_1_1?ie=UTF8&qid=1368992704&sr=8-1&keywords=mathematics+of+poker steht vermutlich am meisten zur komletten Mathematik hinter fixed limit hold'em drinnen. Vielleicht hilft das ja bei der Vereinfachung bzw Strukturierung der Software

Link to comment
Share on other sites

Volle Information über die gegnerischen Handkarten würde das Spiel natürlich einfacher machen :D

Aber man kann ja auch schon von den Tischkarten und dem Wissen über die eigenen Handkarten etwas über die W! der Gegner aussagen.

 

(Um zu sehen wieviele Mitleser wirklich Interesse dran haben, gibts den Rest erstmal hidden)

 

Hidden Content
You'll be able to see the hidden content once you reply to this topic.

Link to comment
Share on other sites

Volle Information über die gegnerischen Handkarten würde das Spiel natürlich einfacher machen :D

Sowas lässt sich ja ohne Probleme in das Framework optional integrieren.

 

Spannend wird es, wenn die KIs gegeneinander antreten. Weiß jemand, wie gut die Bots bei den Online-Casinos sind (ich spiele kein Onlinepoker)?

Link to comment
Share on other sites

Sowas lässt sich ja ohne Probleme in das Framework optional integrieren.

stimmt, macht es nur nicht realistischer ...

Spannend wird es, wenn die KIs gegeneinander antreten. Weiß jemand, wie gut die Bots bei den Online-Casinos sind (ich spiele kein Onlinepoker)?

Leider keine Ahnung. Aber wenn das Framework und die Strategien stehen werd ich sie sicher gegeneinander trainieren lassen.

 

Wenns soweit ist, stell ich auch gern das Framework für fremde Strategien zur Verfügung, also wenn sich jemand was überlegen will kann er jetzt noch beim Design der Strategieschnittstellen mitwirken.

  • Upvote 1
Link to comment
Share on other sites

Coole Idee, Mythos. Werde es aufmerksam verfolgen. Evtl. gibt es nachher auch eine Version wo ich die Karten selber zuordnen kann. Dann nehme ich bei der nächsten Pokerrunde den Laptop mit und lasse ihn meine Entscheidungen treffen. So kann ich dann mehr trinken :beers:.

Link to comment
Share on other sites

Soda, Wochenende is wieder da und weiter gehts ;)

 

Ich bin inzwischen soweit, das ich in der Console die berechneten Wahrscheinlichkeiten sehe. Jetzt is die Frage ob die stimmen...

 

Kennt jemand eine Software/Liste für sowas? Also eine vollständige Liste mit Antworten auf Fragen wie "Wenn ich JackDiamonds und FourOfClubs habe, wie hoch ist die W! das ich nach den nächsten 5 Karten ein Pair/TwoPair/FullHouse/Flush... habe?"

Wie gesagt theoretisch berechnet is es, nur keine Ahnung obs stimmt...

 

Damit das Ganze möglichst schnell auch lustig und den "Mitmachfaktor" kriegt, werd ich jetzt mal kurz die Strategieimplementierung sein lassen und mich aufs Framework konzentrieren. Sprich den virtuellen Pokerroom, Spielerverwaltung, Setzrunden etc.

 

Die erste Erkenntnis aus der bisherigen Arbeit/Recherche: Ich glaub mein Ansatz is etwas abweichend von den meisten anderen. Da bei "den Anderen" auch die erfolgreichsten PokerBots dabei sind, bin ich mir nicht sicher ob das ein gutes Zeichen ist...

Und es gibt viel viel mehr Hände als gedacht. Also die 12 Typen (HighCard, Pair, ... , StraightFlush) sind ja nur die grobe Einteilung. Beim Showdown zählt dann ja noch der konkrete Wert der Karten. Ein Flush mit Ass als Topkarte is mehr Wert als einer mit 8 als Top, und deutlich weniger als einer mit 6 als Top :D Sprich die Liste mit den möglichen Händen und ihren W! ist ein paar tausend Einträge lang...

 

Aber solche Projekte macht man ja um zu lernen, also ran ans Werk.

 

Aja, @conglom-o: Wenn der "Adminmode" gut genug wird, gibts dann sicher eine Appversion davon, Laptop beim Pokern fällt ja doch auf.

  • Upvote 1
Link to comment
Share on other sites

Bei seiner Statur verschwindet das 17 Zöller in den Handflächen :laugh:

 

So sieht es nämlich aus - in der einen Hand den Laptop, in der anderen die Karten. Und wenn mir jemand dumm kommt, sag ich halt, dass ich meine Pokergewinne direkt an der Börse wieder verzocke :conglom-o:!

Link to comment
Share on other sites

Gibt doch jetzt diese feinen Brillen mit denen man sich unterhalten kann . Sind auch todschick . Die Linke meine ich natürlich , die Rechte würde doch eher auffallen . Mußt dann halt langsam und deutlich reden , aber dann sollte das funzen . Weißt , irgendwo einen Rechner laufen haben, mit der Cam das eigene Blatt und den Tisch scannen, dann warten, dann den Rechner einen Farbcode einblenden lassen , Grün für hohe Wahrscheinlichkeiten , Rot "Finger wech und Passe" . Und das Verrückte ist ..... das es wohl mit dieser Brille durchaus realisierbar sein kann , soweit ich das bislang alles verstanden habe . KB

Link to comment
Share on other sites

Und das Verrückte ist ..... das es wohl mit dieser Brille durchaus realisierbar sein kann , soweit ich das bislang alles verstanden habe . KB

Wenn die ImageRecognition nicht massiv Akku ziehen würde und das Teil sowieso knapp mit Akkulaufzeit wär, ja.

Mit der aktuellen Technologie müsste man vermutlich ein bekanntes Set von Karten nehmen die auch gut unterscheidbar sind damit die Erkennung funktioniert.

 

Aber in den Casinos sind die Glasholes eh schon verboten...

Link to comment
Share on other sites

  • 2 weeks later...

Bin endlich mal wieder was weitergekommen und gleich auf massive "Probleme" gestoßen:

 

Die Berechnung der Wahrscheinlichkeiten ist doch nicht ganz so straight forward wie gedacht. Bisher hab ich gedacht ich berechne die W! für jede Hand einzeln. Geht auch recht gut, aber dadurch kommen natürlich Überschneidungen zustande.

Im Moment ist die W! für zB ein PairAce die W! für das Event "Am Ende sind mindestens 2 meiner 7 Karten Asse". Ist ja in gewisser Weise richtig, wenn ich bereits 2 Asse habe soll die W! ja 100% sein und nicht was kleineres weil es ja sein könnte das es ein Drilling etc. wird.

Aber damit sind die berechneten W! für die einzelnen Hände nicht mehr unabhängig. Sprich ich kann sie nicht einfach zusammenzählen. Denn wenn zB 30% für ein PairAce und 30% für ein PairKing, dann gibt es einen kleinen Prozentsatz mit dem beides gleichzeitig eintritt also 2 Asse UND 2 Könige. Die W! für "PairAce oder PairKing" wäre also W(PairAce) + W(PairKing) - W(PairAce & PairKing). Bei den zwei noch einfach, aber wenn ich für den "Adminmode" die W! für ein (beliebiges) Pair anzeigen will, wirds recht komplex. Vor allem weil bei den 7 Karten ja auch 3 Paare sein können.

Bei Händen mit 5 Karten ist das Problem nicht ganz so schlimm, aber dank 5 aus 7 immer noch vorhanden.

 

Soll heißen: jemand eine Idee damit die Anzeige der W! etwas Sinn macht?

 

Für die Strategien hatte ich vor den Erwartungswert zu verwenden. Mit diesen W! ist die Berechnung des Erwartungswerts natürlich auch nicht mehr möglich, aber man kann eine gewichtete Summe mit Anlehnung an den Erwartungswert verwenden. Hier sollte es trotzdem funktionieren. Es bleibt natürlich die Frage welchen Wert man den einzelnen Händen zuweist...

 

Bei der Implementierung des Frameworks bin ich dafür einiges weitergekommen. Ich kann schon ein normales Game durchspielen. Die GUI ist noch sehr rudimentär aber zumindest die Technik dahinter funzt mal. Noch ist es nur nicht wirklich interessant für Tester, deswegen gibts noch keine Version online.

  • Upvote 1
Link to comment
Share on other sites

In Phase 1 beschränke ich mich mal rein auf die Karten.

Bzgl. Erwartungswert wäre der Plan folgender gewesen:

(I) jede Hand bekommt einen Wert (zB HighCard Two= 0, HighCard Three = 1...., ) sodass man sagen kann das derjenige, der die Hand mit dem größten Wert hat, gewinnt. Wenn zwei je eine Hand mit gleichem Wert haben gibts einen Tie (Sprich es gibt viele verschiedene Wertigkeiten beim Flush je nachdem welche Karten es sind etc.)

 

(II) Man berechne die W! das man am Ende eine gewisse Hand hat. Und macht das für alle möglichen Hände (bzw. alle möglichen Handwerte)

 

(III) Man berechnet den Erwartungswert des eigenen Handwertes als gewichtete Summe von W!*Handwert.

 

Wenn man jetzt in (II) wirklich die W! hätte das diese Hand diejenige ist die zählt, dann hätte man mit dem Erwartungswert eine guten Indikator über die aktuelle Situation, beim Showdown zählt schließlich nur der eigene Handwert im Vergleich zum gegnerischen. Rein die Karten betrachtet sollte also der Erwartungswert des Handwertes das beste sein was man kriegen kann. Denn man kann ja nicht nur die W!-Liste für sich berechnen, sondern auch die W! für die Gegner. Bei den Gegner erhöht man einfach die Zahl der noch zu erhaltenden Karten um 2 und nimmt die eigenen Pocketcards aus der Berechnung aus (Sprich hat man selbst ein Ass reduziert sich die W! das der Gegner ein Ass kriegt etc.)

Diesen Erwartungswert müsste man dann natürlich, wie du sagst, mit jeder Karte die aufgedeckt wird (also am Beginn jeder Bietrunde) neu berechnen.

 

Aber in diesem Ablauf ist sowohl (I) als auch (II) schwierig.

Bei (I) stellt sich die Frage was sinnvolle Handwerte sind. Ich habe 12 mögliche Pairs, aber über 1000 mögliche Flush. Ist der höchste Flush jetzt 1000 Einheiten mehr Wert als der kleinste? Oder sollte sich der Wert von der höchsten Kombination zur niedrigsten innerhalb eines Typs immer gleich ändern? Sprich das niedrigste Pair hat Wert 1, das höchste Wert 1.92 .

 

Bei (II) haben wir das Problem das für diese Berechnung wie gesagt die exklusiven W! benötigt werden. Und es is ja noch komplexer als im vorigen Post beschrieben. Wenn ich zB die W! für ein Assenpaar berechne, müsste ich ausschließen das die anderen 5 der gezogenen 7 Karten _irgendeine_ bessere Kombination enthalten. Das führt entweder zu massiven Sonderfällen und Fallunterscheidungen im Algorithmus oder zu extremen Performanceeinbußen.

 

Dann hab ich mir gedacht das mich bei der Strategie ja nicht unbedingt der Erwartungswert direkt interessiert. Mich interessiert eher der Unterschied zum Gegner. Sprich es ist mir möglicherweise egal ob die W! exklusiv ist oder nicht, mich interessiert wie meine W! für ein Assenpaar steht im Vergleich zur W! des Gegners. Sprich die Differenz, und das ggf. über alle Wahrscheinlichkeiten. Und damit kommen wir zur gewichteten Summe... Wie gesagt, keine Ahnung ob es eine erfolgsversprechende Variante ist, aber es ist gerade die beste die mir einfällt ;)

Link to comment
Share on other sites

Hmm, also das ist wirklich alles sehr komplex zumal man auch noch die Anzahl der Mitspieler nicht außen vorlassen darf.

 

Wie würdest du denn im ersten Ansatz schon bestimmen ob die KI nach dem Flop weiter macht? Wie meinst du das mit deiner Bewertung (ein highcard two is mMn ein poketpair (auf der hand) oder nen vierling).

 

Kommst du beim berechnen im Unterschied zum Gegner nicht auch dazu alle anderen Wahrscheinlichkeiten zu berechnen? Möglicherweise ist die Wahrscheinlichkeit für ne Straße des Gegner wesentlich höher als für deine Assepaar.

 

Es gibt aber auch so Systeme die wirklich allen Startkarten Punkte zuordnen und dann sagen wie man spielen soll. Das war aber ja eigentlich nicht dein Ursprünglicher Ansatz.

 

Schwierig schwierig aber auch sehr interessant

Link to comment
Share on other sites

Ja stimmt schon, Highcard 2 ist eigentlich nicht möglich. Genau genommen ist die niedrigste Highcard die passieren kann eine 7.

Naja, nach dem Flop rechne ich mir wieder die W!-Liste.

 

Die eigene W!-Liste ergibt sich aus den W! für die unterschiedlichen Handwerte mit den gegebenen 5 Karten (die 2 eigenen + 3 Tischkarten) und noch 2 Karten "to come".

Die Gegner W!-Liste ist dann mit den gegebenen 3 Tischkarten und 4 Karten "to come" (W!theoretisch is es egal ob die Karten zuvor geteilt wurden oder danach) wobei aus dem Deck der noch möglichen Karten, zusätzlich zu den 3 Tischkarten die eigenen 2 Pocketcards herausgenommen werden. Sprich wenn ich ein Assenpaar hab, kann der Gegner nie ein Assendrilling etc. kriegen.

 

Gestern bin ich beim herumspielen draufgekommen das ich wohl nicht um die Berechnung der exklusiven W! rumkommen werde... Sonst pfuschen die Werte der niedrigen Highcards etc. zu sehr rein...

 

Ja jeder Startsituation ein Punktesystem geben wär eine Möglichkeit, nur ab dem Flop is damit vorbei. Und es bleibt die Frage wie man die Punkte berechnet. Ich bleib erstmal beim aktuellen Plan, mal sehen was rauskommt.

Link to comment
Share on other sites

Und es ging wieder weiter.

Derzeit steck ich meine gesamte Energie in den Versuch die W! korrekt zu berechnen.

Aktueller Status: Ohne Flush und StraightFlush ist die Berechnung korrekt. Nicht effizient aber korrekt. Sprich ich tue derzeit so als würde es Flush oder Straightflush gar nicht geben.

 

"Korrekt" bedeutet in dem Fall zugegebenermaßen bisher nur das die Summer aller Wahrscheinlichkeit genau 100% ist. Rein theoretisch könnten also auch noch wo Berechnungsfehler drin sein, ist aber eher unwahrscheinlich. Oder es ist ein sehr tiefgreifender Fehler.

 

Was mich schonmal verwundert hat:

Sofern die Berechnung stimmt ist die W! am Ende mit einem Pair dazustehen höher als die W! für eine Highcard. Abhängig von den Startkarten aber grob:

18 % das am Ende nur Highcard

45 % das am Ende ein Pair bleibt

23 % für 2 Paare

5 % für Drilling

4.5 % für Straße

2.5 % FullHouse

0.16 % Vierling

 

Auf der anderen Seite machts wieder Sinn, für die Highcard müssen genau 5 Karten ohne Wiederholung aus den verbleibenden 11 werten genommen werden. Und es darf keine Straße entstehen...

 

Soweit so gut. Der Ausschluss des Flush wird etwas schwieriger. Bei allen anderen Kombinationen geh ich derzeit nach den Values die verwendet werden. Das ganze jetzt auch noch auf die Farben zu erweitern seh ich als performancetechnischen Selbstmord... mal sehen ob mir das erspart bleibt.

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...
 Share

×
×
  • Create New...