- Ce sujet contient 12 réponses, 4 participants et a été mis à jour pour la dernière fois par dibeuv, le il y a 5 années et 8 mois.
-
AuteurMessages
-
Bonjour à tous,
Je me suis lancé comme objectif pour 2019 de faire un programme pour extraire facilement les fuites dans mon jeu. Je suis débutant avec quelques bases dans la programmation en langage python et pour le poker je suis +/- breakeven en NL10…
On peut déjà faire ce travail avec un tracker mais je trouve qu’il y a tellement de données et facteurs à analyser que je ne sais pas si je m’y prend bien et/ou si je ne passe pas à côté de quelque chose.
J’ai vu un autre intérêt : vu que l’on ne peut pas prendre en compte le winrate sur de faibles échantillons (trop impacté par la variance), j’ai pensé à calculer des coefficients de corrélations pour estimer si la fuite est récurrente ou non..
Vu que je fais peu de volume, cela me permettrait également de travailler sur des échantillons de mains plus petits.
Pour la méthode, j’utilise Holdem Manager 1 pour extraire les données des différentes mains à étudier : il ressort un fichier csv avec toutes les mains et les conditions : position, cartes, gain…
Cela m’a évité de passer du temps à faire un programme pour obtenir le même résultat mais certaines informations ne seront pas disponibles (par exemple si IP ou OOP).
J’ai commencé par réaliser des petites fonctions pour effectuer certaines tâches, que je vais détailler dans les prochaines messages…
Je ne promets pas de passer beaucoup de temps mais si cela intéresse certains, on peut avancer ensemble pour que tout le monde puisse en profiter…
L’idée à terme est de pouvoir analyser un maximum de données et de faire ressortir les fuites les plus importantes pour travailler des situations précises.
Pour ceux qui ont encore HM1, mes codes sont utilisables sans connaissance en programmation, il suffit d’installer le logiciel Anaconda (https://www.anaconda.com/download/) et de copier/coller les codes. Je ne pensais pas les mettre dans ce blog car un peu barbare pour ceux qui n’y connaissent rien en programmation… mais aucun problème pour les donner si besoin.Les possibilités sont quasiment infinies, je compte sur votre imagination pour proposer des choses également…
Voici les différents rapports déjà réalisés :
- Rapport des gains par position
- Rapport des gains en fonction de l’action qu’il y a eu avant d’avoir la parole
- Rapport des gains en fonction de l’action préflop
- Rapport des gains en fonction du type de mains
- Cibler les situations les plus perdantes
- Ce sujet a été modifié le il y a 5 années et 8 mois par Mike_modano.
Pour le rapport par position, j’ai intégré dans un sous programme (fonction python) plusieurs actions :
- Regrouper les mains par positions
- Calculer les gains en EVbbs par position
- Calculer le winrate en EVbb/100 par position
- Comparer avec le winrate attendu (winrate attendu – winrate réel) par position
- Calculer la différence en EVbbs par rapport au gain attendu par position
- Trier le tableau par ordre croissant de la différence de gain par rapport au gain attendu par position
Cela permet de voir quelle est la position pour laquelle je perds le plus d’EV…
Voici ce que cela peut donner pour mes 50 000 dernières mains :
Position EVbbs_sum EVbbs_count EVbb100 bb100_diff EVgain_diff BB
-4563.3 9500 -48.0 -28.0 -2663.3
CO 1142.9 9102 12.6 -12.4 -1132.6
MD 939.4 7850 12.0 -12.0 -944.6
EA 1092.2 4476 24.4 2.4 107.5
SB
-1326.7 9586 -13.8 1.2 111.2
BTN 3434.7 9486 36.2 1.2 114.6
Ce code fait 13 lignes et cela prend moins d’une seconde pour extraire le tableau pour un fichier de 50 kH .
Voici le code pour vous donner une idée :
import pandas as pd
hh2=pd.read_csv(‘hh2.csv’,sep=’,’, encoding=’utf-8′)
position_winrate=pd.read_csv(‘position_winrate.csv’,sep=’,’,dtype={‘Winrate’:float}, encoding=’utf-8′)
def Position_Report():
tab = hh2.groupby([‘Position’])[[‘EVbbs’]].agg([‘sum’,’count’])
tab.columns = [‘_’.join(x) for x in tab.columns.values]
tab[‘EVbb100’] = round((tab[‘EVbbs_sum’]/tab[‘EVbbs_count’])*100,1)
tab = tab.reset_index()
for row in tab.itertuples():
tab.loc[row.Index,’bb100_diff’] = row.EVbb100 – EV_Winrate(row.Position)
tab.loc[row.Index,’EVgain_diff’] = round(row.EVbbs_sum -row.EVbbs_count*(EV_Winrate(row.Position)/100),1)
tab = tab.sort_values(by = ‘EVgain_diff’)
return print(tab, ‘\n\n’)
Salut !
J’y connais rien en programmation et en code mais ça a l’air vraiment pas mal et assez complet.
Tu pourrais peut être ajouter (je sais pas si c’est possible) une ligne qui nous dit contre quelle position on perd le plus de jetons
En tout cas à suivre de près !
Tu pourrais peut être ajouter (je sais pas si c’est possible) une ligne qui nous dit contre quelle position on perd le plus de jetons
En fait, je n’ai pas présenté les différentes colonnes mais EVbbs_sum représente le winrate en bb pour la position, je ne sais pas si c’est que tu appelles le nombre de jetons?
EVbbs_count est le nombre de mains, EVbb100 le winrate en bb/100, bb100_diff la différence entre le winrate souhaité et le winrate réel et enfin EVgain_diff ce que représente cette différence en bb vu que le nombre de mains joué est différent en fonction de la position…
Pour les winrates souhaité par position, j’ai pris les valeurs suivantes :
SB : -15.0 bb/100
BB : -20.0 bb/100
EA : 22.0 bb/100
MD : 24.0 bb/100
CO : 25.0 bb/100
BTN : 35.0 bb/100Cela fait un winrate de 10 bb/100 avec mon style de jeu..
2- Rapport des gains en fonction de l’action qu’il y a eu avant d’avoir la parole
Ce rapport est encore plus simple : je supprime toutes les mains que l’on a fold puis je regroupe les mains en fonction de l’action qu’il y a eu avant que l’on ait la parole.
Et de la même manière, je compte le winrate en EVbbs, le nombre de mains et le winrate en bb/100.
Je fais un tri du plus petit winrate en bb/100 au plus grand.
Ce qui donne pour mes dernières 50000 mains :Facing_Preflop EVbbs_sum EVbbs_count EVbb100 Raiser + Caller(s) -311.1 1086 -28.6 2+ Raisers 83.5 101 82.7 2+ Limpers 228.9 700 32.7 1 Raiser 473.4 4007 11.8 1 Limper 1914.8 2221 86.2 Unopened 4454.2 8915 50.0
3-Rapport des gains en fonction de l’action préflop
Ce rapport est également simple et rapide à exécuter : je supprime toutes les mains que l’on a fold puis je regroupe les mains en fonction de l’action réalisée préflop (C = call, RC = raise/call (call 3bet)…).
Je compte également le le winrate en EVbbs, le nombre de mains et le winrate en bb/100.Ce qui donne pour mes dernières 50000 mains :
PF_action EVbbs_sum EVbbs_count EVbb100 C -4283.7 4065 -105.4 RF -2584.0 771 -335.1 RC -814.6 932 -87.4 CF -292.1 93 -314.1 X -143.5 1372 -10.5 RRF -119.0 5 -2380.0 RCF -37.5 3 -1250.0 RCC 13.1 3 436.7 RRR 42.0 1 4200.0 CR 62.9 4 1572.5 RR 102.7 100 102.7 RRC 247.4 5 4948.0 CC 423.8 113 375.0 R 14226.2 9563 148.8 On peut voir que le cold call est assez catastrophique pour mon winrate…
4-Rapport des gains en fonction du type de mains
Pour ce rapport, cela se complique un peu.
Les mains apparaissent dans le tableau extrait de HM1 mais pas le type de mains.
J’ai donc créé un fichier avec les 1326 combos et un type de mains correspondant.
J’ai repris la classifications de HM3 à savoir :Types de mains Ranges Suited Aces AJs-A2s Big Ace Hands AK-AQ Pocket Aces AA Low Pairs 66-22 Medium Pairs TT-77 Big Pairs KK-JJ Non Suited Connectors KQo-54o Non Suited One Gapper KJo-64o Non Suited Two Gappers KTo-63o Suited Connectors KQs-54s Suited One Gapper KJs-64s Suited Two Gappers KTs-63s Non Suited Aces AJo-A2o Other Non Suited Hands K9o-32o Other Suited Hands K9s-32s J’ai créé un autre petit programme qui uniformise les mains du tableau puis qui va chercher le type de la mains pour chaque HH (par exemple : Ah2h renvoi « Suited Aces »)
Ce petit programme est beaucoup plus long que les autres, cela prend environ 8 minutes pour 50000 mains.
J’en ai profité pour calculer directement et ajouter une colonne au tableau les gains en EVbb et extraire un nouveau fichier csv pour que le fichier d’origine ne soit pas modifié.
Ce programme est à lancer une fois au début et on peut faire toutes les analyses que l’on veut très rapidement par la suite, on peut ensuite extraire le winrate en fonction du type de mains :Ce qui donne pour mes dernières 50000 mains :
Hand_Type EVbbs_sum EVbbs_count EVbb100 Low Pairs -1140.6 1115 -102.3 Suited Two Gappers -969.4 766 -126.6 Other Suited Hands -340.1 1634 -20.8 Suited Aces -258.4 1456 -17.7 Non Suited Connectors -56.4 1885 -3.0 Non Suited One Gapper 26.3 1273 2.1 Medium Pairs 67.7 887 7.6 Other Non Suited Hands 90.9 1820 5.0 Non Suited Two Gappers 123.4 871 14.2 Suited Connectors 467.7 1213 38.6 Non Suited Aces 696.7 2420 28.8 Big Ace Hands 946.7 1165 81.3 Suited One Gapper 1316.7 1031 127.7 Pocket Aces 2581.5 204 1265.4 Big Pairs 3976.0 660 602.4
5-Cibler les situations les plus perdantes
L’objectif de ce rapport est d’utiliser toutes ces informations et de donner les 10 situations où l’on a perdu le plus de bbs.
Je commence par supprimer les mains où j’ai fold préflop puis je fais l’équivalent d’un tableau croisé dynamique d’excel avec les différents paramètres de jeu.
J’en profite pour calculer ce que cela représente en % du total des bbs perdues lorsque j’ai décidé de mettre de l’argent au pot (VPIP = true).
Pour mes 50 kH, cela me donne ceci :
PF_action Position Facing_Preflop Hand_Type EVbbs_sum EVbbs_count EVbb100 %Leak RR MD Unopened Big Ace Hands -551.7 9 -6130.0 2.076855 RC BTN Unopened Suited Two Gappers -525.1 10 -5251.0 1.976721 C BB Raiser + Caller(s) Low Pairs -401.3 41 -978.8 1.510680 RC BB 1 Raiser Big Ace Hands -401.0 4 -10025.0 1.509550 RC MD Unopened Low Pairs -381.6 25 -1526.4 1.436520 C BTN 1 Raiser Low Pairs -364.1 61 -596.9 1.370642 C SB 1 Raiser Suited Aces -320.6 58 -552.8 1.206887 RR MD Unopened Medium Pairs -295.4 2 -14770.0 1.112023 C BB 1 Raiser Medium Pairs -277.9 68 -408.7 1.046145 C BB 1 Raiser Suited One Gapper -273.1 105 -260.1 1.028075 Avec ces résultats, on peut voir qu’en 9 4bet avec des Big Aces Hands (AK-AQ), j’ai perdu plus de 2% de l’ensemble de mes pertes (quand je VPIP) sur 50 kH… probablement des erreurs qui coûtent très chères.
A vérifier également les call 3bet au bouton avec les Suited Two Gappers…
L’idée est de pouvoir faire des review plus précises sur les spots qui ont peu de mains et beaucoup de pertes…
Salut ! J’y connais rien en programmation et en code mais ça a l’air vraiment pas mal et assez complet. Tu pourrais peut être ajouter (je sais pas si c’est possible) une ligne qui nous dit contre quelle position on perd le plus de jetons En tout cas à suivre de près !
Content que cela intéresse quelqu’un… même si tu as l’air d’être le seul!
Malheureusement, l’extraction des mains proposée par HM1 ne me donne pas la position de l’open raiseur!
Il faudrait que je fasse un programme qui, à partir de la HH formaté du site sur lequel on joue, puisse faire un tableau avec toutes ces infos… cela me prendrait beaucoup de temps, j’ai donc décidé de n’utiliser que les informations récupérer par HM1…
Mais je suis de ton avis c’est une donnée très importante que je ne pourrais pas utiliser…
Bravo Mike_modano !
Super boulot. Je ne savais qu’on pouvait utiliser « python » pour faire ça. En voyant ces quelques lignes de code, il faut déjà avoir de bonnes notions. Chez moi, j’ai juste le livre « python pour les kids » que j’ai acheté pour les enfants, mais personne ne l’a encore ouvert. As-tu des suggestions pour bien commencer le langage « python » (livre, web, vidéo) ? Je fais le même style d’analyse que toi, mais uniquement, à partir de HM2 et sur papier, lol. Je le fais toutes les 5000 mains. Par ces méthodes, tu identifies assez rapidement ce qui ne va pas dans ton jeu.
Encore bravo pour ton travail
Bravo Mike_modano ! Super boulot. Je ne savais qu’on pouvait utiliser « python » pour faire ça.
Salut, merci.. on peut tout faire avec python… c’est un amusement pour moi de lier programmation et poker!!
Pour apprendre, vu que c’est un langage très utilisé il y a énormément de contenu gratuit… je te conseille des cours très complets pour apprendre pas à pas sur openclassrooms par exemple..
Ce qui m’a fait bien progresser est le site https://www.codingame.com/ où tu peux essayer de résoudre des problèmes pour tous les niveaux avec les solutions des meilleurs codeurs…
Tu peux réussir à résoudre un puzzle en 30 lignes là ou certains y arrivent en 5 lignes!
Tu peux également essayer des déchiffrer un package comme trey qui permet d’évaluer l’équité de 2 combos pour un board donné.
Si cela t’intéresse aucun problème pour donner les codes que j’ai déjà fait mais il faut encore avoir HM1 pour extraire la liste des mains…
@++
GL pour ton projet.
J’avais démarré un truc équivalent en awk directement sur les hh winamaw.
Rien que de le coder, cela m’avait permis de détecter des leaks dans mon jeu ^^
J’aime bien l’idée de construire les rapports au fur et à mesure.
-
AuteurMessages
Vous devez être connecté pour répondre à ce sujet.