Positions-Ranges für Poker-Bots: Nicht von jedem Sitz gleich eröffnen
Ihr Poker-Bot sollte nicht von jedem Sitz dieselben Hände spielen. Beim 6-max No-Limit Hold'em agiert der Button postflop zuletzt, die Blinds dagegen zuerst. Allein dieser Unterschied entscheidet mit darüber, welche Hände Chips gewinnen und welche den Stack unbemerkt schrumpfen lassen.
Teil von: Der vollständige Leitfaden zum Aufbau eines KI-Poker-Bots im Jahr 2026 - die vollständige Säule, die Frameworks, Entscheidungslogik, Gerechtigkeit, Tests und Wettbewerbsmöglichkeiten abdeckt.
Wichtige Erkenntnisse
- Positionsbereiche sind ein günstiger Vorteil, da sie Fehler vor dem Flop beheben, bevor die Hand teuer wird.
- Frühe Plätze erfordern enge öffnungen. Späte Plätze können häufiger gestohlen werden, da weniger Spieler übrig bleiben.
- Implementieren Sie zunächst Bereiche als Handcode-Sets. Fügen Sie die Gegnermodellierung erst hinzu, nachdem die Grundlinie funktioniert.
Warum ist die Position so wichtig?
Die Position ist wichtig, weil späte Spieler ihre Entscheidungen mit mehr Informationen treffen. Die eigenen Strategiedokumente von Open Poker nennen Early Position, Late Position und Blinds als separate Entscheidungskontexte (Aktions- und Strategiedokumente). In einem 6-Max-Spiel verfügt jeder Orbit über sechs Plätze und 30 erzwungene Chips in den Blinds bei der 10/20-Struktur.
Ein Bot, der KTo unter der Waffe öffnet, hat noch fünf Spieler übrig, um ihn zu bestrafen. Ein Bot, der die gleiche Hand am Button eröffnet, hat nur noch zwei Blinds zum Handeln übrig. Gleiche Karten. Unterschiedliches Risiko.
Hier verlieren Einsteiger-Bots stillschweigend. Sie erstellen eine einzelne hand_strength()-Nummer und verwenden sie dann von jedem Sitzplatz aus. Das funktioniert bei offensichtlichen Händen wie Assen. Es scheitert an den Händen, die die meisten Saisons entscheiden: Suited Connectors, schwache Asse, kleine Paare und Broadway-Trash.
Welche sechs Positionskategorien sind sinnvoll?
Verwenden Sie sechs Buckets: UTG, HJ, CO, BTN, SB und BB. Open Poker sendet dealer_seat in hand_start; Ihr Bot kennt seinen eigenen Sitzplatz aus table_joined und kann aus diesen beiden Zahlen die relative Position berechnen (WebSocket-Dokumente).
POSITIONS_6MAX = ["SB", "BB", "UTG", "HJ", "CO", "BTN"]
def position_name(hero_seat, dealer_seat, active_seats):
ordered = sorted(active_seats)
dealer_index = ordered.index(dealer_seat)
relative = ordered[(dealer_index + 1) % len(ordered):] + ordered[:dealer_index + 1]
# relative[0] is small blind, relative[1] is big blind in a full hand.
seat_to_position = {
seat: POSITIONS_6MAX[i]
for i, seat in enumerate(relative[: len(POSITIONS_6MAX)])
}
return seat_to_position[hero_seat]Echte Tische können unterbesetzt sein. Wenn nur drei Bots sitzen, klappen Sie in Richtung BTN-, SB- und BB-Logik zusammen. Tun Sie nicht so, als gäbe es einen Under-the-Gun-Sitz, wenn nur drei Spieler aktiv sind.
Welche Eröffnungsbereiche sollte ein erster Bot verwenden?
Fangen Sie enger an, als Sie denken. Eine praktische Grundlinie für Anfänger ist 12 % von UTG, 16 % von HJ, 22 % von CO, 35 % von BTN und eine vorsichtige Small Blind Range. Diese sind nicht solvernah. Sie sind sicher genug, um die schlimmsten Lecks zu stoppen, während Ihre Postflop-Logik aufholt.
| Position | Ziel für die Open-Range | Beispielhände |
|---|---|---|
| UTG | 12 % | 77+, AJs+, KQs, AQo+ |
| HJ | 16 % | 66+, ATs+, KJs+, QJs, AJo+ |
| CO | 22 % | 55+, A8s+, KTs+, QTs+, JTs, ATo+, KQo |
| BTN | 35 % | 22+, die meisten suited Asse, Broadways, Suited Connectors |
| SB | 28 % | Erhöhen Sie Hände, die im Heads-up gut spielen, und falten Sie Junk |
| BB | Abhängig vom Preis verteidigen | Call anhand von Pot Odds und Spielbarkeit der Hand |
Die genauen Prozentsätze sind weniger wichtig als das Grundmuster: früh eng, am Button weit, in den Blinds situationsabhängig. Dieses Muster verbessert mehr Anfänger-Bots als eine weitere Postflop-Heuristik.
Für die Stack-Tiefe kombinieren Sie diese Bereiche mit Poker-Bot-Stack-Management. Ein 50-BB-Bot und ein 250-BB-Bot sollten kleine Paare nicht gleich behandeln.
Wie kodiert man Bereiche in Python?
Hände als kurze Zeichenfolgen kodieren: AA, AKs, AQo. Paare haben zwei Buchstaben. Suited-Hände enden mit s; Offsuit-Hände enden mit o. Dies ist kompakt genug für handgeschriebene Bereiche und lässt sich leicht in Protokollen debuggen.
RANK_ORDER = "23456789TJQKA"
def hand_code(cards):
r1, s1 = cards[0][0], cards[0][1]
r2, s2 = cards[1][0], cards[1][1]
if r1 == r2:
return r1 + r2
high, low = sorted([r1, r2], key=RANK_ORDER.index, reverse=True)
suited = "s" if s1 == s2 else "o"
return high + low + suited
OPEN_RANGES = {
"UTG": {"77", "88", "99", "TT", "JJ", "QQ", "KK", "AA", "AJs", "AQs", "AKs", "KQs", "AQo", "AKo"},
"HJ": {"66", "77", "88", "99", "TT", "JJ", "QQ", "KK", "AA", "ATs", "AJs", "AQs", "AKs", "KJs", "KQs", "QJs", "AJo", "AQo", "AKo"},
"CO": {"55", "66", "77", "88", "99", "TT", "JJ", "QQ", "KK", "AA", "A8s", "A9s", "ATs", "AJs", "AQs", "AKs", "KTs", "KJs", "KQs", "QTs", "QJs", "JTs", "ATo", "AJo", "AQo", "AKo", "KQo"},
"BTN": {"22", "33", "44", "55", "66", "77", "88", "99", "TT", "JJ", "QQ", "KK", "AA", "A2s", "A3s", "A4s", "A5s", "A6s", "A7s", "A8s", "A9s", "ATs", "AJs", "AQs", "AKs", "K9s", "KTs", "KJs", "KQs", "Q9s", "QTs", "QJs", "J9s", "JTs", "T9s", "98s", "87s", "A9o", "ATo", "AJo", "AQo", "AKo", "KTo", "KJo", "KQo", "QJo"},
}
def should_open(position, cards):
return hand_code(cards) in OPEN_RANGES.get(position, set())Das wirkt bewusst schlicht. Wenn Ihr Bot einen Stack verliert, können Sie position=CO hand=KTo open=False ausdrucken und die Entscheidung sofort nachvollziehen.
Wie verwendet man Bereiche mit gültigen Aktionen?
Eröffnen Sie nur, wenn noch kein Einsatz aussteht und raise zulässig ist. Open Poker sagt Ihnen genau, welche Aktionen gültig sind, einschließlich raise mit Mindest- und Höchstbeträgen. Der übermittelte Betrag ist die Erhöhung, nicht der gesamte Einsatz. Diese Verwechslung ist ein häufiger Bot-Fehler (Aktionsdokumente).
def preflop_decision(msg, hole_cards, position):
actions = {a["action"]: a for a in msg["valid_actions"]}
# Free option in the big blind.
if "check" in actions:
return "check", None
if "raise" in actions and should_open(position, hole_cards):
return "raise", actions["raise"]["min"]
# Facing a raise: use a tighter continue range for now.
if "call" in actions and hand_code(hole_cards) in {"TT", "JJ", "QQ", "KK", "AA", "AQs", "AKs", "AKo"}:
return "call", None
return "fold", NoneDiese Call-Range ist absichtlich eng. Zu viele Calls sind einer der schnellsten Wege, aus einem soliden Preflop-Bot einen verlierenden Postflop-Bot zu machen. Sobald Sie Monte-Carlo-Equity haben, erweitern Sie die Calls basierend auf Preis und Gegnertendenzen.
Wann sollten sich die Bereiche ändern?
Die Ranges sollten sich ändern, wenn sich die Stack-Tiefe, die Tischgröße oder die Gegner ändern. Open Poker-Buy-Ins können zwischen 1.000 und 5.000 Chips liegen, während jede Saison mit 5.000 Chips und festen 10/20 Blinds beginnt (Saisondokumente). Das bedeutet, dass derselbe Bot 50bb, 100bb oder 250bb Poker spielen kann.
Verwenden Sie drei Anpassungen:
| Kontext | Anpassung |
|---|---|
| Shortstack unter 60bb | Spekulativ geeignete Konnektoren und kleine Paare entfernen |
| Deep Stack über 150bb | Suited Connectors und Paare in später Position hinzufügen |
| Loose Blinds | Engere Steals, härtere Value-Bet |
| Tighte Blinds | Button- und Cutoff-Range erweitern |
Nehmen Sie nicht alle vier Anpassungen am ersten Tag vor. Beweisen Sie zunächst, dass der Basis-Range Ihre alte Single-Score-Strategie übertrifft. Lassen Sie dann Gegnermodellierung die Ranges für Button und Blinds anpassen.
Wie testet man eine neue Range?
Testbereiche mit jeweils einer änderung. änderungen vor dem Flop sehen klein aus, aber sie ändern sich bei jeder späteren Straße, da Ihr Bot den Flop mit einer anderen Mischung von Händen erreicht. Wenn Sie den Button erweitern, die Big-Blind-Verteidigung lockern und die Einsatzgröße in einem einzigen Einsatz ändern, wissen Sie nicht, welche änderung geholfen hat.
Verwenden Sie diese Testschleife:
- Wählen Sie eine Position, normalerweise BTN oder BB.
- Wechseln Sie 5 bis 10 Hände in diesem Bereich.
- Führen Sie mindestens 300 Hände durch.
- Vergleichen Sie den Chip-Trend, Rebuys und große Verliererhände.
- Behalten Sie die änderung nur bei, wenn das Protokoll das Ergebnis erklärt.
Das schnellste Signal ist nicht die Gewinnrate. Dabei handelt es sich um „Hände, die vor dem Flop eingestiegen sind und mehr als 20 BB verloren haben.“ Prüfen Sie zuerst diese Hände. Wenn die neue Button-Range fünf marginale Offsuit-Hände hinzufügt und diese Hände weiterhin aufgeblähte Pots verlieren, setzen Sie sie zurück. Wenn sie Blinds stehlen und es selten zu Showdowns kommt, testen Sie weiter.
Range-Arbeit belohnt langweilige Disziplin. Gute Bots brauchen keine heroische Preflop-Kreativität. Sie brauchen in der frühen Position weniger dominierte Hände und in der späten Position mehr kontrollierten Druck.
FAQ
Sollte ein Poker-Bot solvernahe Bereiche verwenden?
Zunächst nicht. Solver-Ranges setzen einen bestimmten Spielbaum und eine bestimmte Reaktion des Gegners voraus. Eine einfache 6-Max-Range-Tabelle ist einfacher zu testen, einfacher zu protokollieren und normalerweise besser als ein kopierter Chart, den Ihr Bot nach dem Flop nicht spielen kann.
Wie verteidigt der Big Blind?
Der Big Blind sollte durch den Preis verteidigen. Wenn Sie 20 in einen 90-Chip-Pot mitgehen, benötigen Sie viel weniger Equity als wenn Sie 200 in 300 mitgehen. Beginnen Sie mit den Pot-Odds und filtern Sie dann Hände heraus, die nach dem Flop schlecht spielen.
Welchen Bereich sollte ich für einen No-Code-Bot verwenden?
Beginnen Sie mit der Vorlage „The Shark“. In den Bot Builder-Dokumenten wird es als Tight-Aggressiv mit 0,30 Tightness und 0,75 Aggression aufgeführt, was für die meisten neuen Benutzer eine bessere Grundlinie als lose Vorlagen darstellt.
Können Positionsbereiche die Handbewertung ersetzen?
Nein. Die Ranges entscheiden darüber, ob man vor dem Flop in die Hand einsteigt. Handbewertung und Equity entscheiden darüber, was nach dem Flop zu tun ist. Benutzen Sie beides.