- 13 janvier 2022
- florian99p99
- 6058
- 79 Commentaires
L'académicien florian99p99 vous propose, à travers un article, de revoir l'essence même de la théorie des jeux, et de le transposer dans votre jeu favori à travers deux simulations posées : Un spot river, et un spot à la turn.
Introduction
Pour comprendre les principes de base de la théorie, on va résoudre deux toys games.
Un qui simulera un spot river (partie 1), et un autre un spot turn (partie 2), ensuite on analysera les différences entre le jeu monostreet, et multi street (partie 3). Le joueur OOP sera toujours passif (call or fold), cela facilitera les calculs, et cela ne changera pas les concepts que je veux montrer. La dernière partie se passera avec un solver.
Si vous n’arrivez pas à comprendre un concept n’hésitez pas à revenir en arrière.
La théorie des jeux
La théorie des jeux est un domaine des mathématiques qui s'intéresse aux interactions stratégiques des agents (appelés « joueurs »).
Au poker le but des deux joueurs va être de maximiser leur EV, ainsi ils vont atteindre ce qu’on appelle l’équilibre de Nash. Aucun des deux joueurs ne peut dévier de cet équilibre sans risquer de perdre de l’EV.
Partie 1 : La théorie river
Le jeu (0,1) est un jeu très connu, c’est un jeu à deux joueurs, les range sont symétrique, et sont composés de mains de 0, à 1.
La distribution (0,1)
« « Les deux joueurs se font « « distribuer » » un nombre réel uniformément aléatoire entre 0 et 1, cela signifie que chaque joueur a les mêmes chances de se voir distribuer tout nombres entre 0 et 1. Ces nombres fonctionnent pour les deux joueurs comme des mains de poker » » The mathematics of poker.
La main la plus basse gagne, on a donc 0 = nuts et 1 = air. Le joueur A est OOP, et le joueur B est IP. Pour une distribution uniforme comme (0,1) la probabilité qu’un intervalle soit sélectionné est égale à la longueur de cet intervalle.
Arbre du jeu
Ce jeu a été résolu pour la première fois par le mathématicien John van Neumann et Oskar Morgenstern, il a été également repris par Bill Chen, Jerrod Ankenman, et Will Tipton.
Ce jeu simule donc une situation à la river avec un adversaire ultra passif. Pour résoudre un jeu, il y a plusieurs façons de faire qui mène tous au même résultat, on peut le faire sous forme de matrice, ou écrire directement les équations d’indifférence de chaque action.
Que veut dire indifférence ?
Rendre indifférent un adversaire c’est quand on choisit de faire une action à une fréquence qui rend indifférent l’adversaire entre toutes ses actions, c’est-à-dire qu’il ne peut pas augmenter son EV.
Ce qui sépare une action A d’une action B c’est ce qu’on appelle un seuil, sur le graphique ci-dessous, on peut voir très clairement les trois seuils séparer chaque action.
x1* = indifférence entre call ou fold
y1 = indifférence entre check ou bet en value thin
y0 = indifférence entre check ou bet en bluff
Avec un peu de logique, on peut très facilement parametrer la solution comme ci : y1 > x1* > y0
En effet, ça n’aurait aucun sens si le joueur B value bet avec des mains qui sont toujours battues, et ça n’aurait aucun sens non plus pour le joueur A de call avec une main qui est toujours battue par les bluffs du joueur B.
Les équations d'indifférence
P = pot, B = Bet
Joueur A :
EV fold = 0
EV Call = - B y1 + (B + P) (1 - y0)
On perd notre mise quand le joueur B est en value et on gagne le pot + une mise quand il bluff
EV call = EV fold =- B y1 + (B + P) (1 - y0) = 0
Joueur B :
EV bet value thin = (B + P) (x1* - y1) - B Y1
On gagne le pot plus une mise quand le joueur A call avec une main moins bonne, et on perd une mise quand il call avec mieux
EV check strong = P (1 – y1)
On gagne le pot contre les mains dominé
EV bet value thing = EV check strong = (B + P) (x1* - y1) - B Y1 = P (1 – y1)
EV bet bluff = P (1 – x1*) – B x1*
On gagne le pot quand il fold, et on perd une mise quand il call
EV check bluff = P (1 – y0)
On gagne le pot contre les mains dominé
EV bet bluff = EV check bluff = P (1 – y0) = P (1 – x1*) – B x1*
Connecter les équations entre elles
Ce qui nous donne :
-
y0 = 1 - B / (B + P) y1
B / (B + P) est une formule que l’on retrouve souvent, elle est couramment appelée alpha, et 1 – B / (B + P) ou P / (B + P) c’est ce qui est couramment appeler MDF (minimum defense frequency) cette formule est très importante, c’est elle qui va définir la stratégie des deux joueurs. Le joueur B va donc bluffer alpha * c’est mains de value.
-
X1* = P / (B + P) y0
Encore une fois nous retrouvons la formule P / (B + P) que l’on à vue plus haut. Cette équation signifie que l’on va défendre le % du MDF de l’ensemble des mains qui battent le meilleur bluff du joueur B, ce qui fait que la fréquence de call inexploitable sera forcément inférieure au MDF, car (P / P + B) > (P / P + B) y0 sachant que y0 < 1
-
Y1 = x1* / 2
Ça veut dire que notre seuil de value bet va gagner ½ face à sa range de call
On a donc :
-
X1* = 2 P / (B + P) / (((2 – B / (P + B)) ((B / (B + P) + 1))
Et une fois que l’on connait x1* on peut trouver toutes les autres valeurs.
Les sizings GTO
Pour résumer en quelques mots la stratégie de bet size, IP aurra une infinité de sizing, plus sa main et forte, et plus le sizing sera cher, chaque region de bet size sera acompagné du bon nombre de bluff pour rendre OOP indiférent entre call et fold. Je ne parlerais pas plus du sizing GTO, car c’est un sujet compliqué qui mériterait sans doute des centaines de pages. Pour ce qui veulent en savoir plus je vous invite à lire The mathematics of poker de Bill Chen et Jerrod Ankenman.
Le jeu exploitant
Le jeu exploitant est très facile, si IP a une range de bet bluff heavy*, alors OOP va call tout c’est bluff catcher soit x1* = y0, et s’il a une range de bet trop nuts heavy*, alors OOP va call B / (2 B + P) (y1 + 1 – y0), ça veut dire que OOP va call avec toutes ses mains qui ont la cote contre la range de bet de IP.
Si OOP call trop alors IP va arrêter de bluffer, et sa range de value bet va augmenter, et s’il fold trop alors OOP va bet tout c’est bluff, est réduire sa range de value bet.
* bluff heavy veut dire trop lourd en bluff
* nuts heavy veut dire trop lourd en nuts
Partie 2 : la théorie multi street
Le jeu numéro 2 est le même que le jeu numéro 1, sauf qu’il va se dérouler sur 2 street, les range sont toujours issue d’une distribution (0,1) et le joueur A peut juste check call, ou check fold.
Arbre du jeu
Equations d'indifférences
Vous pouvez sauter cette partie si vous n’aimez pas les mathématiques, j’expliquerais les équations dans la partie d’après.
EV bet thin check = EV check check = y1t
EV bet strong bet thin = EV bet strong check = y1r
EV bet bluff strong check = EV check check = y0t
EV bet bluff thin bet bluff = EV bet bluff thin check = y0r
EV call thin fold = EV fold = x1*t
EV call strong call = EV call fold = x1*r
Paramétrage de la solution : 0 > y1r > x1*r > y1t > x1*t > y0t > y0r >1
Savoir si x1*r et bien > à y1t n’a pas d’importance, car ils n’interagissent pas ensemble dans les équations.
Pt = pot turn, Bt = bet turn, Pr = pot river, Br = bet river
EV bet thin check = (Pt + Bt) (x1*t – y1t) + (pt) (1 – x1*t) – Bt (y1t)
EV check check = Pt (1 – y1t)
(Pt + Bt) (x1*t – y1t) + (pt) (1 – x1*t) – Bt (y1t) = Pt (1 – y1t)
-
x1*t = 2 y1t
EV bet strong bet thin = Pt (1 – x1*t) + (Pt + Bt) (x1*t – x1*r) + (Pt + Bt + Br) (x1*r – y1r) – (Bt + Br) y1r
EV bet strong check = Pt (1 – x1*t) + (Pt + Bt) (x1*t – y1r) – Bt y1r
Pt (1 – x1*t) + (Pt + Bt) (x1*t – x1*r) + (Pt + Bt + Br) (x1*r – y1r) – (Bt + Br) y1r = Pt (1 – x1*t) + (Pt + Bt) (x1*t – y1r) – Bt y1r
-
x1*r = 2 y1r
EV bet bluff strong check = Pt (1- x1*t) – Bt (x1*t)
EV check check = pt (1 – y0t)
Pt (1- x1*t) – Bt (x1*t) = pt (1 – y0t)
-
x1*t = y0t Pt / (Pt + Bt)
EV bet bluff thin bet bluff =pr (x1*t – x1*r) + pt (1 – x1*t) – (Br + Bt) (x1*r)
EV bet bluff thin check = pt (1 – x1*t) – Br (x1*t)
pr (x1*t – x1*r) + pt (1 – x1*t) – (Br + Bt) (x1*r) = pt (1 – x1*t) – Br (x1*t)
-
x1*r = x1*t (Pr) / (Pt + Br)
EV call thin fold = (Pr + Bt) (y0r – yot) – Bt (1 – y0t) – Bt (y1t)
EV fold = 0
(Pr + Bt) (y0r – yot) – Bt (1 – y0t) – Bt (y1t) = 0
-
y0r (Pt + 2 Bt) / (Pt + Bt) - Bt / (Pt + Bt) - y1t Bt / (Pt + Bt) = y0t
-
y0t =1 – (1 - y0r) Bt / (Bt + Pt) – y1t Bt / (Bt + Pt) – (1 - y0r)
EV call strong call = (Pt + Bt) (y1*t – x1*r) + (Pt + Bt) (y0r – y0t) + (Pt + Bt + Br) (1 – y0r) – (Bt + Br) (y1r) – Bt (x1*r – y1r)
EV call fold = (Pt + Bt) (y1*t – x1*r) + (Pt + Bt) (y0r – y0t) - Bt (1 – y0r) – Bt x1*r
(Pt + Bt) (y1*t – x1*r) + (Pt + Bt) (y0r – y0t) + (Pt + Bt + Br) (1 – y0r) – (Bt + Br) (y1r) – Bt (x1*r – y1r) = (Pt + Bt) (y1*t – x1*r) + (Pt + Bt) (y0r – y0t) - Bt (1 – y0r) – Bt x1*r
-
y0r = 1 - y1r Br / (Pr + Br)
αt = Pt / (Pt + Pr), αr = Pr / (Pr + Br)
Les calculs sont disponible dans l’annexe.
Partie 3 : Analyse des différences entre le jeu multi street et mono street
Point de vue du défenseur
Dans le jeu river OOP défend P / (B + P) y0, et dans le jeu turn il défend Pt / (Pt + Bt) y0t.
Cela veut dire que la stratégie de defense de OOP ne change pas, il va toujours défendre le % du MDF des mains qui battent le plus fort bluff de IP
Sa range de call sera donc plus tight river face à un 2 barrel, et plus loose face à un seul barrel, c’est logique car face à un deux barrel il call P / (B + P) multiplié par sa range de call turn
Point de vue de l'attaquant
Dans le jeu river IP value bet x1* / 2, et dans le jeu turn il value bet x1*t / 2.
Sa stratégie ne change pas, il va toujours bet avec ces mains qui ont plus de 50 % face à la range de call de OOP. Quand on bet turn, on rend la range de OOP plus strong, ce qui fait que notre bottom de value bet ne pourra pas deux barrel.
IP aura donc deux range de value à la turn, des mains qui vont bet pour value turn, et check river, et des mains qui vont bet turn, et river.
Dans le jeu river IP bet bluff y0 = 1 - B / (B + P) y1, et dans le jeu turn il bet bluff 1 – (1 - y0r) Pt / (Bt + Pt) – y1t Pt / (Bt + Pt) – (1 - y0r)
Cela veut donc dire que quand on est à la turn nos deux barrel bluff sont considéré comme des value bet. Ce principe est très important, c’est pour ça qu’au flop on peut bet avec une range weak, alors qu’à la river on bet avec une range plutôt strong.
Pour résumé la stratégie de bluff de IP, il va bluff turn et give up river avec 1 – (1 - y0r) Pt / (Bt + Pt) – y1t Pt / (Bt + Pt), et il va deux barrel bluff avec 1 - B / (B + P) y1r
Je n’ai pas parlé de la stratégie d’exploitation dans le jeu multi street, car ce n’est pas possible de la décrire en quelques lignes, cela mériterait un article complet.
Exemple
Bet size turn = 100, Bet size river 150, Pot = 100
L'attaquant
Résumé de la stratégie GTO dans un tableau
Le défenseur
Résumé de la stratégie GTO dans un tableau
Calcule
Les calculs sont fournis tout en bas de l'annexe
Le solver
Board: K♣8♥3♦2♠
L'arbre du jeu, est le même que celui de notre exemple plus haut
L'attaquant
Résumé de la stratégie GTO dans un tableau
Le défenseur
Résumé de la stratégie GTO dans un tableau
Les principes théoriques que l’on a vu sont toujours valables, mais les valeurs changent à cause de la composition des range, et du dynamisme du board, il y’a donc d’autres variables à prendre en compte dans notre modèle mathématique. Essayez de trouver lesquelles et de comprendre leur influence sur le spot ! Je vous invite aussi à essayer de trouver les stratégies d’exploitation quand l’un des deux joueurs dévie du GTO.
Equité de la range de deux berrel VS range de call call river
Question
Pour répondre à ces questions, je vous conseille de run le spot pour pouvoir naviguer librement dans le tree. Pour ceux qui n’ont pas la version payante, ça n’est pas grave car les spots turn et river sont gratuits. Si vous ne savez pas comment run une simulation, Freudinou a fait des tutos sur le site PA.
- Pourquoi dans ce spot les low 8x sont-ils profitables à 2 barel sur la river 2♥ ? Cela va pourtant à l’encontre de la formule y1 = x1* / 2. Essayez de trouver les EV de bet et de check de ces mains, et regardez laquelle est supérieure.
- Que ce passe t’il si OOP essaye de rendre non profitable le bet avec ces mains. Comment IP pourrait exploiter ça ?
- A la turn OOP call 55.3 %, pourtant P / (B + P) = 50 %. Qu’est-ce qui l’incite à défendre plus ici ?
Stratégie de IP turn
Stratégie de OOP turn
Annexe
Calcul des équations d’indifférence multi street
EV bet thin check = (Pt + Bt) (x1*t – y1t) + (pt) (1 – x1*t) – Bt (y1t)
EV check check = Pt (1 – y1t)
(Pt + Bt) (x1*t – y1t) + (pt) (1 – x1*t) – Bt (y1t) = Pt (1 – y1t)
Pt (x1*t – y1t) + Bt (x1*t – y1t) + (pt) (1 – x1*t) – Bt (y1t) = Pt (1 – y1t)
Pt x1*t – Pt y1t + Bt x1*t – Bt y1t + pt – pt x1*t – Bt y1t = Pt – Pt y1t
Bt x1*t – 2 Bt y1t = 0
x1*t = 2 y1t
EV bet strong bet thin = Pt (1 – x1*t) + (Pt + Bt) (x1*t – x1*r) + (Pt + Bt + Br) (x1*r – y1r) – (Bt + Br) y1r
EV bet strong check = Pt (1 – x1*t) + (Pt + Bt) (x1*t – y1r) – Bt y1r
Pt (1 – x1*t) + (Pt + Bt) (x1*t – x1*r) + (Pt + Bt + Br) (x1*r – y1r) – (Bt + Br) y1r = Pt (1 – x1*t) + (Pt + Bt) (x1*t – y1r) – Bt y1r
(Pt + Bt + Br) (x1*r – y1r) – (Bt + Br) y1r = (Pt + Bt) (x1*r – y1r) – Bt y1r
Br (x1*r – y1r) – (Bt + Br) y1r = – Bt y1r
Br (x1*r – y1r) – Br y1r = 0
Br x1*r – Br y1r – Br y1r = 0
Br x1*r = 2 Br y1r
x1*r = 2 y1r
EV bet bluff strong check = Pt (1- x1*t) – Bt (x1*t)
EV check check = pt (1 – y0t)
Pt (1- x1*t) – Bt (x1*t) = pt (1 – y0t)
Pt - Pt x1*t – Bt x1*t = Pt – Pt y0t
(Pt + Bt) x1*t = Pt y0t
x1*t = y0t Pt / (Pt + Bt)
EV bet bluff thin bet bluff = (Pt + Bt) (x1*t – x1*r) + Pt (1 – x1*t) – (Br + Bt) (x1*r)
EV bet bluff thin check = pt (1 – x1*t) – Bt (x1*t)
(Pt + Bt) (x1*t – x1*r) + Pt (1 – x1*t) – (Br + Bt) (x1*r) = pt (1 – x1*t) – Bt (x1*t)
(Pt + Bt) (x1*t – x1*r) – (Br + Bt) (x1*r) = – Bt (x1*t)
Pt x1*t – Pt x1*r + Bt x1*t – Bt x1*r – Br x1*r + Bt x1*r = – Bt x1*t
(Pt + 2 Bt) x1*t = (Pt + Br) x1*r
x1*r = x1*t (Pt + 2 Bt) / (Pt + Br)
x1*r = x1*t (Pr) / (Pt + Br)
EV call thin fold = (Pt + Bt) (y0r – y0t) – Bt (1 – y0r) – Bt (y1t)
EV fold = 0
(Pt + Bt) (y0r – y0t) – Bt (1 – y0r) – Bt (y1t)= 0
Pt y0r- Pt y0t + Bt y0r – Bt y0t – Bt + Bt y0r – Bt y1t = 0
(Pt + 2 Bt) y0r - Pt y0t – Bt y0t – Bt – Bt y1t = 0
(Pt + 2 Bt) y0r - (Pt + Bt) y0t - Bt - Bt y1t = 0
(Pt + 2 Bt) y0r - Bt - Bt y1t = (Pt + Bt) y0t
y0r (Pt + 2 Bt) / (Pt + Bt) - Bt / (Pt + Bt) - y1t Bt / (Pt + Bt) = y0t
y0r (Pt + 2 Bt) / (Pt + Bt) - Bt / (Pt + Bt) - y1t Bt / (Pt + Bt) = y0t
1 – (1 - y0r) Bt / (Bt + Pt) – y1t Bt / (Bt + Pt) – y0r = y0t
EV call strong call = (Pt + Bt) (y1*t – x1*r) + (Pt + Bt) (y0r – y0t) + (Pt + Bt + Br) (1 – y0r) – (Bt + Br) (y1r) – Bt (x1*r – y1r)
EV call fold = (Pt + Bt) (y1*t – x1*r) + (Pt + Bt) (y0r – y0t) - Bt (1 – y0r) – Bt x1*r
x1*t = 2 y1t x1*r = 2 y1r x1*t = y0t (1 – αt) x1*r = x1*t (1 – αr) y0t =1 – y0r αt – y1t αt – (1 - y0r) y0r = 1 - y1r αr
y1t = 50 / 243 Y1r = 20 / 243 Y0t = 200 / 243 Y0r = 77 / 81 X1*t = 100 / 243 X1*r = 40 / 243