Jeu (0.1) Solveur?

il est correct le croquis ?

BB = bet/bet
BX = bet/check
CC= call/call
CF= call/fold
etc…

1 « J'aime »

Oui il est correcte, après le seuil y0r, n’existe pas vraiment, c’est juste une fréquence du domaine y0t, comme je l’ai expliquer au dessue.

1 « J'aime »

tu peux pas juste faire une range 33-JJ vs AA & 22 ou un truc du genre plus simple?

1 « J'aime »

Pour les range j’ai mis :

OOP : AcAh,KcKh,QcQh,JcJh,TcTh,9c9h,8c8h,7c7h,6c6h,5c5h,Kh4c,Qh4c,Jh4c,Th4c,9h4c,8h4c,7h4c,6h4c,5h4c,4c4h

IP : AsAd,KsKd,QsQd,JsJd,TsTd,9s9d,8s8d,7s7d,6s6d,5s5d,Kd4s,Qd4s,Jd4s,Td4s,9d4s,8d4s,7d4s,6d4s,5d4s,4s4d

L’effet blocker est éliminé, ça sera les cartes river qui vont blocker les range, par exemple si 8s tombe IP à plus 8s8d, alors que OOP à 8c8h.

Le board :

image

Les range sont symétrique.

et la mains dominé à peut d’out pour outdraw.

Mais il y’a beaucoup de trou dans l’Equity :

Le jeu 0,1 si j’ai bien compris c’est un peu comme du kuhn poker?

Si c’est le cas j’ai déjà codé un truc en java qui converge vers l’équilibre de nash pour ce jeu, je devrais pouvoir l’adapter facilement, tu peux me contacter si je comprend bien ce que tu veux, ça devrais pas être compliqué. (ça serais en invite de commande pour simuler une strat car j’ai pas le temps de faire une interface graphique pour le moment).

1 « J'aime »

Je ne connaissais pas le kuhn poker, mais ça na pas l’aire d’être ça.

Le jeu 0.1 est un jeu très simple, chaque joueur se voie distribuer une main entre 0 et 1, et la plus petite main est plus forte que la plus grande, par exemple la main au points 0.412 et plus fort que la main au points 0.4156.

On peut aussi donner une Equity aux mains dominées, par exemple la main dominée perd 1/10, et gagne 9/10.

On peut aussi enlever une partie des mains au joueur, par exemple enlever les mains de 0 à 0.1 à OOP …

J’ai déjà résolu la plupart des jeu 0.1 sur une street, et des model simplifier 2 street, mais quand on complexifie l’arbre sur 2 street les équations devienne trop complexe à résoudre, et le paramétrage du jeu et pas forcement évident à trouver.

Ah d’accord, du coup si tu prends tous les réels entre 0 et 1, l’arbre de décision est infini donc mon algo ne fonctionnera pas. Intéressant en tout cas, j’ai pas encore pris le temps de lire tes articles mais c’est dans ma todo list :slight_smile:

Le kuhn poker c’est pas comme le jeu AKQ ?
je l’avais résolue sur 3 street, et je me souviens il y’avais pleins de strat co-optimal.

Je ne connais pas le AKQ, je suis en train de regarder une vidéo dessus, à prioris ça à l’air d’être la même chose que le kuhn poker. 3 cartes privatives, un tour d’enchère, la carte la plus haute gagne à l’abattage.

Pour étudier la théorie des jeux, il y a aussi une version un peu plus compliquée que le kuhn poker qui se joue sur 2 streets qui est pas mal. Leduc poker, deck de 6 cartes JJQQKK, chaque joueur reçoit une carte privative, il y a un premier tour d’enchères, ensuite une carte communautaire est posée sur la table, un deuxième tour d’enchère, celui qui a une paire gagne, sinon celui qui à la carte la plus haute gagne.

1 « J'aime »

Déjà sur une street il y a une infinité de stratégies optimales liée à un paramètre Alpha compris entre [0, 1/3]. Quand le joueur 1 a un valet, il peut choisir librement de bet aplha% du temps et check le reste, si il a un roi il doit bet 3*alpha% du temps et check le reste etc. Peu importe le alpha choisis, l’ev du joueur 1 sera toujours de -1/18.

1 « J'aime »

très intéressant le Alpha compris entre [0, 1/3]

on peut définir l’équation 1 : freq bet J = 1 / (2 + 1) freq K

le joueur 1 va bet alpha qui appartient à un ensemble de 0, à 1/3 de ses J, alors K doit Bet selon l’équation 1 : freq K = alpha * 3

Si OOP check, il c’est séparer de 3 alpha K, il doit call 2/3 de sa range de check qui batte un J pour rendre les J de IP indifférent, soit 2 / (1 + 2) , du coup call alpha + 1/3 des Q + les K qu’il à check

par exemple alpha = 0.1
OOP bet 0.3 K
après un check il à 0.7 + 1 combo pour ce défendre, et il doit call 2/3 de 1.7 soit 0.7 K + 0.33 + 0.1 des Q, total défense = 1.13, soit 2/3 des hand qui batte un J

Tu à déjà essayer d’autoriser les raise dans ce jeu ?, ca montre un concept que je trouve intéressant pour la théorie river, OOP va se mettre à bet des Q.

Pour l’EV du jeu j’ai :
l’EV du jeu :
Comme la strat de check = strat de bet pour tout nombre comprit entre 0, et 1/3, alors on peut partir de l’hypothèse que OOP check 100 % pour réduire l’arbre de calcule,

EV des K = 2 + 1 * P bet une Q - 1, soit 0.33 / 2 * 2 - 1= 1/6 + 1 = 1.16
EV des J = - 1
EV des Q = 2 * proba que IP check - 1, soit 0.66 / 2 * 2 - 1 = 2/3 - 1

EV total = EV K * P K + EV Q * P Q + EV J * P J = (7/6) * 1/3 - 1/3 * 1/3 - 1 * 1/3 = -0.055 soit - 1/18 comme tu l’à dit.

1 « J'aime »

C’est exactement ça, je viens de lancer 2 simulations avec mon solveur de kuhn poker sur 100M iterations (ça devrais donner une bonne estimation de l’équilibre de nash).

Simulation 1: on voit que l’ev de oop est de environ -0.055 ce qui correspond bien aux -1/18 attendu par la théorie.
1 représente J, 2 représente Q et 3 représente K, à coté du chiffre tu as l’historique du coup, p= pass et b=bet. La première colonne de la matrice représente la fréquence de check (ou pass) et la deuxième la fréquence de bet.
Justement ça tombe bien, on voit que dans cette simulation, (ligne 1(1:), colonne 2) oop décide de bet (donc prendre un alpha d’environ 0,10) si il a un J, donc je peux comparer l’output de mon programme avec tes calculs voir si je ne me suis pas planté.

Quand on a un K on doit bet à une proba de 3*alpha (ligne 9 (3:), colonne 2) environ 0.33 fréquence de bet avec K donc ça colle aussi.

On voit aussi ligne 2pb: colonne 2 que quand il check avec ses QQ et que IP bet il défend bien alpha+1/3. Donc content le programme à l’air de donner une bonne estimation ^^.

kuhnsim1

Simulation 2 pour le fun avec un alpha différent:
kuhnsim2

Oui j’ai fais pleins de simulations différentes en rajoutant des betting rounds, des raises,… J’ai fais pareil avec le leduc poker qui est plus compliqué, j’ai bricolé aussi sur le royal holdem mais maintenant je m’attaque au gros morceaux, le NLHE ou je vais devoir solve une abstraction du jeu et faire des compromis car même avec des clusters à disposition, ça suffis pas pour solve assez rapidement un arbre de décision de 10^161 information set lol

Tu peut essayer de réduire le nombre de turn et river, pour les calcule.

sinn tu peut appliquer les principe de l’isomorphisme pour réduire le nombre de combo à calcule, pareille pour les turn et river, et ca ne changerai rien à la strat GTO.

Yep c’est en cours d’implémentation mais je vais devoir trouver pleins d’astuces supplémentaires car même ça, ça sera loin d’être suffisant. Je n’ai malheureusement pas des milliers d’années de temps CPU à disposition, ni le budget pour faire les calculs nécessaires (ceux qui ont fait l’IA libratus pour le no limit heads up ont utilisé 25 millions d’heures CPU pour les calculs).

GL ta du pain sur la planche

1 « J'aime »

Pour le jeu kuhn poker, c’est assez simple à comprendre image , car si alpha > à 33, il lui faudrait un nombre de K > à 1 à bet pour inciter les Q de IP à fold
du coup les J miss de l’EV, et il ne rend pas suffisamment d’EV au K pour compenser.

dans la ligne ou les K bet il vont récupérer 0.67 / 2 d’EV des Q, soit 1/3. si il check il vont récupérer l’EV des bluff des J, soit 1/3 / 1
donc les K sont indifférent entre c’est 2 ligne.

et pour les J quelle que soit la ligne il auront une EV de 0, quand il bet il vont gagner 2 * 1/3, et il vont perde 1 * 2/3, et si il check, il vont jamais gagner au showdown, et toujours fold.

de même si on mets une ante de 0.5 unité a la place de 1, alors l’équilibre de nash s’effondre

sinn si je solve le jeu mathématiquement, en donnant l’option au deux joueur le chois de fair n’importe quelle action, avec n’importe quelle sizing

j’ai OOP bet 38.8 % avec un sizing d’environ 0.25 % des K, il bet 15.6 % des Q (meme size), et bet 7.81 % de J

apres un check IP va bet un size d’environ 0.54 avec 100 % des K, et 35.16 % des J.

Est ce que ton algo trouve ca ?