Schnelles Iterieren über bestimmte Bitfolge?



  • Okay, ich habe mir Mal ein paar Tabellen gemacht, welche Hand gg welche andere Hand welche Redraw-Chancen etc. hat.

    Fest steht leider so gut wie gar nichts. Str8flush gewinnt immer gegen Quads, das steht fest. Aber Str8flush gewinnt nicht Mal zwangsläufig gegen ein einzelnes Paar, da dieses Redrawchancen auf einen höheren Str8flush haben könnte... mit vielen Bedingungen lassen sich dann ein paar Fälle finden, die man mit einer Vorabfrage ausschließen könnte.

    Aber: diese Vorabfragen kosten Zeit und man spart zu selten etwas ein, als dass die gut wären.

    Mir ist jetzt aber eine andere Optimierung eingefallen: Wenn ich Spieler1 und 2 jeweils nur eine Kombination gebe, ist mein Programm ja schnell genug (wenn auch bei Weitem nicht so schnell wie Pokerstove oder Konsorten -.-). Mein Problem war ja, dass ich bei AK gegen QJ z.B. 16x16 Kombinationen habe. Aber da gibt es dann tatsächlich viele Äquivalente, also kann ich da schon Mal sehr viel einfach rauskicken.

    Ich schaue Mal, wie viel ich damit einsparen kann...



  • Ich hab zwar überhaupt keine Ahnung von Poker aber wenn die Spiele die du durchprobieren willst unabhängig voneinander sind kannst du parallelisieren. Mein Tip mit OpenCL war nicht wirklich als Scherz gemeint. Selbst mit einfachem Multithreading kannst du auf nem Dual Core dann wohl schon annähernd 100% rausholen...



  • dot schrieb:

    Ich hab zwar überhaupt keine Ahnung von Poker aber wenn die Spiele die du durchprobieren willst unabhängig voneinander sind kannst du parallelisieren. Mein Tip mit OpenCL war nicht wirklich als Scherz gemeint. Selbst mit einfachem Multithreading kannst du auf nem Dual Core dann wohl schon annähernd 100% rausholen...

    Das Bruteforcen, was er vorhat, ist ein Musterbeispiel für parallelisierbare for-schleifen 😉



  • Eben, denk ich mir...



  • Ja, das mit der Parallelisierung hatte ich auch schon im Kopf, danke. 🙂 Werde das nachher definitiv noch einbauen. Aber damit verbessere ich die Laufzeit ja auch nur um das Doppelte beim Dualcore oder um das Vierfache beim Quadcore. Das bringt mir also nicht viele Dimensionen an Performance-Verbesserung.



  • OpenCL/DirectCompute/CUDA. Damit kannst du um das 20 - 100 fache verbessern (vorausgesetzt deine Grafikkarte gibt was her)...



  • Oh... ich wusste nicht, dass die Grafikkarte so gut ist. Aber wie kann die Grafikkarte einen so viel stärkeren Prozessor als die CPU haben?

    Übrigens kann man die 16x16 Abfragen auf 15 reduzieren, denn so viele Gruppen gibt es. Bei Bedarf lade ich Mal das Excel hoch. 😉



  • Die Grafikkarte hat keinen stärkeren Prozessor sondern einen anderen. Genauer: Gaaaaanz viele kleine und dumme Prozessoren (ne GTX 580 hat 512 Cores). Wenns um Numbercrunching geht hat da keine CPU der Welt ne Chance (eine NVIDIA Tesla liefert 1TFLOP Peak Performance). Aber das ist dann auch schon wieder alles was das Ding kann. Ist eben eine hoch spezialisierte Architektur...



  • Das klingt super. Wenn ich noch mehr Performance brauche, schaue ich mir das dann definitiv Mal an, danke. 🙂

    Ich bin mit meiner 16x16 -> 15 Kombination jetzt allerdings genau so schnell wie Pokerstove. Die haben wohl auch keinen anderen Trick angewandt. 😉 Jetzt könnte ich also noch schneller werden, wenn ich wollte.



  • Eisflamme schrieb:

    Das klingt super. Wenn ich noch mehr Performance brauche, schaue ich mir das dann definitiv Mal an, danke. 🙂

    Ich bin mit meiner 16x16 -> 15 Kombination jetzt allerdings genau so schnell wie Pokerstove. Die haben wohl auch keinen anderen Trick angewandt. 😉 Jetzt könnte ich also noch schneller werden, wenn ich wollte.

    Ich frag mich die ganze Zeit, wie ihr auf 16 Kombinationen kommt?

    2-A sind 13 Karten, macht also 13x12 unpaired off-suit kombinationen, 13x12 suited kombinationen und 13 pairs, die ein Spieler auf der Hand haben kann.



  • Ich meinte 16 Kombinationen pro Hand. Wenn der Benutzer A-K eingibt (also Ass-König), dann gibt es 4 Karten für das Ass und 4 für den König, also 16. Und eine übliche Abfrage ist, dass ein Benutzer für Spieler 1 AK und für Spieler 2 QJ oder so eingibt. Und die will ich ja optimieren. 🙂



  • Eisflamme schrieb:

    Ich meinte 16 Kombinationen pro Hand. Wenn der Benutzer A-K eingibt (also Ass-König), dann gibt es 4 Karten für das Ass und 4 für den König, also 16. Und eine übliche Abfrage ist, dass ein Benutzer für Spieler 1 AK und für Spieler 2 QJ oder so eingibt. Und die will ich ja optimieren. 🙂

    Das sind dann 12 off-suit kombinationen und 4 suited Kombinationen, die für sich gesehen schon verschiedene Gewinnwahrscheinlichkeiten haben.
    Je nachdem ob der Gegner dann auch eine der Farben hält verschieben sich die Wahrscheinlichkeiten weiter. So einfach ist das leider nicht 😞



  • Deswegen gibt es ja 16x16 Möglichkeiten. 16 für Spieler 1, 16 für Spieler 2.

    Für den Fall, dass die Kartenwerte (A,K,Q,J) zumindest disjunkt sind, habe ich Mal eine Tabelle gemacht. Und in dieser lässt sich sehen, dass wir 16x16 bereits auf 15 Gruppen reduzieren können:
    http://mihahome.de/groups.JPG

    Die Farben habe ich mehrfach verwendet. Sie sind pro Bereich (der von einem anderen Bereich durch weiße Zellen getrennt ist, sodass es vier Bereiche gibt) aber eindeutig.

    Bei Kartenübereinstimmungen sind natürlich andere Gruppen zu unterscheiden. Aber das kriegt man mit etwas Arbeit schnell hin. 🙂



  • ah okay, jetzt versteh ich... dann kommen jetzt "nurnoch" tausende anderer solcher Tabellen? ;o)



  • Die Tabelle sieht mir jetzt auch nicht wirklich relgemäßig aus.



  • otze schrieb:

    Die Tabelle sieht mir jetzt auch nicht wirklich relgemäßig aus.

    Darum gehts nicht. Es geht nur drum, dass er z.B. wenn beide Spieler ausschließlich Pik auf der Hand haben die gleichen Equities hat wie wenn beide Spieler ausschließlich Herz oder ausschließlich Karos haben etc. (das sind die vier roten kästchen oben links). Genauso sind die Equities gleich, wenn die 4 Karten der beiden Spieler 4 unterschiedliche Farben haben, egal ob das As von Spieler 1 jetzt Pik oder Herz oder Karo ist (die hellgrünen Kästchen unten rechts)



  • Regelmäßig hin oder her. Alles mit gleicher Farbe hat die gleiche Equity, es ist nicht wirklich kompliziert.

    Und ich brauche kaum noch solche Tabellen. Es gibt halt den Fall, dass beide Karten unterschiedlich sind und dass eine der Karten mit der anderen übereinstimmt. Wenn beide gleich sind, ist die Equity eh 50% und wenn man bestimmte Kombinationen gegeneinanderlaufen lässt (also AK in herz und AK in herz,kreuz), greift ja meine Gruppierungs-Sache nicht.

    So, was bleibt noch übrig? Paare, die man auf der Hand hält. Da gibt es jetzt noch weniger, weil Paare erstmal nur 6 Kombinationen haben. Jetzt hat man wiederum nur zwei Tabellen. Eine, wo das Paar eine der Karten teilt (AK vs AA z.B.) und eine, wo das nicht der Fall ist.

    Insgesamt also vier Tabellen, das ist doch total überschaubar.



  • Eisflamme schrieb:

    Insgesamt also vier Tabellen, das ist doch total überschaubar.

    Ich sehe mehr:

    1. unpaired unmatched, d.h. 4 verschiedene Werte (wie oben)

    2. unpaired matched, d.h. 3 verschiedene Werte, z.B. AK, AQ

    3. unpaired double matched, d.h. 2 verschiedene Werte, z.B. AK, AK.

    4. paired unmatched, z.B. AA, QK

    5. paired matched, z.B. AA, AK

    6. double paired unmatched, z.B. AA, KK

    7. double paired matched, z.B. AA, AA

    8. hast du schon.

    9. ist auch relativ kompliziert, und zwar eine 16x12 Tabelle (die gematchte Karte von Spieler 2 kann nicht die gleiche Farbe wie die von Spieler 1 haben, daher für das A jeweils nur 3 Möglichkeiten)

    10. 16x9-Tabelle, mit relativ wenig verschiedenen Equities (6?)

    11. 4x16-Tabelle (4 Equities?)

    12. 4x8-Tabelle (3 Equities?)

    13. 4x4-Tabelle (3 Equities?)

    14. Equity = 1:1, nicht wirklich ne Tabelle...



    1. entfällt doch, weil es 50%-50% ist. Und wenn ich da nur einzelne Kombinationen vergleiche, brauche ich ja keine Tabellen anlegen, um Fälle rauszuschmeißen

    2. ist ebenfalls 50%-50% und bei 6) bin ich nicht sicher, ob man da noch was kürzen kann; falls ja, ist das ja aber auch schnell gemacht. 🙂

    Ich schau da nochmal genau drüber, aber das scheint sich doch machen zu lassen.



  • Eisflamme schrieb:

    1. entfällt doch, weil es 50%-50% ist. Und wenn ich da nur einzelne Kombinationen vergleiche, brauche ich ja keine Tabellen anlegen, um Fälle rauszuschmeißen

    Nein, das ist nicht automatisch 50/50. AK suited vs. AK offsuit hat deutlich bessere chancen. As8h vs. Ad8s hat bessere Chancen (wenn noch 4s in den Community cards kommen gewinnt As vermutlich)

    1. ist ebenfalls 50%-50%

    das hatte ich ja drangeschrieben, 7 ist das einzige was sofort klar ist.

    und bei 6) bin ich nicht sicher, ob man da noch was kürzen kann; falls ja, ist das ja aber auch schnell gemacht. 🙂

    sind 3 Equities: 4 verschiedene Farben, 3 verschiedene Farben, 2 verschiedene Farben 😉

    Die Frage bleibt trotzdem: Wenn jetzt irgendwas eingegeben wird, kannst du nach der Tabelle sagen, "hey, das hat die selbe Equity wie wenn Spieler 1 statt AK in Herz AK in Pik hätte" - nur was bringt dir das wenn du dafür nicht die Tabelle mit den Equities hast? (Oder kapier ich wieder was nicht?)


Anmelden zum Antworten