Skip to content
[OPEN_POKER]

Ranges par position pour bots de poker : arrêtez d'open à chaque siège

JJoão Carvalho||Mis à jour |10 min read

Votre bot de poker ne doit pas jouer les mêmes mains à chaque siège. Au No-Limit Hold'em 6-max, le bouton agit en dernier après le flop et les blinds agissent en premier. Ce seul fait change quelles mains rapportent des jetons et lesquelles grignotent discrètement votre stack.

À lire aussi : Le guide complet pour créer un bot de poker IA en 2026, notre guide de référence sur les frameworks, la logique de décision, l'équité, les tests et les arènes où jouer.

Points clés à retenir

  • Les ranges par position constituent un avantage facile à obtenir car elles corrigent les erreurs préflop avant que la main ne devienne chère.
  • Les premières positions exigent des ranges d'open plus tight. Depuis les positions tardives, vous pouvez voler les blinds plus souvent car il reste moins de joueurs.
  • Implémentez d'abord les ranges sous forme d'ensembles de codes manuels. Ajoutez la modélisation de l'adversaire seulement après que la stratégie de base fonctionne.

Pourquoi la position est-elle si importante ?

La position est importante car les joueurs en position tardive prennent des décisions avec plus d'informations. Les propres documentation stratégique d'Open Poker mentionnent les positions précoces et tardives et les blinds comme contextes de décision distincts (documents sur les actions et la stratégie). Dans une partie 6-max, chaque orbite dispose de six sièges et de 30 jetons forcés en blinds à la structure 10/20.

Un bot qui open « KTo » UTG a encore cinq joueurs pour le punir. Un bot qui ouvre la même main sur le bouton n'a plus que deux blinds pour agir. Mêmes cartes. Risque différent.

C’est là que les bots débutants perdent des jetons sans s'en rendre compte. Ils construisent un seul numéro hand_strength(), puis l'utilisent depuis chaque siège. Cela fonctionne pour les mains évidentes comme les As. Il échoue sur les mains qui décident la plupart des saisons : les connecteurs assortis, les as faibles, les petites paires et les mains Broadway marginales.

Quels sont les six sièges utiles en 6-max ?

Utilisez six compartiments : UTG, HJ, CO, BTN, SB et BB. Open Poker envoie dealer_seat dans hand_start ; votre bot connaît son propre siège à partir de table_joined et peut calculer la position relative à partir de ces deux nombres (WebSocket docs).

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]

Une table peut se retrouver en 3-handed. S'il ne reste que trois bots, passez à la logique BTN, SB et BB. N'appliquez pas une range UTG lorsqu'il n'y a que trois joueurs actifs.

Quelles ranges d'ouverture un premier bot doit-il utiliser ?

Commencez plus tight que vous ne le pensez. Une base simple pour débuter est de 12 % d'UTG, 16 % de HJ, 22 % de CO, 35 % de BTN et une petite range de blinds prudente. Ce ne sont pas des solveurs parfaits. Ils sont suffisamment sûrs pour arrêter les pires fuites pendant que votre logique postflop rattrape son retard.

PosteCible ouverteExemples de mains
UTG12%77+, AJ+, KQ, AQo+
HJ16%66+, ATs+, KJ+, QJ, AJo+
CO22%55+, A8s+, KTs+, QTs+, JTs, ATo+, KQo
BTN35%22+, as assortis, broadways, connecteurs assortis
SB28%Relancer les mains qui se jouent bien en heads-up, fold le reste
BBDéfendre selon le prixCall fondé sur les cotes du pot et la jouabilité de la main

Les pourcentages exacts importent moins que la forme. Range tight en début de parole, large au bouton, et adaptée dans les blinds. Cette structure corrige davantage d'erreurs de débutant que bien des heuristiques postflop.

Pour la profondeur de le stack, combinez ces ranges avec gestion de le stack des bots de poker. Un bot de 50 bb et un bot de 250 bb ne devraient pas traiter les petites paires de la même manière.

Comment encoder des ranges en Python ?

Encodez les mains sous forme de chaînes courtes : AA, AKs, AQo. Les paires ont deux lettres. Les mains assorties se terminent par « s » ; les mains dépareillées se terminent par « o ». C'est suffisamment compact pour les ranges écrites à la main et facile à déboguer dans les journaux.

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())

Cela semble grossier, ce qui est une fonctionnalité. Lorsque votre bot lance une stack, vous pouvez imprimer position=CO hand=KTo open=False et comprendre immédiatement la décision.

Comment utiliser les ranges avec des actions valides ?

N'ouvrez que lorsqu'il n'y a pas de pari en suspens et qu'une relance est légale. Open Poker vous indique exactement quelles actions sont valides, y compris « relancer » avec des montants minimum et maximum. Le montant transmis correspond à la relance totale, et non au supplément ajouté, une confusion fréquente dans les bots (actions docs).

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", None

Cette range d’appel est intentionnellement étroite. Suivre trop large est l'un des moyens les plus rapides de transformer un bot préflop décent en un bot postflop perdant. Une fois que vous avez Monte Carlo equity, élargissez les options d'achat en fonction des tendances du prix et de l'adversaire.

Quand les ranges doivent-elles changer ?

Les ranges doivent changer lorsque la profondeur du stack, la taille de la table ou les adversaires changent. Les buy-ins d'Open Poker peuvent varier de 1 000 à 5 000 jetons, tandis que chaque saison commence avec 5 000 jetons et des blinds fixes de 10/20 (documents de saison). Cela signifie que le même bot peut jouer au poker à 50 bb, 100 bb ou 250 bb.

Utilisez trois ajustements :

ContexteAjustement
Short stack sous 60bbSupprimez les connecteurs spéculatifs adaptés et les petites paires
Deep stack supérieur à 150bbAjouter des connecteurs et des paires adaptés en position tardive
Blindes passivesRéduire les vols, augmenter les value bets
Blindes tightÉlargir les opens au bouton et au cutoff

N'ajoutez pas les quatre le premier jour. Prouvez d’abord que la range de base bat votre ancienne stratégie à score unique. Ensuite, laissez modélisation de l'adversaire ajuster le bouton et les angles morts.

Comment tester une nouvelle gamme ?

Testez les ranges avec un changement à la fois. Les modifications préflop semblent minimes, mais elles changent à chaque rue ultérieure car votre bot atteint le flop avec un mélange de mains différent. Si vous élargissez le bouton, desserrez la défense du big blind et modifiez la taille des mises en un seul déploiement, vous ne saurez pas quel changement vous a aidé.

Utilisez cette boucle de test :

  1. Choisissez une position, généralement BTN ou BB.
  2. Changez 5 à 10 mains dans cette gamme.
  3. Exécutez au moins 300 mains.
  4. Comparez la tendance des jetons, les rebuys et les grosses mains perdantes.
  5. Conservez la modification uniquement si le journal explique le résultat.

Le signal le plus rapide n’est pas le taux de victoire. Il s'agit de "mains qui sont entrées préflop et ont perdu plus de 20 bb". Tirez d'abord sur ces mains. Si la nouvelle gamme de boutons ajoute cinq mains marginales dépareillées et que ces mains continuent de perdre des pots gonflés, annulez-les. S'ils volent les blinds et assistent rarement aux abats, continuez à tester.

En conditions réelles, une discipline simple donne les meilleurs résultats. Les bons bots n’ont pas besoin d’une créativité héroïque préflop. Ils ont besoin de moins de mains dominées en position précoce et d’une pression plus contrôlée en position tardive.

FAQ

Un bot de poker devrait-il utiliser des ranges parfaites pour les solveurs ?

Pas au début. Les ranges de résolution supposent un arbre de jeu spécifique et une réponse de l'adversaire. Une simple table de range 6-max est plus facile à tester, plus facile à enregistrer et généralement meilleure qu'un tableau copié que votre bot ne peut pas jouer postflop.

Comment le big blind défend-il ?

Le big blind devrait défendre par le prix. Si vous suivez 20 dans un pot de 90 jetons, vous avez besoin de beaucoup moins d'équité que si vous suivez 200 dans un pot de 300. Commencez par les cotes du pot, puis filtrez les mains qui jouent mal après le flop.

Quelle range dois-je utiliser pour un bot sans code ?

Commencez par le modèle The Shark. La documentation de Bot Builder le répertorie comme tight-agressif avec un paramètre tightness de 0,30 et un paramètre d'agressivité de 0,75, ce qui constitue une meilleure base de référence que les modèles loose pour la plupart des nouveaux utilisateurs.

Les ranges de positions peuvent-elles remplacer l'évaluation manuelle ?

Non. Les ranges décident s'il faut entrer dans la main préflop. L'évaluation manuelle et l'équité décident quoi faire après l'apparition du tableau. Utilisez les deux.

Continuer la lecture