La théorie des jeux appliquée au poker (initiation)

La théorie des jeux appliquée au poker (initiation)

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

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) x0 = 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)

On peut donc voir qu’il y’a un changement de stratégie entre le jeu river, et le jeu turn. En effet à la river IP bet bluff B / (B + P) multiplié par c’est value bet, et à la turn il bet bluff B / (B + P) multiplié par (c’est value bet turn + c’est 2 barrel bluff) + c’est bluff qu’il 2 barrel.

 

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.

 

  1. 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.

     
  2. Que ce passe t’il si OOP essaye de rendre non profitable le bet avec ces mains. Comment IP pourrait exploiter ça ?

     
  3. 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

 

 

 

 

 

 

 

 

(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

 

 

 

 

 

 

 

(Pt + Bt + Br) (1 – y0r) – (Bt + Br) (y1r) – Bt (x1*r – y1r) = - Bt (1 – y0r) – Bt x1*r

 

 

 

 

 

 

 

(Pt + 2 Bt + Br) (1 – y0r) – (Bt + Br) (y1r) – Bt (x1*r – y1r) = – Bt x1*r

 

 

 

 

 

 

 

(Pt + 2 Bt + Br) (1 – y0r) – (Bt + Br) (y1r) + Bt y1r= 0 (Pr + Br) (1 – y0r) – ( 2 Bt + Br) (y1r) = 0

 

 

 

 

 

 

 

( 2 Bt + Br) (y1r) = (Pr + Br) (1 – y0r)

 

 

 

 

 

 

 

( 2 Bt + Br) (y1r) / (Pr + Br) = (1 – y0r)

 

 

 

 

 

 

 

(Pt + 2 Bt + Br) (1 – y0r) – (Bt + Br) (y1r) + Bt y1r = 0

 

 

 

 

 

 

 

(Bt + Br) (y1r) - Bt y1r = (Pr + Br) (1 – y0r)

 

 

 

 

 

 

 

y1r Br / (Pr + Br) = 1 – y0r

 

 

 

 

 

 

 

y0r = 1 - y1r Br / (Pr + Br)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

αt = Bt + (Bt + Pt)

 

 

 

 

 

 

 

αr = Br + (Br + Pr)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Calcul de l’exemple de la partie 3

 

 

 

 

 

 

 

Rappel : αt = Bt + (Bt + Pt) et αr = Br + (Br + Pr)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1 – x1t* (1 – 0.6) / 2 * 0.6) (1 + 2) / (1 + 1) - 1 / (1 + 1) - (x1t* / 2) * 1 / (1+ 1) = x1t* / 0.5

 

 

 

 

 

 

 

(1 – x1t* (1 – 0.6) / 2 * 0.6) (3) / (2) - 0.5 - (x1t* / 2) * 0.5 = 2 x1t*

 

 

 

 

 

 

 

X1*t = 100 / 243 

 

 

 

 

 

 

 

100 / 243= 2 y1t >> y1t = 50 / 243

 

 

 

 

 

 

 

x1*r = 2 y1r >> y1r = 20 / 243

 

 

 

 

 

 

 

100 / 243= y0t (1 – αt) >> y0t = 200 / 243

 

 

 

 

 

 

 

x1*r = 100 / 243 (1 – αr) >> x1*r = 40 / 243

 

 

 

 

 

 

 

y0t =1 – (1- y0r) αt – y1t αt – (1 - y0r)

 

 

 

 

 

 

 

y0r = 1 - y1r αr >> y0r = 77 / 81 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

On a donc :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • y1t = 50 / 243
  • Y1r = 20 / 243
  • Y0t = 200 / 243
  • Y0r = 77 / 81
  • X1*t = 100 / 243
  • X1*r = 40 / 243

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 PA  0 316   9 Commentaires