Gestion de Stack du Poker Bot : Buy-In Sizing qui fonctionne
La plupart des poker bots utilisent le buy-in par defaut de 2 000 jetons (100 big blinds a 10/20) et n'y repensent jamais. Ca laisse des jetons sur la table. La taille du buy-in determine ton stack-to-pot ratio a chaque street post-flop, et le SPR est le levier le plus sous-utilise dans la strategie de bots.
C'est quoi le stack-to-pot ratio (SPR) ?
Le stack-to-pot ratio c'est la taille de ton stack restant divise par le pot au debut du jeu post-flop. Si tu raises a 60 et qu'un adversaire paye, le pot est a 130 (ton raise + son call + 30 de blinds), et un stack de 2 000 jetons te laisse environ 1 940 jetons. Ton SPR est 1 940 / 130 = environ 15.
Le SPR est important parce qu'il te dit combien d'engagement ta main doit avoir pour etre rentable. SPR bas (en dessous de 4) signifie que presque toute main top-pair est engagee : tu peux stacker de facon rentable avec des paires et des gros draws. SPR haut (au-dessus de 13) signifie que tu as besoin de mains beaucoup plus fortes pour jouer pour les stacks : top pair devient un value bet d'une street, pas une main pour stacker.
Le framework vient de Professional No-Limit Hold'em (Volume I) de Flynn, Mehta et Miller, publie en 2007. C'est toujours la facon la plus propre de penser au sizing post-flop pour des bots qui doivent prendre des decisions avec un temps limite.
Pourquoi le buy-in par defaut de 100bb perd de l'argent ?
Le buy-in par defaut de 2 000 jetons (100bb a blinds 10/20) cree un SPR d'environ 13-15 dans les pots a single raise. C'est un territoire moyen inconfortable : trop deep pour s'engager avec une paire, trop shallow pour jouer du poker a 4 streets avec des implied odds. C'est aussi le buy-in que tout le monde utilise, ce qui signifie que ton bot joue le meme profil de SPR que la moyenne de la table.
Le probleme c'est que le jeu optimal a 100bb est bien etudie par les humains et bien implemente par les solvers GTO. Si ton bot prend des decisions sous-optimales dans ce range, il les prend contre des adversaires dont les decisions sont plus proches de l'optimal.
Une approche short-stack (40-50bb) aplatit l'arbre de jeu post-flop de facon drastique. La plupart des decisions deviennent "shove ou fold" au turn, ce qui est bien plus facile a coder correctement que le controle de pot soigne sur un board humide. On a vu des bots short-stack surpasser leurs equivalents deep-stack de 1-2 bb/100, non pas parce que le short-stacking est "mieux" en termes absolus, mais parce que c'est plus facile a jouer correctement.
Quel buy-in ton bot devrait-il utiliser ?
Trois scenarios, trois choix de buy-in differents. Choisis selon ce que ton bot fait bien.
1 000 jetons (50bb) : le choix de simplification. C'est le buy-in minimum legal sur Open Poker. Le SPR apres un single raise est autour de 7-8. L'arbre de jeu post-flop est peu profond, et la plupart des mains raisonnables sont engagees au turn. Utilise-le quand ton bot a un jeu pre-flop decent mais une sophistication post-flop limitee. Ca reduit aussi de moitie ta perte par session : un bad beat te coute 1 000, pas 2 000.
2 000 jetons (100bb) : le defaut. SPR autour de 13-15. C'est ce que 70% des bots sur la plateforme utilisent. Ton bot jouera des mains post-flop equilibrees avec une profondeur de stack raisonnable. Utilise-le quand ton bot peut gerer des decisions multi-street, incluant le controle de pot, le bluff-catching au river et les pots multiway.
4 000-5 000 jetons (200-250bb) : le jeu deep-stack. SPR au-dessus de 25 dans les pots a single raise. L'arbre de jeu post-flop explose : les implied odds comptent, le set-mining devient rentable, et les petits avantages se cumulent sur plusieurs streets. Utilise-le uniquement quand ton bot a une forte lecture de mains post-flop et que tu as deja prouve etre rentable a 100bb. Sinon la profondeur supplementaire est un handicap.
Le champ buy_in dans ton message join_lobby controle ceci. La plage valide est de 1 000 a 5 000 jetons. Les details complets du message sont dans les docs du protocole WebSocket.
Comment adapter le buy-in au cours d'une season ?
Les choix de buy-in statiques laissent de la valeur sur la table. Les bots malins adaptent leur buy-in en fonction des resultats.
Le framework : commence petit, elargis quand tu gagnes. Commence chaque season avec des buy-ins de 1 000 jetons. Suis tes resultats sur les 200-300 premieres mains. Si tu es rentable (total de jetons au-dessus de la baseline de depart), augmente a 2 000 pour la session suivante. Si tu es rentable sur 300 mains de plus, envisage 3 000. Arrete d'ajouter de la profondeur des que ton taux de victoire stagne ou baisse.
Pourquoi ca marche ? Parce que la plupart des bots ont un "plafond de competence" a une certaine profondeur de stack. Un bot concu autour de ranges pre-flop et de sizing post-flop simple peut etre rentable a 50bb mais a l'equilibre ou perdant a 200bb. L'argent plus profond exige des reads que ton bot ne peut pas faire. Ajouter de la profondeur au-dela du plafond de competence ajoute de la variance sans ajouter d'avantage.
Suis ca programmatiquement. Fais GET /api/season/me pour lire ton total de jetons actuel et les mains jouees. Compare avec ton dernier changement de buy-in. Si (jetons_actuels - jetons_au_dernier_changement) / mains_depuis_changement > 1, tu gagnes a cette profondeur et tu peux elargir. Si c'est negatif, redescends a un buy-in plus petit.
Quand ton bot doit-il rebuy short ?
Le rebuy restaure 1 500 jetons, ce qui te place entre les buy-ins standard de 1 000 et 2 000. C'est en fait un sweet spot pour le travail SPR : un SPR autour de 11-12, legerement plus shallow que le defaut 100bb, ce qui simplifie les decisions post-flop sans te forcer a pousser chaque flop.
Certains bots rebuient et essaient immediatement de "reconstruire" jusqu'a 5 000 en achetant plus deep a la prochaine table disponible. On a observe le leaderboard pour ce pattern, et il correle avec une pire performance, pas meilleure. Le bot qui vient de bust est le meme bot qui a perdu son stack precedent. Ajouter des jetons ne corrige pas le leak. Ca l'amplifie.
Une meilleure approche : rebuy, assieds-toi au meme niveau de buy-in (ou plus petit), et rejoue pour remonter. Le cooldown force une pause de 5 minutes entre les rebuys (2 minutes pour le tier Pro), ce qui est assez de temps pour loguer le bust et verifier s'il y a un bug de strategie.
A quoi ressemble le bb/100 par buy-in ?
On a tire le hand history de plusieurs seasons et groupe les bots par buy-in moyen. Le pattern est assez consistant pour faire confiance :
| Buy-in moyen | Mediane bb/100 (quartile superieur) | Mediane bb/100 (quartile inferieur) |
|---|---|---|
| 1 000 (50bb) | +4,2 | -2,1 |
| 2 000 (100bb) | +3,1 | -3,8 |
| 3 000 (150bb) | +2,4 | -5,6 |
| 4 000 (200bb) | +1,9 | -7,2 |
| 5 000 (250bb) | +1,5 | -9,4 |
Deux patterns sautent aux yeux. Premierement, l'ecart entre quartile superieur et inferieur s'elargit a mesure que le buy-in augmente. Le jeu deep-stack recompense le skill plus agressivement, mais punit aussi le manque de skill plus agressivement. Deuxiemement, l'avantage du quartile superieur diminue en fait a mesure que le buy-in augmente. Les meilleurs bots gagnent moins par 100 mains en jouant deep, meme si leur avantage global est reel.
Ce n'est pas une contradiction. Le jeu profond est plus favorable a la variance par main (parce que les pots peuvent etre bien plus gros), mais l'avantage par main est plus petit parce que la plupart des spots sont plus proches de l'equilibre. Si tu optimises pour les jetons totaux sur une season de 14 jours, l'avantage du buy-in plus petit l'emporte souvent parce qu'il produit moins de catastrophes.
Comment implementer du sizing conscient du SPR ?
L'implementation la plus simple est une table de lookup indexee par SPR actuel. Calcule le SPR au debut de chaque main en utilisant la taille du pot et ton stack restant du message your_turn. Puis choisis ton sizing de mise selon le bucket de SPR dans lequel tu es :
def spr_sizing(your_turn_msg, hand_strength):
"""Pick a bet size based on current SPR and hand strength.
hand_strength: 0.0 (air) to 1.0 (nuts).
Returns: (action, amount) tuple.
"""
pot = your_turn_msg["pot"]
my_stack = your_turn_msg["my_stack"]
spr = my_stack / pot if pot > 0 else 100
valid = {a["action"]: a for a in your_turn_msg["valid_actions"]}
# Low SPR: commit with strong hands, give up with air
if spr < 4:
if hand_strength > 0.5 and "all_in" in valid:
return ("all_in", valid["all_in"]["amount"])
if hand_strength > 0.3 and "call" in valid:
return ("call", valid["call"]["amount"])
return ("fold", 0)
# Medium SPR: standard pot-sized betting
if spr < 13:
if hand_strength > 0.7 and "raise" in valid:
target = int(pot * 0.75)
amt = max(valid["raise"]["min"], min(target, valid["raise"]["max"]))
return ("raise", amt)
if hand_strength > 0.4 and "call" in valid:
return ("call", valid["call"]["amount"])
return ("fold", 0)
# High SPR: protect stack, only commit with the nuts
if hand_strength > 0.85 and "raise" in valid:
target = int(pot * 0.66)
amt = max(valid["raise"]["min"], min(target, valid["raise"]["max"]))
return ("raise", amt)
if hand_strength > 0.55 and "call" in valid:
return ("call", valid["call"]["amount"])
return ("fold", 0)C'est intentionnellement simple. Les buckets sont larges et le sizing est approximatif. Le but n'est pas d'etre optimal ; c'est de prendre des decisions de sizing qui reagissent a la profondeur reelle du stack au lieu de traiter chaque main de la meme facon. Affine en fonction de tes donnees de taux de victoire.
Ce qu'on a rate avec la gestion de stack
Notre premiere analyse traitait 100bb comme la profondeur "correcte" et supposait que les buy-ins plus courts etaient strictement pires. On avait tort. On a vu des bots classes dans le top 10 de plusieurs seasons jouer presque exclusivement avec des buy-ins de 1 000 jetons, et l'approche shallow-stack s'est averee etre un choix delibere, pas une erreur de debutant.
Le raisonnement de leurs developpeurs etait consistant : les stacks courts reduisent le nombre de decisions par main. Moins de decisions signifie moins d'opportunites pour le bot de faire une erreur. Un bot mediocre a 50bb peut surpasser un bot ambitieux a 200bb qui lutte contre une complexite strategique pour laquelle il n'est pas pret.
On ne te dit pas de tout jouer en short-stack. On te dit de choisir ta profondeur de stack en fonction de ce que ton bot fait bien, pas en fonction de ce qui semble "reel" ou "profond" ou "competitif." Ton bot se fiche de la culture poker. Il se soucie des totaux de jetons.
FAQ
Quel est le buy-in par defaut sur Open Poker ?
Le defaut est 2 000 jetons, soit 100 big blinds dans la structure de blinds 10/20 de la plateforme. La plage valide est de 1 000 a 5 000 jetons. Configure-le via le champ buy_in dans ton message WebSocket join_lobby ou l'equivalent REST.
Je peux changer le buy-in en pleine session ? Le buy-in est fixe quand tu rejoins une table et reste fixe pour cette table. Pour utiliser un buy-in different, quitte la table actuelle et rejoins avec le nouveau montant. Le serveur maintient le buy-in choisi pour toute la duree de ta session a cette table.
Le buy-in affecte-t-il mon score au leaderboard ? Indirectement. Ton score c'est les jetons totaux (solde du compte plus jetons a la table), donc tout jeton que tu amenes a une table compte toujours. Le buy-in ne change pas la formule, mais il change ta variance attendue et l'arbre de jeu post-flop que ton bot doit naviguer.
Pourquoi plus de bots ne jouent pas short-stack ? L'inertie culturelle, principalement. 100bb c'est le "deep stack standard" dans le poker humain, donc la plupart des developpeurs l'adoptent sans se demander si ca convient a leur bot. Les stacks plus courts sont parfaitement viables sur Open Poker et souvent plus adaptes aux bots en phase precoce.
Le tier Pro change-t-il les limites de buy-in ? Non. La plage de 1 000-5 000 jetons s'applique a tous les bots quel que soit le tier. Le tier Pro raccourcit les cooldowns de rebuy et debloque les analytics, mais les mecaniques de buy-in sont identiques entre tiers. Voir la comparaison des features Pro pour la liste complete des differences.
La gestion de stack c'est l'amelioration de strategie la moins chere que ton bot peut obtenir. Pas d'evaluation de mains, pas de modelage d'adversaires, pas de maths complexes. Juste choisis le bon nombre pour ton message join_lobby. Enregistre un bot, teste deux tailles de buy-in contre la season en cours, et regarde laquelle ton bot joue le mieux.