ICM & calculs equilibre de Nash

Hello,

J’aime beaucoup le cote mathématique du poker et je m’interesse actuellement a l’equilibre de Nash dans des situations de push fold (fin de tournoi, SnG, DoN).

Je pense que beaucoup d’entre vous connaissent le site holdemresources :

http://www.holdemresources.net/h/web-calculators/nashicm/results.html?action=calculate&bb=100&sb=50&ante=0&structure=0.5%2C0.5&s1=1000&s2=1000&s3=1000&s4=1000&s5=&s6=&s7=&s8=&s9=&s10=

Je suis en train d’essayer de comprendre comment tout cela fonctionne (j’essaye de calculer moi meme ces ranges).

Pour calculer l’equilibre SB vs. BB c’est assez simple et j’obtient des resultats tres similaires à ceux de holdemresources.
Les petites differences dans mes résultats viennent, je pense, du fait que j’utilise un unique ranking de main (chubukov handranking) aussi bien pour le push que pour le call.
Peut etre que holdemresources utilise un handranking different, et peut etre aussi un handranking specifique push et un specifique call pour maximiser l’equite de la range de call.

Bref, la n’est pas mon probleme car mes resultats sont corrects et suffisamment proches.

Par contre quand je commence a faire des calculs sur l’equilibre BTN/SB/BB, ca devient tout de suite beaucoup plus complexe car l’EV de BTN est beaucoup plus complexe a calculer :

EV_BTN = EV_fold + EV_shove (ponderes par les proba de chacune evidemment)
sachant que :
EV_fold = EV_tout_le monde_fold + EV_SB_shove_BB_fold + EV_shove_BB_call_SB_gagne + EV_shove_BB_call_SB_perd
et
EV_shove = EV_shove_tlm_fold + EV_shove_SB_call_BTN_gagne + EV_shove_BB_call_BTN_gagne + …

D’une part la formule est plus complexe, mais en plus on prends en compte des ranges differentes (celle de call de SB et celle de call de BB).

Donc je calcule l’EV de chaque range possible (enfin en reduisant a 169 ranges possibles) et je détermine la range qui maximise cette EV.

Et la je trouve des résultats assez different de holdemresources et ca m’embete pas mal car je vois pas d’ou ces differences peuvent venir…

Par exemple, si je prends la config suivante :

Stacks : 1500/500/500/1500
Blinds : 100/200

Je trouve les resultats suivants pour l’equilibre de Nash :
SB shove 64.5%, BB call 89%
BTN shove 16.5%, SB call 16.8%, BB call 74.5%

Alors que holdemresources me donne :
SB shove 66.2%, BB call 92.8%
BTN shove 26.1%, SB call 19.3%, BB call 90.0%

Ca fait une enorme difference pour les stats du BTN pour maximiser l’EV.

Il est vrai que je ne prends pas en compte le fait que BB peut “overcall” lorsque SB décide de call, mais dans la plupart des situations cet overcall est tres limité (KK+) car l’EV qu’on gagne à laisser les joueurs s’entretuer est enorme.
En plus le fait qu’un second joueur puisse overcall devrait nous faire shove plus tight que sans cette hypothese.
Et mes résultats sont deja bcp trop tight.

Si qqn s’est deja amusé a faire ce genre de calculs, ou a une quelconque idee sur une cause possible pour les diff entre mes resultats et ceux de holdemresources, ca m’interesse.

Peux tu préciser ce que tu entends par “je calcule l ev de tous les ranges posdibles”?
Il s’agit de l’ev du bouton ou des 3 joueurs?
Comment procèdes tu?
S’agit il d’une équité en jeton ou corrigée par un facteur icm?

Pour clarifier, je calcule l’EV en prenant en compte l’ICM sinon cela n’a que tres peu d’interet (dans mon exemple c’est un DoN 4 joueurs, donc payout 0.5;0.5;0;0).

En ce qui concerne le calcul je fais comme suit (je simplifie un peu les détails) :

  1. Je fixe une range de push a 100% pour BTN pour commencer
  2. Je calcule le range de call de SB optimal face a cette range de shove en supposant que BB n’overcall jamais
  3. Je calcule le range de call optimal de BB en supposant que SB a foldé
  4. Grace a ces 2 ranges de call je calcule la range qui a l’EV maximale face a celles ci :
    4.1. Je prends une range de 1% et je calcule EV_fold * 99% + EV_shove * 1%
    4.2. Je prends une range de 2% et je calcule EV_fold * 98% + EV_shove * 2%

    4.100. Je prends une range de 100% et je calcule EV_fold * 0% + EV_shove * 100%
    (comme je connais les ranges de call actuelles de SB et BB, l’EV est “simple” a calculer)
  5. Je trouve le max des valeurs calculées ci dessus et je defini cette nouvelle range de shove en tant que shove de BTN
  6. Je boucle en 2.

Je fais ca jusqu’a ce que les ranges se stabilisent suffisamment pour que le resultat soit correct.

Tu fais 3 avant 2 en fait non? parce que 3 te permet de calculer l’ev de la SB quand elle fold.
Ton algo est pas idiot a priori mais est-ce que tu sais démontrer qu’il converge vraiment vers la range optimum? Ca me parait pas tout à fait évident.

Sinon je sens que je dis peut être une connerie mais pourquoi tu ne fais pas simplement pour X de 0 à 100:

  1. Je fixe une range de push a X% pour BTN pour commencer
  2. Je calcule le range de call optimal de BB en supposant que SB a foldé
  3. Je calcule le range de call de SB optimal face a cette range de shove en supposant que BB n’overcall jamais
  4. Je calcule EV_fold * (100-X)% + EV_shove * X%

Et je prends le X qui donne le max d’ev.

Effectivement je fais surement 3 avant 2 (j’ai ecrit le post de tete sans faire trop gaffe).

Pour la convergence de l’algo je ne sais pas le prouver mathematiquement, mais en pratique ca marche.

En ce qui concerne ton algo, il me parait aussi correct et devrait, pour moi, donner les memes resultats.

Oui je suis d’accord que ca converge vers l’optimum en fait après nouvelle réflexion.
A mon avis il doit juste y avoir un petit bug dans ton programme.

As tu essayé de calculer l’EV du range que tu obtiens et de celle donnée par Propokertools pour comparer?

En fait pour calculer les equites j’utilise une lib toute faite, celle de PokerSleuth (une sorte de PokerStove).
Donc je suppose que le soucis n’est pas la, car les résultats de la lib ont l’air OK.

[quote=“nik000, post:519066”]En fait pour calculer les equites j’utilise une lib toute faite, celle de PokerSleuth (une sorte de PokerStove).
Donc je suppose que le soucis n’est pas la, car les résultats de la lib ont l’air OK.[/quote]

Ce que je voulais dire c’est que si en calculant l’ev de ton range et l’ev du range de holdemressource tu vois que la range de holdem resource a une meilleur ev alors ca prouvera qu’il y a un problème avec ton programme.
Dans le cas contraire ca ne prouvera rien par contre…

EDIT: En fait je crois que ça ne sert à rien de faire ça finalement…

j’ai trouve 2 problemes dans mes calculs qui engendraient cette grosse difference avec le site holdemresources :

  1. lors d’un des calculs des equites de shove, j’oubliais de retirer la SB à SB lors d’un fold.
  2. lors du calcul de l’EV de BTN je calculais :
    pct_shove * EQ_win_vs_SB * pct_call_SB * (1-pct_call_BB)
    alors que je pars du principe que BB peut pas overcall donc il ne faut pas multiplier par (1-pct_call_BB)

Maintenant mes résultats sont assez proches du Nash présenté par holdemresources, je suis plutot content.
Les qqs différences restantes sont a priori dues au fait d’empecher l’overcall dans mes scénarii et aussi au handranking que j’ai choisi qui etre peut etre legerement différent de celui/ceux choisi par holdemresources.

:woohoo:

Bien joué :slight_smile:

Tu as programmé dans quel langage?

En C/C++

Deterrage en règle mais je suis intéressé par ton travail, en as-tu fais une librairie ou un soft exploitable ?

Notre @nik000 est peut être à la retraite depuis tout ce temps :wink:

Nice detterage p

1 J'aime

vous me faites sortir de ma retraite, ca fait longtemps que je suis pas passé ici :slight_smile:

@Shamamane je ne sais plus trop ou j’ai mis ce bout de code, honnetement c’était pas grand chose à faire, si tu developpes un peu tu pourras en faire autant.
Si tu dev pas, c’est le genre de calcul et résultats qui sont deja presents dans plein de softs je pense.

1 J'aime

Il faudrait faire l’award du plus beau déterrage en fin de mois… Celui-ci vaut son pesant d’or… :grin:

1 J'aime