Qu’est-ce que le GTO au poker ? Une explication pratique
Introduction au poker optimal selon la théorie des jeux, aux ranges, aux actions mixtes et aux limites d’un exemple dont les paramètres sont précisés.
Sommaire
GTO signifie game theory optimal, ou optimal selon la théorie des jeux. Au poker, c’est une stratégie conçue pour un modèle précis afin qu’un adversaire ne puisse pas beaucoup gagner en l’exploitant. Cela ne promet pas qu’un tableau, une main ou un écran de solveur soit optimal partout.
Les positions, stacks effectifs, ranges, rake, board, tailles de mise et règle d’arrêt changent la réponse. Dans les jeux à information imparfaite, des méthodes comme la minimisation du regret contrefactuel recherchent un équilibre approché du modèle déclaré ; elles ne rendent pas tout le NLHE réel « résolu ». Zinkevich et al. (2007) et Bowling et al. (2015) donnent le contexte : le résultat de Bowling et al. porte sur un modèle spécifié de hold’em en tête-à-tête à mises fixes, pas sur tout le no-limit hold’em.
Penser en ranges, pas en une seule main
Un range est l’ensemble des mains plausibles et de leurs poids. Une stratégie peut mélanger les actions parce que chacune doit être soutenue par un éventail de mains bien construit ; il ne s’agit pas de les alterner à l’intuition. Lisez d’abord les hypothèses, puis interprétez chaque fréquence pour le modèle et le nœud nommés.
Pour consulter les ranges préflop dans le produit, voir Ranges. Pour les interfaces API du produit hébergé, voir le guide API du solveur GTO. Le glossaire définit notamment EV, range et isomorphisme sans transformer cet article en documentation API.
Un exemple de nœud racine aux paramètres explicites
Cet exemple utilise un enregistrement réel de Direct sur CPU avec les ranges GG200NL 100 bb : cash 6-max, CO ouvre à 2.5 bb, BB paie et le flop est Qs Th 2d. Le pot racine est 5.5 bb et le stack restant 97.5 bb ; BB est OOP, CO IP. La configuration conserve les poids mixtes de classes de la source : c’est une entrée illustrative, pas l’affirmation d’un unique range préflop correct ou d’un équilibre complet intégrant le rake de GG.
Pour la classe KQs à la racine BB, la comparaison emploie les moyennes par classe du CSV natif. La fréquence est la moyenne arithmétique des combinaisons KQs restantes et la valeur attendue (EV) de chaque action est la moyenne correspondante par classe, en bb. Ce ne sont ni un résultat pondéré de tout le range, ni un EV par combinaison, ni l’équité, ni le poids préflop KQs original. Le poids d’entrée KQs est 0.913 ; InRange 0.7500 est une couverture de combinaisons survivantes.
Fréquence KQs
Comparaison des fréquences d’action KQs du CSV capturé à la racine BB.; Action racine; Fréquence de classe
Valeur attendue (EV) de chaque action 3.8028 bb
Valeur attendue (EV) de chaque action 3.7597 bb
Valeur attendue (EV) de chaque action -0.7566 bb
L’affichage CSV arrondit cette action à 0,00 % ; cela ne signifie pas que sa probabilité est strictement nulle.
| Action racine | Fréquence KQs |
|---|---|
| Parole | 0.3978 |
| Mise 3 bb | 0.6022 |
| Mise 97 bb | 0 |
L’export de stratégie natif suivant a été produit par l’application pour ce nœud racine BB. Ce n’est ni une capture du bureau ni la source des valeurs ci-dessus.

La capture complète de l’interface de Direct est en anglais : c’est une preuve visuelle séparée du même calcul lié au CSV, non une transcription de métriques depuis des pixels.

Ce que l’exemple dit, et ne dit pas
La configuration prévoit une mise de 50% du pot, soit 2.75 bb à cette racine ; l’arrondi natif de 1 bb donne BET 3.000000. La racine conserve aussi CHECK et BET 97.000000 : ce n’est pas un arbre à deux actions. La fréquence CSV arrondie de la troisième action ne doit jamais devenir « ne jamais miser ».
Le calcul a utilisé CPU, customExact, FP32, maxIteration 100, une cible configurée de 0.5% du pot et l’isomorphisme. Son arbre postflop local ne déduit pas le rake et ne prétend pas reproduire le modèle de rake GG. Il n’expose ni nombre final d’itérations ni exploitabilité mesurée. Les 98.509 secondes observées sont une borne supérieure, pas une mesure exacte du temps de calcul : aucune convergence atteinte, aucun équilibre complet ni conseil universel n’est revendiqué.
Méthode d’étude
- Indiquez positions, stacks, ranges, board, traitement du rake et actions disponibles.
- Distinguez nœud et statistique : fréquence, EV de chaque action, équité et EV pondéré répondent à des questions différentes.
- Conservez les petites actions même si un affichage arrondi montre zéro.
- Modifiez une hypothèse à la fois ; un nouveau board ou range définit un nouveau modèle, pas la continuation de ce résultat.
- Réservez le solveur à l’étude et à la pratique, jamais à l’assistance en temps réel sur table réelle.
Entrées et résultats
Cet exemple ne constitue pas une recommandation de stratégie. Il s’agit de NLHE 6-max : BB OOP, CO IP, 100 bb chacun ; CO ouvre 2.5 bb, BB paie, flop Qs Th 2d, pot racine 5.5 bb et 97.5 bb restants. Le fichier JSON des paramètres d’entrée conserve les ranges mixtes complets : 98 classes BB et 73 classes CO ; les classes absentes ont un poids nul.
Téléchargements
- Télécharger le CSV du résultat de nœud racine — 8,495 octets ; 98 classes BB, fréquences racine (fractions 0–1) et EV de chaque action (bb), pas un arbre complet ni un résultat par combinaison.
- Télécharger les paramètres d’entrée complets en JSON — 3,946 octets ; la configuration exacte utilisée.
- Télécharger MelaGTO Direct v1.1 (10).
| Réglage | Valeur utilisée |
|---|---|
| Solveur | CPU, FP32, customExact |
| Tailles de mise | 50% du pot pour les deux joueurs au flop, au turn et à la river ; avec l’arrondi à des unités de 1 bb, la mise d’un demi-pot au flop devient une mise de 3 bb |
| Arbre de jeu | raiseLimit 1 ; allinThreshold 0.67 ; isomorphisme activé |
| Conditions d’arrêt | maxIteration 100 ; cible 0.5% du pot ; nombre de threads automatique (-1) |
La cible est un paramètre, pas une preuve de convergence. Le relevé ne fournit ni nombre final d’itérations ni exploitabilité mesurée. La racine conserve CHECK, BET 3.000000 et BET 97.000000 ; le CSV arrondit la fréquence de la troisième action à 0.0000, sans que cela signifie qu’elle soit impossible.
Ranges utilisés
Voici les ranges complets à poids mixtes de l’entrée enregistrée, formatés pour les champs Bulk edit de Direct. Les classes et les poids sont conservés à trois décimales ; les classes non listées ont un poids de 0.
BB hors de position (98 classes)
22:1.000, 33:1.000, 44:1.000, 55:1.000, 66:0.900, 77:0.965, 88:0.956, 99:0.920, 32s:0.431, 42s:1.000, 43s:0.804, 52s:1.000, 53s:0.873, 54s:0.727, 63s:1.000, 64s:0.711, 65o:0.060, 65s:0.706, 74s:1.000, 75s:0.871, 76o:0.176, 76s:0.665, 84s:0.309, 85s:0.949, 86s:0.916, 87o:0.163, 87s:0.746, 95s:0.387, 96s:0.927, 97s:0.928, 98o:0.271, 98s:0.823, A2s:0.711, A3s:0.735, A4o:0.289, A4s:0.754, A5o:0.815, A5s:0.540, A6s:1.000, A7o:0.849, A7s:1.000, A8o:0.928, A8s:1.000, A9o:0.996, A9s:0.998, AJo:0.937, AJs:0.785, AQo:0.912, ATo:0.951, ATs:0.883, J3s:0.828, J4s:0.885, J5s:0.936, J6s:0.875, J7s:0.731, J8s:0.747, J9o:0.482, J9s:0.334, JJ:0.224, JTo:1.000, JTs:0.384, K2s:0.912, K3s:0.652, K4s:0.747, K5s:0.882, K6o:0.083, K6s:0.921, K7s:0.856, K8o:0.101, K8s:0.995, K9o:0.980, K9s:0.814, KJo:0.779, KJs:0.527, KQo:0.700, KQs:0.913, KTo:0.856, KTs:0.772, Q2s:0.815, Q3s:0.818, Q4s:0.805, Q5s:0.701, Q6s:0.622, Q7s:0.997, Q8s:0.611, Q9o:0.452, Q9s:0.499, QJo:0.906, QJs:0.145, QTo:0.926, QTs:0.577, T6s:0.829, T7s:0.915, T8o:0.057, T8s:0.910, T9o:0.839, T9s:0.265, TT:0.808
CO en position (73 classes)
22:0.417, 33:0.407, 44:1.000, 55:1.000, 66:1.000, 77:1.000, 88:1.000, 99:1.000, 54s:0.302, 65s:0.401, 76s:0.357, 87s:0.566, 97s:0.623, 98s:1.000, A2s:1.000, A3s:1.000, A4s:1.000, A5o:0.926, A5s:1.000, A6s:1.000, A7o:0.464, A7s:1.000, A8o:1.000, A8s:1.000, A9o:1.000, A9s:1.000, AA:1.000, AJo:1.000, AJs:1.000, AKo:1.000, AKs:1.000, AQo:1.000, AQs:1.000, ATo:1.000, ATs:1.000, J7s:1.000, J8s:1.000, J9o:0.305, J9s:1.000, JJ:1.000, JTo:1.000, JTs:1.000, K3s:1.000, K4s:1.000, K5s:1.000, K6s:1.000, K7s:1.000, K8s:1.000, K9o:0.677, K9s:1.000, KJo:1.000, KJs:1.000, KK:1.000, KQo:1.000, KQs:1.000, KTo:1.000, KTs:1.000, Q5s:1.000, Q6s:1.000, Q7s:1.000, Q8s:1.000, Q9o:0.213, Q9s:1.000, QJo:1.000, QJs:1.000, QQ:1.000, QTo:1.000, QTs:1.000, T7s:0.670, T8s:1.000, T9o:0.160, T9s:1.000, TT:1.000
Utilisez le JSON comme référence complète des paramètres : dans Direct, créez un Custom spot avec les valeurs ci-dessus, collez les ranges complets avec Bulk edit, choisissez la résolution CPU et comparez la sortie du nœud racine au CSV téléchargé. La version, le matériel et les conditions d’arrêt peuvent influer sur une réexécution exacte.