[Update]
Après de nombreux tournois, mon bot (posté il y a maintenant plus de 6 mois) est désormais premier du classement, yeyyy 😀
[Post Initial]
Après AI Challenge “Ants” 2011, en manque de défi d’IA, j’ai effectué pas mal de recherche sur internet afin de trouver un concours qui me plairait.
Et je l’ai trouvé (enfin partiellement) FinalBot est un site concu il y a un peu plus d’un an, avec pour but d’hoster différents concours d’IA.
Lors du lancement, 2 jeux sont mis en place:
Un jeu de dark chess (les échecs avec du brouillard de guerre! Il fallait y penser!) et , de manière plus importante: un jeu de Hold’em Poker.
J’avais déjà eu l’envie de faire une IA sur ce thème du poker. Mais la mise en place du jeu peut être laborieuse et chronophage, ce qui m’avait un peu refroidi.
Bref, découverte du concours:
J’arrive après la guerre: le site et le concours ont été lancé durant l’été 2011 et une fois les récompenses données aux vainqueurs, le site a vu sa fréquentation décroître. Les bots développés sont toujours présents et 3 compétitions sont organisées automatiquement tous les jours (standard, headsup, bigpool). C’est CLR plateforme uniquement (C#/CPP/F#)
J’ai créé un bot début Août, random bot d’abord, afin de tester le site. Puis je m’y suis réellement mis. J’ai récupéré et testé un bon paquet de librairies “permettant” de calculer les probas dont j’avais besoin.
J’ai fini par choisir un package(C#) créé par Keith Rule (lien). Cet utilitaire ne fonctionne pas, comme je l’avais imaginé, sur des tables de données précalculées. Non, les probas sont re-calculés à la volée. C’est extrêmement bien optimisé (pour du C#), ce qui permet de calculer ces probas avec une bonne précision dans le temps imparti.
Mon bot est assez simpliste pour le moment. Il joue relativement safe et tente des bluffs dans un seul cas: s’il est le dernier à parler, que tout le monde à check et qu’il a des jetons. (dans ce cas là uniquement 30% du temps) Il n’analyse pas le comportement de chaque joueur en face (c’est le prochain pas)
Beaucoup de règles sont donc implémentées, avec de nombreux tresholds variables selon le nombre de joueurs toujours à la table, les valeurs de base étant setté via la bonne vieille méthode empirique et de bon sens. (donc très clairement améliorable!) Le Heads-Up (1v1) est géré de manière indépendante (car il faut être, de manière générale, bien plus agressif en 1V1 que dans une partie avec plusieurs adversaires)
Après des mises à jour successives, je me suis rendu compte que le rythme des tournois mis en place sur le site officiel était bien trop faible pour avoir une visibilité un tant soit peu précise sur les conséquences des “améliorations” apportées au bot. De même pour le client de test (permettant de faire des matchs offline, entre les bots fourni (raisebot-callbot etc) et les bots développés (dont on possède les dll bien sur!)) : Problème: ce client de test permet de faire … 1 match par 1 match. Pas de quoi avoir des stats précises :/
J’ai donc prit cet exe de test, browsé son code (via ILSpy) pour récupérer les méthodes utilisées pour ajouter les joueurs, lancer les matchs, récupéres les scores etc. Ensuite, création d’un nouvel exe winform sur visual studio. Intégration des dlls de l’exe de test, et je me suis fait mon tool à moi (très design, comme d’hab)
Grace à ce tool, j’ai désormais la possibilité de voir ce que mon bot vaut … véritablement: (données basées sur le % de première place) Ici un exemple avec 1000 parties:
Problème: je n’ai pas les DLLs des concurrents! (à venir, le premier du concours m’ayant “promis” sa DLL) A l’heure actuelle (je n’ai pas touché au bot depuis au moins 1 mois et demi) je suis 2ème du classement continu (La montée à pris du temps, dû au fait qu’il y a seulement 3 tournois/jour)