Jeu (0.1) Solveur?

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 ?

Je peux pas donner à mon algo la possibilité de choisir parmi n’importe quel sizings car l’arbre de décision serait infini, je dois comme dans un solveur lui définir des sizings sur lesquels il pourra travailler.

Je viens de relire notre discussion d’hier à tête reposée, je n’ai pas compris comment tu calculais l’ev.

Pour EV des J = -1 c’est évident mais prenons l’exemple de l’EV des K.

Dans ta formule tu as EV des K = 2+1 * P bet une Q - 1, comment tu trouves ça? P bet une Q devrait être égale à 0 non? Car si vilain bet une Q et qu’on a un J on fold 100% et si on a un K on call 100%.

Par contre vilain va bet en fréquence ses J en bluff. Comme on bet 1/2 vilain doit avoir une fréquence de bet bluff de 1/4. Comme il va bet uniquement ses J et K avec une fréquence de 100% de bet pour ses K, il doit bet 1/3 de ses J pour avoir 1/4 de bluffs dans sa range de bet. Du coup comme on a nous même le K et que vilain ne bet pas les Q, il va bet à une fréquence de 1/6 et check 5/6.

Perso j’avais calculé de cette façon EV des K = 1 * pCheck + 2 * pBet = 1 * 5/6 + 2 * 1/6 = 7/6 = 1.16666…

1 « J'aime »

Pour l’EV des K dans la ligne bet, on aura pour EV :

– 1 (notre ante initiale) + 2 (le pot (on à 100 % d’équiter), et la Probabilité de se faire call par une Q.

La probabilité qu’une Q call est ((2 / (1 + 2) * 2 – 1) / 2

Le 2 / (1+2) peut être trouvé par des équation d’indifférence, c’est la fréquence de call GTO du jeu, car si ‘il call moins on peut l’exploiter en bluffant tout nos J, et s’il call plus on arrête de bluff, et on gagne de l’EV. Le fois 2 c’est la range qu’il doit défendre soit c’est K + Q = 2, et on retire 1 ce qui correspond au K, ainsi il nous reste 1/3 Q, il à deux combo dans sa range (on block les K, donc il call 1/6

Oui je me suis emmêlé les pinceau avec le jeu AKQ, dans le jeu AKQ la Q = J.

pour la ligne check on à - 1 + 2 + P bet un J, soit 1/3 et on divise par 2, car il à 2 combo donc 1/6, il va bet 1 / (2 + 1) des J

1 « J'aime »

j’ai oublier de redivisé par 2, mais j’ai le meme résultat que toi si je redivise par 2, soit 7/6.
EDIT c’est bon j’ai corrigé

J’ai essayer de regarder sur internet vite fait, j’ai rien trouvé sur le duc poker

du coup si je comprend bien chaque joueur à une chance équiprobable de ce voir réservoir un J, Q, et un K.

Il y’a un tours d’enchère preflope,

Pour les K on à ;
évènement A : K qui hit paire est gagne vs Q et J, donc 100 % * 1/3
évènement B : K qui miss, un J tombe, il perd vs J, mais gagne contre Q, donc 1/2 * 0 + 1/2 * 1 = 1/2
évènement C : K qui miss, Q qui tombe, il perd vs Q, et gagne vs J, donc 1/2 * 0 + 1/2 * 1 = 1/2

Total equity = P(A) * EQhA + P (B) * EQhB + P (C) * EQhC, soit 1/3 + 1/6 + 1/6 = 2/3

Pour la Q
Q qui hit pair , 100 % d’équity, donc 1/3
Q qui miss, un J tombe, il perd vs J, et vs K, donc 0
Q qui miss, K tombe, il perd vs K, et gagne vs J, donc 1/2

Total equity = P(A) * EQhA + P (B) * EQhB + P (C) * EQhC, soit 1/3 + 0 + 1/6 = 1/2

pour le J
J hit , 100 % d’équity
J miss, K qui tombe, 0 %
J miss, Q qui tombe, 0 %

Total equity = P(A) * EQhA + P (B) * EQhB + P (C) * EQhC, soit 1/3 + 0 + 0 = 1/3

Range equity = 1/3 * 2/3 + 1/3 * 1/2 + 1/3 * 1/3 = 50 (logique les joueur on la même range.)

ensuite le flop tombe soit un K, Q , ou un J tous on une proba équivalente de tomber.

un autre tour d’enchère à lieu.
ensuite le jeu s’arête, on un paire > full no mad hand, et no ma hand la plus haute > no mad hand la plus base.

Est- ce que j’ai bien comprit les règle du jeu ?

Est- ce que les mise sont limté à une unité à chaque street, on à un % du pot, peut ont raise ?

1 « J'aime »

@Xenoeus tu dois kiffé grave là :rofl: :innocent: :stuck_out_tongue:

Tu es dans ton élément ^^

1 « J'aime »

Le jeu Leduc Hold’em a été introduit pour la première fois dans ce papier: https://arxiv.org/ftp/arxiv/papers/1207/1207.1411.pdf

Deck de 6 cartes KKQQJJ, le deck est mélangé et chaque joueur reçoit une carte au hasard avec la même probabilité. Au départ, chaque joueur place une ante dans le pot.

Dans la version classique les sizings sont fixé à 2 pour le premier tour et 4 pour le second tour. Maximum un raise (pas de reraise). Après il existe aussi les variantes du leduc hold’em en no limit.

Premier tour d’enchère

Les joueurs peuvent check ou bet 2. Si il y a double check, une carte communautaire est mise sur la table. Si un joueur bet 2, l’autre joueur peut call ou raise de 2. Si un joueur raise, on ne peut pas reraise, juste call ou fold.

Second tour d’enchère:

La même chose sauf que le bet et raise sizing est fixé à 4.

Leduc Hold’em is a two player poker game. The deck used in Leduc Hold’em contains six cards, two jacks, two queens and two kings, and is shuffled prior to playing a hand. At the beginning of a hand, each player pays a one chip ante to the pot and receives one private card. A round of betting then takes place starting with player one. After the round of betting, a single public card is revealed from the deck, which both players use to construct their hand. This card is called the flop. Another round of betting occurs after the flop, again starting with player one, and then a showdown takes place. At a showdown, if either player has paired their private card with the public card they win all the chips in the pot. In the event neither player pairs, the player with the higher card is declared the winner. The players split the money in the pot if they have the same private card.

Each betting round follows the same format. The first player to act has the option to check or bet. When betting the player adds chips into the pot and action moves to the other player. When a player faces a bet, they have the option to fold, call or raise. When folding, a player forfeits the hand and all the money in the pot is awarded to the opposing player. When calling, a player places enough chips into the pot to match the bet faced and the betting round is concluded. When raising, the player must put more chips into the pot than the current bet faced and action moves to the opposing player. If the first player checks initially, the second player may check to conclude the betting round or bet. In Leduc Hold’em there is a limit of one bet and one raise per round. The bets and raises are of a fixed size. This size is two chips in the first betting round and four chips in the second.

Oui c’est pas mal :nerd_face:

1 « J'aime »