dimanche 25 octobre 2009

Quelques nouvelles

En lisant mon mail tout à l'heure, je reçois un message d'un lecteur, Julien, qui me fait part de son impatience de voir à nouveau un post sur ce blog. En vérifiant, je m'aperçois en effet que cela fait pratiquement 3 semaines que je n'ai rien écrit...

Il faut dire que mon activité poker récente a été plutôt limitée au minimum. J'ai zappé tous les tournois de Riga, je n'ai pas pris l'avion pour participer à quoi que ce soit, et je n'ai même pas lancé un sit'n'go sur PokerStars. Alors, forcément, je n'ai pas eu grand chose à raconter :)

Enfin quand je dis rien à raconter, c'est bien sûr du point de vue strictement poker. Car question évènements récents, on est dans le domaine du majeur, vu que ma femme a donné naissance à notre deuxième fille, Aliénor. Je ne résiste pas du reste à placer une petite photo...


J'ai tout de même eu pas mal de temps libre ces dernières semaines, mais je n'ai pas ressenti du tout l'envie de m'asseoir à une table de poker. Ayant joué de façon plutôt intense en live à Las Vegas, puis online courant août, j'ai atteint une sorte de surdosage mental.

Par surdosage, je ne veux pas dire que j'ai trop joué et que je n'en pouvais plus, mais que le poker n'apportant strictement rien d'un point de vue social, intellectuel ou philosophique, j'avais l'impression de ne "servir à rien" et il fallait que je m'implique dans quelque chose de plus constructif.
C'est probablement pour cela que je me suis lancé en septembre dans la conception d'un logiciel assistant type HUD pour SNG 180 joueurs. Au moins, même si on reste dans le domaine du virtuel, je faisais fonctionner mes méninges.

En octobre, j'ai totalement refondu mon projet de HUD et je l'ai réécrit en C# afin de développer une structure objet bien plus robuste pour un logiciel d'une telle ambition. Un de mes lecteurs semblait être étonné par la découverte que je n'étais finalement peut être qu'un geek, et il faut avouer que oui, j'ai un passé plutôt chargé de ce côté là ;)

Mais que mes lecteurs soient rassurés, je n'ai pas l'intention de transformer ce blog en tribune technologique, et à moins d'un torrent de demandes, je ne reparlerai plus de ce projet avant d'avoir une première version exploitable (ce qui risque de prendre un bout de temps car je vois grand du point de vue des fonctionnalités, et j'ai aussi pas mal d'autres projets professionnels à gérer).

Et le poker dans tout ça?

Si je ne vais probablement pas jouer online souvent, mon planning live pour la fin d'année ne va pas être totalement vide:
  • 9 au 14 novembre: MCOP Amsterdam (6,200€). Très bons souvenirs des deux dernières éditions où j'ai participé, par contre la structure ne fait malheureusement plus le poids par rapport à ce qui se fait.
  • 1er au 6 décembre: EPT Prague (5,250€). En espérant résister plus de deux niveaux cette fois!
A part pour ces deux évènements, ce blog risque d'être un peu vide, à moins que quelques sujets de digression ne me viennent durant quelques nuits blanches...

Eric

dimanche 4 octobre 2009

Bellagio $5,000: 2e partie

$5,000 au Bellagio, 9 juillet 2009

2e partie

Cliquez-ici pour la première partie

Je m'étais arrêté à la fin du niveau 8 avec 68,600 jetons.


Level 9 - 800/1600, ante 200 - 68,600 jetons

45 joueurs en course (sur 139), tapis moyen 62K

Le niveau 8 m'a permis de remonter au dessus de la moyenne, et la structure confortable me permet d'avoir 43BB ce qui laisse pas mal de place pour un jeu un peu créatif.

Cependant, je vais être assez card dead, et surtout je vais être déplacé deux fois à de nouvelles tables ce qui m'a obligé à jouer plus défensif qu'agressif, n'ayant à chaque fois aucune info sur les adversaires.

Je ne vais en fait jouer qu'une seule main lors de ce niveau: UTG ouvre à 5500 et c'est payé deux fois. Je vois AK en SB, une main puissante mais dangereuse vu mon tapis et ma position. Comme je viens d'être déplacé à une table, je bénéficie d'une absence d'image et cela rajoute un caractère incertain à l'issue du coup.
Je prends donc la décision de relancer fort (pour ne pas être juste payé par un joueur en position), et de snap call toute mise à tapis. J'envoie 22000 et les deux joueurs passeront chacun après un temps interminable (où je priais pour un fold, ne voulant ni jouer 1/3 de mon tapis hors de position, ni jouer un coin flip à tapis contre 99).


Level 10 - 1000/2000, ante 300 - 75,000 jetons

35 joueurs, tapis moyen 80K

4 dernières tables, nous jouons le day 1 jusqu'à ce que nous soyons tous dans l'argent (18 joueurs).

J'ouvre au bouton à 5000 avec AK et ramasse les blindes.

La main d'après, j'ouvre au cut off (une place avant le bouton) avec AJ à 5000 aussi. Le joueur en grosse blinde envoie son tapis pour 17,000 jetons. Impossible de passer vu les côtes, et je paye en espérant jouer contre une paire. Il montre AK et je suis bien derrière.
La rivière mettra KO mon adversaire avec un joli valet de coeur. Je ramasse les jetons en me faisant tout petit, n'aimant vraiment pas ce type de situation (même si évidemment au fond de moi même je suis bien content).

Nous sommes 7 handed et je décide d'ouvrir un peu mon jeu. J'ouvre en début de parole à 5000 avec K9, seul la BB paye et check dark. Flop 88T, je mise 5500 et ramasse le pot.

Bataille de blindes: j'ouvre ma SB à 5000 avec A7, payé par la BB. Flop 244. Je mise 5500 et mon adversaire relance à 20,000. Nous sommes assez deep, certes, mais je sens bien que je n'ai rien à faire dans le coup. Je passe et il montre 99, sympa.

J'ouvre à 5000 en milieu de parole avec A7. Le chip leader de la table paye en position. Flop 893. Je ne sens pas le coup, je checke, il mise 10,000 et je passe.

Bataille de blindes à nouveau: j'ouvre ma SB à 5000 avec A9, payé par la BB. Flop 557 avec deux carreaux. Check check. Turn 8 de trèfles. Check, il mise 10,000 et je paye, pensant que mon A9 est très souvent la meilleure main dans cette situation.
River valet de carreaux. Je checke, il mise 20 000. Je tanke assez longtemps, et je finis par passer. Il ne montrera pas, mais je pense que je me suis fait bluffer (la couleur qui rentre hauteur valet est une bonne scare card car c'est dans sa range et ayant checké le flop j'annonce un peu que je n'ai pas de tirage).

Redraw pour les 3 dernières tables, nous ne sommes plus que 27.


Level 11 - 1500/3000, ante 500 - 80,000 jetons

Bataille de blinde (contre un adversaire différent cette fois); j'ouvre ma SB à 8000 avec A4. BB paye. Flop 236 avec deux trèfles. Je mise 7000 et il paye. Turn 9 de trèfle. Je check, il mise 16000 et je passe.

Pas la peine de jouer au cowboy, il me reste 25BB ça va.

Un joueur ouvre à 14,000 (!) en début de parole. Je vois AK, j'envoie tout (il me reste 59K après deux orbits card dead), et il passe. Bizarre de voir encore ça à ce niveau de la partie.

J'ouvre en début de parole à 7500 avec 55 (on en 7 handed, faut se bouger un peu), le bouton et la BB payent. Flop KK8. Pas d'action. Turn 3. BB check, je mise 10500, le bouton passe mais la BB paye. Aie. River J. Check check (je le vois mal passer une paire contre un value bet, et pas envie de tenter un bluff énorme). Il montre 77 et remporte le pot.

Je descends en dessous de la zone des 20BB après ce coup, mais je vais ensuite doubler avec AK all in preflop contre AQ. Je passe à 115K.

La bulle éclate assez vite, c'est le redraw pour les deux dernières tables! La moyenne est à 154K et j'ai 104K, ne me plaçant pas vraiment en tant que favori. Le day 1 est terminé, le day 2 reprend le lendemain à 15h.

Je suis assuré de remporter $6,485.

L'échelle des prix est massivement orientée vers le top 3:
1er $233,070
2e $142,705
3e $81,080
4e $45,400
5e $35,675
6e $29,190
7e $19,460
8e $12,975
9e $10,380
10e-12e $7,785
13e-14e $7,135
15e-18e $6,485

Inutile de préciser que je vais accepter de prendre un maximum de risques pour accrocher un top 3, terminer 18e ou 8e ne changeant pas grand chose comparé à la possibilité de toucher plus de $200,000.


Level 12 - 2K/4K, ante 500, 104,000 jetons (day 2)

J'ouvre à 11,000 en fin de parole, payé par la SB. Flop K95 check check. Turn 2. Il mise 15,000 je paye. River K il mise 20,000 et je paye. Je remporte le coup. Qu'est-ce que j'avais? J'en sais rien! Je n'ai pas noté ma main et impossible de m'en rappeler maintenant. J'imagine avoir TT ou 9Ts.

Un joueur en milieu de parole ouvre à 11,000. Je relance à 35,000 depuis la SB avec AK et remporte le coup.

J'ouvre à 11,000 UTG avec AJ et remporte les blindes et antes.

J'ouvre à 11,000 au cut off avec A3, le bouton me 3bet à 27,000 et je passe.


Level 13 - 3K/6K, ante 500 - 148,000 jetons

15 joueurs en course

Le niveau précédent s'est très bien passé, j'ai augmenté mon stack de +50%.

Un joueur en début de parole ouvre à 17K. Je découvre 66 et pousse mon tapis (j'ai de la fold equity et comme je l'ai mentionné auparavant je souhaite prendre des risques). Il me snappe avec AQ et je remporte le flip (non sans transpirer vu le flop TTJ!)

Un joueur plutôt short ouvre à 17K, je vois AK et 3bet à 45K. Il passe.

Je vais ensuite jouer assez agressivement et martyriser ma table à la bulle de la TF. Je vais accumuler pas mal de jetons sans avoir jamais à montrer mon jeu ou jouer un flop.

La bulle éclate, c'est le redraw en table finale. Un joueur saute assez vite et nous sommes 8.

En table finale, alors chip leader à 7 joueurs,
quelques instants avant ma sortie...



Level 14 - 4K/8K, 1K ante - 435,000 jetons


A noter la présence en table finale à ma droite de Thomas Bichon, que je ne connaissais alors pas, et qui remportera un titre WPT à Chypre en septembre (il terminera 4e de ce tournoi).

Ryan Hughes (mon bourreau, qui remportera le tournoi), ouvre en début de parole à 18K. Vu notre profondeur importante, je me contente de payer en BB avec JJ. Flop 346 avec deux trèfles. Je checke, il mise 28,000 et je paye. Turn dix de trèfles. Check check. River 6 de coeur. Je check, il mise 55,000 et je snap. Il montre T8 et doit concéder le pot.
Il se prend la tête dans les mains et semble visiblement touché par cette petite défaite; il doit visiblement s'en vouloir à mort de ne pas avoir check la river (en effet, il a très mal joué le coup car il n'avait pas besoin de bluffer et son value bet n'est payé que par des mains qui le battent).

J'ai joué le coup passivement en connaissance de cause, car j'avais déjà remarqué qu'il était assez agressif et qu'il allait faire le betting pour moi. Je n'ai pas check raise au flop pour éviter le 4bet fold (il avait l'air plutôt imprévisible).

Je vais ensuite relancer pas mal de fois pour profiter de mon gros stack et voler quelques petits pots.

Thomas Bichon ouvre en fin de parole à 24K, je défends depuis ma BB avec 55. Flop 589 check check. Turn A. Je check, il mise 35K et je paye. River T. Je le mets sur un bel as et je suis sur qu'il va check behind si je check. Je value bet 50K, et il passe AQ estimant qu'il ne bat rien.

Très bonne analyse de sa part, là j'ai clairement vu que c'était un bon joueur.

J'ouvre en début de parole à 18K avec K6s (je suis très actif et joue presque any two, capitalisant sur la présence d'un ultra short et de la passivité de la moité de la table). Payé par SB et BB. Flop K69 avec deux trèfles. Je flop deux paires en TF avec ma poubelle et mon image de maniaque!
Je me régale d'avance car je me dis qu'au moins un des deux va tenter un move et ne me croira pas. SB check, BB mise 30K, je relance à 80K (il a 270K donc il peut me 4bet tapis avec de la fold equity) mais il turbo muck...

J'ouvre en début de parole à 18K avec A9. Thomas Bichon paye en BB. Flop A58. Il checke. Je checke behind pour créer un peu d'action au turn. Turn 2. Il checke, je mise 25K et il passe.


Level 15 - 6K/12K, ante 2K - 746,000 jetons

7 joueurs, moyenne 400K.

Je suis en contrôle total de la table. Le seul qui a pratiquement autant de jetons que moi est Ryan Hughes, qui 3bet énormément. Je le considère comme un maniaque qui pilonne la table, mais jusqu'à présent je l'ai évité car je n'ai aucun intérêt à aller au clash contre lui sans un premium.

Je suis sur un petit nuage, et je vois les $230,000 se rapprocher.

J'ouvre en début de parole à 30K avec 77. Un short envoie son tapis de 57K et je paye. Il montre 89s et va remporter le flip.

Un joueur très solide en milieu de parole ouvre à 46K, je paye depuis ma BB avec 88 (il a 300K environ). Flop J74 tout à coeur (j'ai le 8 de coeur). Check check. Turn T. Check check. River 6 de coeur. Check check et je remporte au show down contre deux as noirs...

J'ouvre au bouton avec K8s, payé par la BB. Flop A73. Il check, je mise 30K et il me relance à 80K avec 150K derrière. Je passe.

J'ouvre à 30K avec AT en début de parole, la SB relance à 100K avec 250K derrière. Je décide de passer.

Je suis toujours chip leader, mais pratiquement aucune élimination en deux heures. Va maintenant venir la main fatale.

Je suis UTG et je vois AKs. Je suis en train de réfléchir à ce que je vais faire lorsque Ryan Hughes mise 32K alors que ce n'est pas encore son tour (le joueur à ma gauche a foldé, lui faisant croire que c'était son tour).
Le directeur de tournoi indique que je dois prendre ma décision, et que si je relance Hughes aura la possibilité de passer. J'ai un premium en main, j'ouvre donc à 30K.

A ce moment là, toute la table commence à rigoler et à se moquer d'Hugues: "alors tu vas folder là non?" "pris la main dans le sac!" etc. Ceci car il relance énormément. Je vois Hughes rougir, hésiter un peu, et envoyer 100K! Tout le monde passe et la décision me revient.

Je le couvre de très peu, et nous sommes deep de 60BB. J'ai investi 3 BB dans le pot. J'ai demandé un comptage précis des stacks et j'ai tanké pendant 5 bonnes minutes.

En réalité, j'étais perdu, un peu fatigué, et je ne savais pas quoi faire. La seule chose à laquelle j'arrivais à penser c'était: "si je fais tapis il ne peut pas payer avec une paire, il n'est pas fou; et il n'a pas AA ou KK j'en suis sur".

Donc j'annonce tapis et il me snap call!

Là, je suis déjà à moitié KO, j'ai déjà envie de vomir. Il montre QQ, ça me rassure un tout petit peu car c'est un coin flip, mais je ne comprends pas comment j'ai réussi à me mettre dans cette situation de partir à tapis contre le seul joueur dont le tapis est capable de m'anéantir.

Le flop est distribué assez vite, j'ai perdu.

Il me reste 4BB, j'envoie tout au coup suivant avec KTs et je perds. Je suis sorti en 7e position en un éclair.

Comme un robot, je remplis les papiers administratifs et vais chercher mon prix. Je suis complètement sonné, je n'arrive pas à croire ce qui m'arrive, impossible d'aligner une pensée cohérente.
Je rentre au radar dans ma chambre d'hôtel, et je m'écroule sur le lit. Je vais rester au moins deux bonnes heures les yeux ouverts à fixer le plafond, incapable de faire quoi que ce soit.

Cette main, j'y repense encore, et c'est à chaque fois la même sensation froide et dérangeante qui me traverse l'échine.

Me suis-je envoyé en l'air? Non pas vraiment, on ne peut pas dire ça.
Ai-je fait une énorme erreur stratégique? Oui, là c'est certain.

Vu les enjeux, vu les tapis, vu les adversaires, je ne pouvais décemment faire ce move (tapis) qu'avec AA ou KK. Comment pouvais-je être sur qu'il allait passer une paire alors qu'il me voyait (avec raison) sur AK vu le temps que j'ai mis pour prendre ma décision. J'ai joué un coin flip à $200,000 (celui qui le gagnait remportait le tournoi de façon quasi certaine), et ce n'était certainement pas la façon la plus intelligente de s'y prendre!

Voici une belle représentation de ce qui s'est passé, illustré par ma fille:


L'aspect positif dans tout cela, c'est que je ne referai probablement plus jamais ce type d'erreur stratégique. Si j'avais remporté le coin flip, il est certain que je n'aurais pas remis en question ma décision, alors que dans l'absolu mon all in était moisi.

Posez vous - honnêtement - la question de ce que vous auriez fait à ma place. Fold? All in? Call et fold si raté le flop?

En tournoi, on arrive rarement en table finale, et encore plus rarement proche de toucher un gros montant. Quand on passe très près, et que l'on sort sur une erreur facilement évitable, la pilule est très difficile à avaler.

Le lendemain, j'ai rejoué un $5,000 et j'ai terminé 18e. C'est un peu comme après une mauvaise chute de ski: il faut s'y remettre tout de suite sinon on y arrive plus par la suite.

Eric

PS: les résultats du tournoi

lundi 21 septembre 2009

Bellagio $5,000: 1ere partie

$5,000 au Bellagio, 9 juillet 2009

1ere partie

Cela fait maintenant deux mois et demi que ce tournoi est passé et que je dois en faire le compte rendu. Deux mois et demi à toujours repousser ce petit travail rédactionnel. Deux mois et demi à me dire que non, je n'ai vraiment aucune envie de me replonger dans ce tournoi dont la dernière main maudite se rejoue encore dans ma tête.

Et pourtant, il faut bien le faire. Déjà parce que j'ai envie de savoir si je l'ai bien joué ce tournoi, et parce que ce sera probablement un très bon moyen d'exorciser le traumatisme de ma sortie anticipée en 7e place alors que j'étais premier en jeton et que rien ne pressait. Frustration énorme que de passer à côté d'un titre et de repartir avec "seulement" $19,400 quand il y a $233,000 à la gagne.

Mais nous n'en sommes pas encore là, il faut commencer par le commencement.

Le 8 juillet, je saute du day 2 du main event WSOP lors de la dernière heure de la journée à tapis 50BB avec KK contre une petite paire qui trouvera un set au turn. Je rentre à l'hôtel assez démoralisé et je n'ai aucune envie de jouer.

Pourtant, le lendemain, je vais me décider à la dernière minute de m'inscrire au $5,000 du Bellagio qui comptera 139 participants. 20,000 jetons et des rounds de 75 minutes.


Level 1 - 25/50 - 20,000 jetons

Je suis arrivé assez en retard et je n'ai vu que 20 minutes de ce niveau, où je n'ai joué pratiquement aucune main.

A ma table je reconnais Scott Montgomery et Jennifer Tilly (que je connais un peu pour l'avoir jouée plusieurs fois en 2007, notamment en TF d'un $2,000).


Level 2 - 50/100 - 19,700 jetons

Un limper, Scott relance à 300, un fish paye (oui, il y a des fishs sur un $5,000; c'est un des avantages de Vegas), je vois JJ au bouton et je décide de l'isoler en relançant à 1300. Mais tout le monde passe et je remporte le pot.

Ce sera ma seule main jouée durant ce niveau.


Level 3 - 100/200 - 19,825 jetons

4 limpers, je relance à 1000 en fin de parole avec AKo. 2 payeurs. Flop Q85 tout à coeur. Le joueur en début de parole donk 2,300 et l'autre relance à 12,000. Je n'ai aucun coeur, mais de toute façon peu importe, je passe. Les tapis volent et on a KQ (roi de coeur) contre A5 (as de coeur).

Le fish limpe, je relance à 800 avec AA et il paye. Flop KT8, il checke, je mise 1050 et il paye. Turn 6. Il checke, je mise 2500 (la moitié de ton tapis) et il paye. River 8. Il mise ses 2500, je paye mourant (mais je ne peux pas passer c'est impossible), et il montre... A8. TILT!
J'ai perdu un bon tiers de mon tapis sur cette main, je me lève pour aller faire un tour et me calmer un peu en me demandant pourquoi j'ai reçu cette paire d'as.

Bataille de blindes: SB limpe, je relance ma BB à 800 avec K7s. Flop T73 tout à trèfle. Check, je mise 800, il paye. Turn valet de carreau. Check check. River double du valet (à coeur). Mon adversaire mise 2500, je snap call et il montre 75o que je bats.
Ma décision était plus basée sur un tell physique (il a misé très vite en river) que sur son betting (il aurait très bien pu avoir une main comme T9 et faire un beau value bet river).

Un limper UTG, je relance à 700 avec JJ au bouton. La BB (Jennifer Tilly) ainsi que le limper le payent. Flop 743 avec deux trèfles. Tilly donke 1050, le limper relance à 3000. Je passe car je ne pense pas que mes valets peuvent être bons après tant d'action.
La suite du coup est épique: Tilly paye. Turn 6 de trèfle. Tilly mise 5000! L'autre paye. River dix de coeur. Tilly 7000, l'autre envoie son tapis pour 15000, Tilly snap call! Les mains: 55 pour Tilly et 45o pour son adversaire. Partage!!! Du grand n'importe quoi.

Un joueur ouvre à 700 en milieu de parole. Je paye en position avec 56s et la BB paye aussi. Flop T58. Check check, je mise 1050 et ramasse le pot.


Level 4 - 100/200, ante 25 - 16,225 jetons

Un limper, une relance à 700, je décide de payer au bouton avec KTs. La BB et le limper payent. Flop J34. C'est checké et je checke aussi car contre 3 adversaires c'est un peu plus compliqué d'arracher un pot. Turn A qui m'ouvre une possibilité de couleur max. Tout le monde checke à nouveau, cette fois je mise 2200 et c'est gagné.

Tilly ouvre à 700, le bouton paye, je défend ma BB avec KJo. Flop KT6. Je checke, et c'est checké derrière. Turn 5. Je pense avoir la meilleure main, je mise 1100, Tilly passe et le bouton paye. River 2. Je mise 2000 et le bouton passe.

3 limpers, je relance à 1000 au bouton avec AK. J'ai 2 payeurs dont Scott Montgomery. Flop 227 avec deux trèfles. C'est checké jusqu'à moi, je checke aussi. Turn 9 de trèfle (j'ai le roi de trèfle). Scott mise 2000. Je décide de payer, estimant qu'en plus de mon tirage j'ai aussi des cartes vivantes et peut être même la meilleure main (ahahah). River: 8 de trèfle.
Scott checke. Peut être est-il en train de me piéger avec un full, mais il est rare de checker les nuts, donc j'estime avoir maintenant (pour sur) la meilleure main et value bet 2000. Il me paye mourant en me lançant les jetons directement dans mon stack... Je montre et il mucke (peut être TT avec un trèfle?)


Level 5 - 200/400, ante 25 - 27,000 jetons

Gros jump dans le montant des blindes, qui doublent!

J'ouvre à 1,100 en fin de parole avec K9s. Payé par le bouton et la BB. Flop 975. BB checke, je mise 2000 et seul le bouton paye. Turn 2 qui ouvre un tirage. Je checke (mode check call induce bluff), il mise 3500 et je paye (espérant qu'il soit sur un des nombreux tirages possible ou sur un bluff). Je ne relance pas car j'ai un gros doute tout de même sur ma main (grosse impression de force de la part de mon adversaire, mais je n'arrive pourtant pas à folder).
River: dix (la couleur ne rentre pas). Je checke, il mise 5000 et je décide de passer, ne voyant pas du tout mon adversaire sur un arrachage (encore une fois, tell physique). Il montre 86o pour la quinte floppée.

Sur cette main, j'aurais du abandonner au turn. Car pourquoi payer au turn pour passer 100% des river? J'ai eu de la chance de ne pas toucher un roi ou un 9 car je sais que j'aurai eu énormément de mal à folder.

Multi limp, je limpe aussi avec 86o. Flop QQ5 avec deux trèfles. Pas d'action. Turn 7. C'est checké, je mise 1100 avec mon tirage et Tilly paye. River: 8. Elle mise 2000 et je paye, ayant un peu de mal à situer sa range (pas de dame c'est sur, peut être un tirage trèfle raté?). Elle montre A8o et je mucke perplexe.

Un limper, je limpe aussi avec QJs, les blindes se joignent à nous. Flop KT3. Bon flop! La BB mise 1000, je paye et Tilly paye en SB. Turn magique: 9 (qui ouvre un tirage carreaux que je n'ai pas). Tilly décide de donk le turn et mise 2000 (elle donk très souvent, franchement elle joue vraiment très mal et en plus elle est moche - je ne comprends pas le battage médiatique). Le joueur en BB relance à 5000 avec 5000 derrière.
J'envoie mon tapis pour protection contre un improbable tirage couleur de Tilly (j'aurais sûrement du juste payer pour la garder en fait, car qui donk ses tirage?). Elle turbo mucke et mon adversaire paye le reste de son tapis.
Il montre K9 pour deux paires (cooler) et ma main tient.

Cette main me permet de revenir dans la partie


Level 6 - 300/600, ante 50 - 26,000 jetons

J'ouvre en milieu de parole à 1600 avec AQo. Je suis payé deux fois. La SB relance à 7500. Mon stack ne me permet pas de jouer cette main, et le joueur en SB n'a pas l'air du tout d'être en carnaval. Je passe (il flashera AK).

J'ouvre à 1800 au bouton avec KK et ramasse les blindes et antes.

J'ouvre au cut off (juste avant le bouton) à 1800 avec A8 (histoire de tenter un premier vol), mais le bouton paye. Flop 234 tout à carreaux. Je mise 2100 et c'est payé. Vu que je n'ai aucun carreau et que je n'ai pas la position, je ne me sens pas trop à l'aise sur ce coup. Turn: valet de trèfle. Je checke, et il checke derrière. River 8 de carreau. Je checke, il checke aussi et je bats son A3!

Un joueur en début de parole ouvre à 1700, je paye avec 9Ts (à trèfles). 3 payeurs en position! Flop KK4 avec deux trèfles. Pas d'action. Turn 6 de coeur. Un joueur mise 3000 et je passe (il montre A6 à trèfles, ouf!)

Tilly ouvre à 1800 en début de parole. 3 payeurs. Je paye au bouton avec 97s (en mode super pro). Flop A92. Yes! J'ai floppé middle pair. Check check... Plus qu'un joueur à checker et j'envoie la sauce! Mais je suis coiffé sur le poteau, le 3e larron envoie son tapis de 40K et je suis obligé de jeter ma bombe atomique.

Pas un très bon niveau, je commence à bien descendre en dessous de la zone des 30BB.


Level 7 - 400/800, ante 75 - 21,150 jetons

J'ouvre à 2200 UTG avec ATs. Très discutable, mais j'ai pour ma défense une image assez solide vu que je ne suis pas très actif (comme d'habitude). Tilly me paye en milieu de parole. Flop T86 rainbow. Je touche top paire, suffisant pour me convaincre de miser 2700 jetons.
Et là Tilly me relance à 7000.

Que peut-elle bien avoir? Le board est vraiment très sec, il n'y a quasiment aucun tirage (J9s?). Si elle avait TT ou JJ+ elle me relançait c'est certain (son style n'est pas vraiment dans la délicatesse). Alors elle peut avoir 79 pour la quinte floppée, 88, 66 ou rien du tout.
Vu sa fréquence de mise, relance et d'agression, il est très probable qu'elle n'ait rien du tout. Mais pourquoi cibler le joueur le plus tight de la table? Je me dis qu'elle doit probablement me considérer comme un weak tight.

Tout ceci me conforte sur l'option du 4bet tapis. J'envoie tout, et à mon grand soulagement elle ne jette pas tous ses jetons au milieu en hurlant call et retournant la quinte. Elle fait la gueule.

Elle finira par passer (assez rapidement, c'est tout à son honneur de ne pas faire un mauvais hollywood), et ce pot gagné me relance une fois de plus dans la partie.

Je gagne ensuite 5300 jetons à tapis preflop ou mon AK tient contre le A9 d'un short.

Notre table est cassée et là où je suis déplacé je ne reconnais strictement aucun joueur.

Un joueur ouvre à 1700 en début de parole. Je décide de payer au cut off avec A7s. Le bouton paye, ainsi que la BB. Flop A58. Pas d'action (je check pour pot control, histoire de ne pas m'envoyer en l'air contre AJ). Turn 4. La BB pousse ton tapis pour 3200. Le relanceur initial passe (KK dira-t-il) je paye (un peu obligé) et le bouton aussi. River K (j'entends un gros boum, c'est le joueur qui vient de folder qui frappe la table de rage). Check check, et je gagne contre Q8 et 33.

J'ouvre à 2200 ave J7s en fin de parole. Le bouton me 3bet à 5500 et je passe.

J'ouvre au cut off à 2200 avec K5s. BB paye. Flop JT8 avec deux trèfles. Flop plutôt dangereux pour une mise de continuation. Je décide donc de check après le check du BB. Turn roi de trèfle. Check, je mise 3000 et c'est payé. River 4 de trèfle. Check, je suis content de checker (je n'ai pas de trèfle) et je gagne contre QJ.

Ce niveau s'est très très bien passé vu que j'ai plus que doublé mon stack.


Level 8 - 600/1200, ante 100 - 55,200 jetons

Un joueur en début de parole ouvre à 2700, je relance au bouton à 8000 avec KK et remporte le pot. Idem, avec AK et remporte 3500 jetons supplémentaires.

J'ouvre en milieu de parole à 2500 avec T8s, payé par le bouton. Flop QQ9, je mise 3000, le bouton me relance à 10500. Je ne suis pas Phil Ivey, je passe.

J'ouvre UTG à 2700 avec KQs. Je suis relancé à 6500 par le bouton. Je passe (il flashe AK).

Je fais quelques vols qui passent pratiquement tous, et empile les jetons.

Je termine le niveau à 68,600 jetons pour une moyenne à 62K (45 joueurs restant sur 139, top 18 payés).


A suivre!

dimanche 13 septembre 2009

Fonctionnalités du HUD

Un HUD, pour quoi faire?

Dans l'article précédent, j'ai détaillé le fonctionnement logiciel du HUD et donné quelques détails sur le scraper permettant de lire une table Pokerstars. Tout ceci est certes très intéressant du point de vue prototypage, mais rien ne sert de passer du temps à développer une application si elle ne sert à rien ou est inutilisable.

Il est donc indispensable de lister les différentes fonctionnalités désirées pour orienter les développement du HUD dans une bonne direction dès le départ.


Les outils déjà présents sur le marché

Tout le monde connait les logiciels type Poker Tracker ou Hold'em Manager qui ne sont pas seulement des HUDs mais surtout des trackers. La différence réside dans le fait que le tracker propose une analyse "offline" complète des mains jouées avec des graphes de gains et pertes, alors que le HUD a pour unique objectif de proposer des informations relatives à la main en cours (via l'affichage de données supplémentaires sur la table de poker).



Avec Hold'em Manager, on peut générer des centaines d'analyses différentes
sur le jeu de nos adversaires. Pas très utile en SnG turbo.


Si ces trackers sont très bien réalisés et vraiment complets, ils se destinent surtout au joueur de cash game ou de tournoi deep stack. En effet, le nombre important de paramètres ainsi que la manière dont le HUD est conçu permet d'aider sa réflexion dans le cadre d'un jeu avec des stacks profonds et des décisions flop, turn et river.


Exemple de HUD d'un tracker. Très utile en deep stack,
mais peu adapté au format SnG "push/fold"


Lorsque l'on se place dans un contexte de SnG turbos les décisions sont à 90% preflop et les questions que l'on se posent ne plus vraiment les même que dans le cadre d'un jeu deep stack. On peut sûrement arriver à paramétrer le tracker pour faire afficher les statistiques que l'on considère utile pour ce type de format, mais il subsiste plusieurs problèmes:
  • il faut sûrement passer pas mal de temps pour bien comprendre et maîtriser le logiciel de tracking pour l'adapter à nos besoins exacts
  • les trackers ne proposent pas la notion de contexte pour filtrer les mains sur lesquelles nous allons calculer les statistiques, et n'affichent pas non plus les hand ranges
  • visuellement, on est loin d'un affichage optimal permettant d'aller à l'essentiel pour prendre la décision (quand on multitable à fond, on a peu de temps pour absorber et traiter toutes les infos du HUD)
Il est possible que je me trompe et qu'on puisse faire avec Poker Tracker exactement ce que je vais décrire que le HUD idéal pour les SnG turbos, mais j'en doute. De plus, comme on le verra, je souhaite implémenter des fonctions utiles pour le multitable qui ne sont là clairement pas proposées par les trackers.

J'ai vu un HUD qui ressemble déjà plus à ce qui me semble être idéal: NotesNL. La notion de contexte y est fortement développée, et il affiche les hand ranges. Le problème, c'est qu'il est très compliqué à prendre en main, et qu'il manque un élément essentiel à mon sens: le filtrage des informations affichées (pourquoi nous mettre plus de 300 paramètres alors qu'on en a besoin que de 3 ou 4 pour prendre notre décision sur cette main précise). De plus, je n'ai pas l'impression qu'il soit encore maintenu et/ou commercialisé (par exemple, il ne prend pas en compte le siège préféré ce qui le rend complètement inutilisable).


NotesNL: trop d'info tue l'info!



Les fonctionnalités idéales

Déjà, il est nécessaire de bien préciser notre objectif: réaliser un HUD destiné uniquement aux SnG 9 à 180 joueurs (qui ne sont pas "deep stack"), c'est à dire en fait destiné à tous les formats de jeu en tournoi où la décision se fait à plus de 80% du temps preflop.
En aucun cas je souhaite réaliser un produit qui pourrait se substituer au HUD de Poker Tracker. Nous sommes sur deux approches complètement différentes du jeu.

Donc, avant d'énumérer les fonctionnalités du HUD idéal, on peut lister toutes les fonctionnalités qui ne seront clairement pas proposées:
  • aucune analyse ou statistique post flop: le HUD ne sera activé que lors des décisions preflop
  • analyse preflop limitée à des cas simples et pertinents. Par exemple, le HUD ne sera pas actif en cash de limp, limp, 3bet, call et 4bet
  • pas de calculateur d'équité (qui indiquerait par exemple avec quel type de main on peut payer le all in de l'adversaire), car c'est interdit par les conditions générales d'utilisation de Pokerstars (donc pas d'ICM, pas de SAGE, ...)
Voici maintenant qui me semble être les bases d'un HUD parfaitement adapté aux SnG:


Analyse contextuelle
C'est clairement là que se trouve conceptuellement la grande différence avec les autres logiciels. Plutôt que d'afficher en permanence des informations générales sur tous les joueurs, je souhaite afficher les informations relatives uniquement aux mains jouées par notre adversaire dans des conditions similaires. Exemple:
  • joueur "A" limpe UTG, c'est foldé jusqu'à moi au bouton. Le HUD n'affichera que deux informations: 1. le pourcentage de limp call all in ainsi que sa range, avec la probabilité qu'il limpe un monstre; 2. la range de call de "B" et "C" qui sont dans les blindes si je décide de push
  • je suis de grosse blinde, le bouton pousse son tapis de 12BB, la petite blinde passe. Le HUD va afficher la range et la fréquence de push du bouton
  • je suis au cut off avec 15BB, le HUD affiche la fréquence et la range de resteal du bouton, ainsi que la fréquence et la range de call d'un push all in en fin de parole
  • je suis entre UTG et UTG+3, je suis le premier à parler, le HUD affiche... rien du tout! En effet, quoi de pertinent à afficher à ce moment là? Par exemple, la range de call de la BB contre un push UTG n'apporte pas grand chose à notre décision vu qu'il y a 8 joueurs avant
Et bien entendu, les fréquences de push/call etc ainsi que les ranges ne sont calculées que depuis des historiques de mains sur des formats compatibles, au niveau de blinde équivalent (ou approché) et à "M" (nombre de BB des stacks effectives) comparable.
Par exemple, les mains jouées en SnG 9 joueurs ne serviront pas sur un 180 joueurs car on ne joue pas forcément pareil. De même, un push enregistré au bouton avec 5BB ne rentrera pas dans la range analysée si le même joueur push avec 12BB.

Pour un joueur confirmé de SnG, la plupart des décisions sont automatiques et ne demandent pas vraiment de réflexion. Il y a cependant quelques décisions clés qui ne sont pas évidentes, et c'est là où le HUD doit apporter toute sa valeur ajoutée. Le reste du temps, il doit se faire discret!

L'inconvénient, c'est qu'en contextualisant on perd en échantillon et le HUD ne pourra être à mon avis utilisable qu'avec un historique de plusieurs centaines (voir milliers) de SnG joués. Si on a que 3 exemples de showdown avec vilain sur sa range de push au bouton en middle game de SnG 180 joueurs, on ne pourra pas vraiment donner des stats exploitables sur ce joueur dans cette configuration précise.


Optimisation visuelle
Le multitabling fatigue les yeux et le HUD ne doit en aucun cas ajouter un effort supplémentaire trop importante pour analyser visuellement la table. Quand il sera activé, il mettra dans l'ombre tous les joueurs inactifs et affichera de manière claire et précises les informations utiles.
Cela demandera un travail ergonomique certain, mais c'est un point crucial.


Boite à outil pour le multitabling
Puisque le multitabling fait complètement partie des sessions de SnG et pour rendre le logiciel encore plus attractif, il me semble intéressant d'y rajouter toutes les fonctionnalités indispensables qu'on retrouve généralement dans divers scripts ou outils éparpillés, à savoir:
  • stacking automatique des tables
  • enregistrement automatique des SnG (entièrement paramètrable)
  • gestion automatisée des montants de mise et de relance via des hotkeys
  • fermeture automatique des tournois terminés
  • clic automatique sur time bank
  • clic automatique sur "I'm back" si on sit out sur une table
  • suivi d'un all in (si on veut suivre le déroulement d'un all in, une hotkey spéciale lance le all in, déplace la fenêtre à un endroit précis en dehors de la pile de stacking, et la replace dans la pile après le coup)
  • ...

Voila, je pense que vous en savez maintenant plus sur l'esprit du logiciel que je compte concevoir. Mon objectif premier est d'arriver à sortir une version alpha avec un minimum de fonctionnalités afin de pouvoir tester la pertinence et l'utilité réelle de ce projet. En effet, sur le papier tout cela à l'air super intéressant, mais peut être qu'en réalité je vais m'apercevoir que ça ne sert pas à grand chose.

Je suis intéressé par tout commentaire concernant les fonctionnalités que vous pourriez attendre d'un tel logiciel.

Bon maintenant au boulot, car on est encore loin d'un version fonctionnelle :)

Eric

samedi 12 septembre 2009

Développement d'un HUD pour Pokerstars

Logiciel d'aide à la décision pour SnG 180 joueurs

Les trackers permettant d'afficher les statistiques de jeu de vos adversaires sont assez nombreux (Poker Tracker, Poker Office, ...) mais ils sont difficilement utilisables dans le cadre de SnG turbo. Ces formats impliquent la plupart du temps des décisions preflop, et les informations de type VPIP ou facteur d'agression ne sont pas vraiment utilisables dans ce contexte. Afficher les hand range du joueur en fonction de sa position et de son action preflop serait par exemple beaucoup plus intéressant.

De plus, il est nécessaire de séparer les échantillons de mains observées selon le buy in et le type exact de format, les joueurs ne se comportant pas forcément pareil d'un type de tournoi à l'autre.

Enfin, le multitabling massif implique l'utilisation de scripts divers et au final on peut se retrouver avec une usine à gaz (un script pour positionner les tables, un utilitaire pour s'enregistrer automatiquement dans les SnG, un tracker customisé pour tenter d'afficher des stats utiles, etc.).

Au final, j'ai fait le constat que l'utilitaire idéal pour les SnG n'existait pas et que si j'en voulais un la seule solution était de le faire moi même :)

Comme pour mes expériences poker, j'ai décidé de partager sur ce blog les différentes étapes de développement de ce projet. L'objectif affiché, en dehors de discourir sur quelques challenges techniques amusants, est d'obtenir des commentaires, retours et idées qui me permettront d'améliorer le logiciel au fur et à mesure.

Les divers éléments nécessaires à la réalisation d'un HUD

Un HUD (Heads-Up Display) est un logiciel qui affiche des informations diverses en superposition sur une autre application. Dans le cadre qui nous intéresse, le poker, il s'agit d'afficher des informations statistiques sur vos adversaires afin de vous aider à prendre la meilleure décision possible.

Pour fonctionner, un HUD doit être composé au minimum de trois modules:
  • module d'importation des mains jouées (hand history): il scanne votre disque dur pour récupérer toutes les mains jouées et les passe dans une moulinette pour en récupérer toutes les informations jugées nécessaires (exemple: pour chaque joueur, fréquence et liste des mains des 3bet en BB suite à une relance du bouton). Facile à réaliser, à partir du moment où on sait ce que l'on veut
  • module d'interfaçage avec le logiciel poker client ("scraper"): il récupère les informations sur la main en cours (actions preflop, montant des mises, stack et nom des joueurs, etc) et en crée un modèle informatique exploitable. Déjà plus ardu, les rooms online mettant tout en œuvre pour rendre cette opération la plus difficile possible
  • module d'analyse et HUD: il croise les informations en provenance des deux modules précédents, prépare les statistiques importantes pour la main en cour, et les affiches en surimpression sur le logiciel poker. Relativement simple
Le schéma ci-dessous présente de manière simplifiée la manière dont les modules interagissent:

 

Quel(s) langage(s) de programmation utiliser?

Idéalement, il faudrait utiliser un langage comme C# qui allie la puissance objet du C++ à une certaine facilité d'implémentation. L'avantage principal est l'accès à certaines techniques comme l'injection DLL qui permet de simplifier la réalisation du module d'interfaçage avec le client poker.


Cependant, en ce qui me concerne, j'ai fait un choix différent. Mon expérience de développement étant principalement axé sur le client/serveur Web je connais avant tout Perl et Java. Je suis à l'aise en C++ mais je ne connais absolument pas l'environnement Windows. Mon objectif étant avant tout de développer un prototype fonctionnel, j'ai pris la décision de me rabattre sur des solutions ne me demandant qu'un temps d'apprentissage minimal.

J'ai donc opté pour Perl (qui existe aussi sous Windows) pour la partie d'importation et d'analyse des historiques de mains jouées, et décidé d'apprivoiser AutoHotKey (AHK) pour les deux autres modules. AHK est une sorte de basic intégrant des fonctions très pratiques pour interagir avec autres fenêtres Windows; facile à apprendre, et productivité immédiate. Par contre, code linéaire et plutôt moyenâgeux (aucune abstraction type objet possible), et aucun interfaçage direct possible avec la base de données! (je suis obligé d'utiliser un hack qui me donne encore des boutons).

La base de données utilisée est PostgreSQL, souvent déjà présente chez les joueurs de poker puisqu'utilisée par presque tous les trackers du marchés.


Le scraper, ou comment scanner une table

Je me doute bien que le module d'analyse statistique n'intéresse pas grand monde et que la seule raison pour laquelle vous êtes encore en train de lire cet article est que vous voulez savoir comment j'ai fait pour "lire" une table Pokerstars

Il y a plusieurs méthodes possibles:
  • reconnaissance optique complète de la table: on prend un "snapshot" de la table et on utilise ensuite un OCR (logiciel de reconnaissance optique, utilisé par exemple pour numériser des livres). C'est bourrin, gourmand en ressource, absolument pas optimal, éventuellement sujet à l'erreur et pas évident à mettre en place
  • l'injection DLL: on accède à la mémoire interne du logiciel pour récupérer certaines informations et on détourne des fonctions systèmes (affichage d'une ligne par exemple) pour siphonner au passage d'autres données. Assez facile à faire pour qui connaît un minimum l'environnement Windows, optimal, efficace, la grande classe quoi. Seul problème, je n'y connais rien et je veux un prototype de scraper fonctionnel en moins de 48h.
  • l'usine à gaz: c'est la méthode que j'ai employée, et que je vais maintenant développer
Lorsqu'une main est en cours, il est impossible de récupérer les informations de manière naturelle (en lisant un fichier log par exemple). La seule donnée accessible facilement est le titre de la fenêtre sur laquelle nous sommes en train de jouer la main:
$0.10 NL Hold'em [turbo - 360 players] - Tournament 194836452 Table 7 - Blinds $10/$20 - Logged In as Persuader 73

Que peut-on en déduire? Les blindes (ok pratique), le nom du héros (votre nom quoi, super ça je le connaissais pas), l'identifiant du tournoi et le numéro de table où vous vous trouvez. Ces deux dernières informations sont capitales: en effet, à partir de là vous pouvez retrouver le fichier d'historique dans lequel toutes les mains du tournoi sont stockées.

Après quelques manipulations, on peut ainsi en déduire le nom du fichier d'historique ainsi que son emplacement sur le disque dur:
C:\Users\Eric\AppData\Local\PokerStars\HandHistory\Persuader73\HH20090912 T194836452 No Limit Hold'em $0.10 + $0.txt

On ouvre donc ce fichier et on lit ce qu'il y a dedans:

PokerStars Game #32751275845: Tournament #194836452, $0.10+$0.00 USD Hold'em No Limit - Level I (10/20) - 2009/09/12 17:13:24 EET [2009/09/12 10:13:24 ET]
Table '194836452 7' 9-max Seat #1 is the button
Seat 1: Parieur25 (1500 in chips)
Seat 2: raycash8032 (1500 in chips)
Seat 3: Persuader73 (1500 in chips)
Seat 4: elhuyon (1500 in chips)
Seat 5: Onkelhoppel (1500 in chips)
Seat 6: kaiser345 (1500 in chips)
Seat 7: Damo19 (1500 in chips)
Seat 8: wico74 (1500 in chips)
Seat 9: iehbr507 (1500 in chips)
raycash8032: posts small blind 10
Persuader73: posts big blind 20
*** HOLE CARDS ***
Dealt to Persuader73 [4h Qh]
elhuyon: raises 1480 to 1500 and is all-in
Onkelhoppel: calls 1500 and is all-in
kaiser345: folds
Damo19: folds
wico74: folds
iehbr507: calls 1500 and is all-in
Parieur25: folds
raycash8032: folds
Persuader73: folds
*** FLOP *** [8c 5d Th]
*** TURN *** [8c 5d Th] [7c]
*** RIVER *** [8c 5d Th 7c] [7h]
*** SHOW DOWN ***
elhuyon: shows [6d 6c] (two pair, Sevens and Sixes)
Onkelhoppel: shows [Tc Jc] (two pair, Tens and Sevens)
iehbr507: shows [5s Ad] (two pair, Sevens and Fives)
Onkelhoppel collected 4530 from pot
[...]

Chouette! On a toutes les informations! Qui est assis où, les jetons, les actions preflop, les cartes, les... Attendez, il y a un problème: je vois K9s sur la table et là l'historique indique Q4s... Eh oui, ce n'est pas aussi simple. Pokerstars ne met pas à jour l'historique des mains en temps réel: c'est seulement après la fin du coup que toutes les données sont inscrites.

Il y a cependant une brèche exploitable: d'une main à l'autre, les données ne change pas trop. On peut donc partir de la main précédente, analyser le coup pour mettre à jour les stacks des joueurs, et on se retrouve plus ou moins avec les conditions de départ de la main en cours. Le problème, c'est quand un joueur arrive à une place auparavant vacante: impossible de connaître son nom avant la main suivante, et pourtant c'est maintenant dont on a besoin de l'information.

De plus, lorsqu'on est déplacé à une nouvelle table, on a absolument aucune information exploitable et on ne absolument pas analyser le coup en cours.

Connaitre les joueurs et leurs stacks, c'est bien, mais lorsque c'est notre tour de parler il faut bien que le HUD sache qui a fait quoi (fold, limp, raise, ...) afin de pouvoir présenter la statistique nécessaire à ce moment précis du jeu (contrairement à un tracker classique, mon objectif est de rajouter la notion de contexte - par exemple la fréquence de push au bouton de vilain avec ses hand range si  je suis en BB et face à une décision de payer ou non son all in).

Pour ce faire, j'ai besoin de déterminer si chaque joueur a ou non ses cartes, et de connaître le montant du pot, le montant nécessaire pour suivre s'il y a eu action avant moi et le montant de la relance minimum possible. Avec ces éléments, je peux à l'aide d'un algorithme simple reconstruire les actions preflop.

Déterminer la présence de carte est très simple: il suffit de lire un pixel précis correspondant à l'emplacement des cartes pour chaque joueur et la couleur lue nous donne la présence ou non des cartes (si on trouve un pixel blanc - couleur du dos de la carte - alors le joueur est toujours dans le coup, si on trouve un pixel vert - couleur de la table - alors il a passé).

Pour le pot et les autres montants, pas le choix, il faut utiliser une reconnaissance "optique" type OCR. Pour cela j'ai récupéré les images de chaque chiffre utilisé et je scanne la zone où est affiché le pot pour en déduire son montant. Ce n'est pas très difficile car il n'y a que 10 chiffres (si c'était un pseudo là ça se complique car il y a au moins 70 signes différents possible pour un caractère).

Au final, avec ces petits bidouillages et des algorithmes de reconstruction, j'arrive à déduire de manière assez précise l'état de la main en cours au moment où je dois prendre ma décision. Je peux ainsi transmettre ces infos au module HUD qui affichera ensuite les informations dont j'ai besoin.

Bien entendu, les limitations sont importantes: quand je suis changé de table mon HUD est inactif pour la première main jouée, si un joueur arrive je ne peux pas savoir de qui il s'agit pour sa première main jouée, et surtout je mets pratiquement 1.5s pour analyser toute la table! Pas vraiment performant, et inutilisable en multitabling lourd.

Cependant, ce qui compte, c'est d'avoir un prototype qui fonctionne. Une fois l'ensemble du projet validé du point de vue de son utilité et de son principe, il sera toujours temps de réécrire le tout de manière bien plus performante en C# ou C++.


Est-ce autorisé par Pokerstars?

Très bonne question! Inutile de passer des semaines à développer un logiciel pour voir son compte fermer du jour au lendemain et ses gains confisqués.

Voici un extrait des conditions générales d'utilisation du logiciel Pokerstars:

5.5. PROGRAMMES D’ASSISTANCE EXTÉRIEURE AUX JOUEURS (PAE). PokerStars interdit les Programmes d’Assistance Extérieure aux joueurs (« Programmes PAE ») qui sont destinés à fournir un « Avantage déloyal » aux joueurs. PokerStars définit comme « Extérieur » les logiciels informatiques (autres que le Logiciel ») et les bases de données ou les profiles qui ne sont pas fondés sur un logiciel (par exemple, les sites Web et les services d’abonnement). PokerStars définit comme « Avantage déloyal » toute circonstance par laquelle un Utilisateur accède à ou compile des informations concernant d’autres joueurs au-delà de ce que l’Utilisateur a personnellement observé à travers son propre jeu. Nous vous encourageons à lire notre FAQ - Logiciels en ligne interdits.

5.6. JOUEURS AUTOMATIQUES (BOTS). L’utilisation de l’intelligence artificielle, y compris et ce de façon non-exhaustive « les robots », est strictement interdite en relation avec le Service. Toute action entreprise en relation avec le Service par un Utilisateur doit être exécutée personnellement par les joueurs à travers l’interface utilisateur accessible en utilisant le Logiciel.

Le paragraphe 5.5 permet l'utilisation de HUD/tracker à partir du moment où les statistiques compilées proviennent uniquement des historiques de mains auxquelles le joueur a participé directement. C'est tout à fait le cas dans mon projet.

Le paragraphe 5.6 fait lui référence au fait de le joueur doit être "personnellement" à l'origine de toute action d'interactivité avec le logiciel de poker. Tant que le HUD ne clique pas lui même sur "fold", ou même ne conseille directement l'action à réaliser, c'est autorisé. Ainsi, par exemple, un calculateur ICM serait interdit car le résultat affiché par l'analyse de la main en cours serait directement un action de type "push", "fold" ou "call".

Il n'y a aucune référence à une quelconque interdiction de "lire" la table pour en déduire le pot ou les actions preflop lors du déroulement d'une main. Du reste, tous les logiciels poker du marché le font, et sont autorisés par les rooms.

En conclusion, un HUD d'aide à la décision orienté spécifiquement pour les SnG turbos n'a rien "d'illégal" et est de fait complètement autorisé par Pokerstars.


Première version du projet: 0.01 alpha

Pour finir, voici une capture d'écran de la toute première version du projet qui démontre le fonctionnement du scraper et du HUD (affichage d'informations sur la table). Le module d'analyse fonctionne et j'ai créé une première base de données à partir de 1000 SnG 180j que j'ai joué, mais il n'est pas encore connecté au HUD.


Dans le prochain article, je m'intéresserai plus spécifiquement aux fonctionnalités attendues du HUD, notamment le type de stats contextuelles trackées et affichées. C'est bien là le coeur du système, car ce logiciel ne peut avoir d'intérêt que s'il affiche des informations pertinentes et réellement utiles à la décision.

Je sais que vous serez probablement nombreux à me demander les sources de mon script AHK (scraper & HUD) mais je ne souhaite pas pour l'instant les diffuser. Non pas que mon code ait une grande valeur, mais je ne pense pas qu'il soit intelligent de distribuer librement et sans contrôle un script très facilement transformable en autre chose que sa vocation initiale.

Eric