Voici enfin venu aujourd'hui le jour trop longtemps attendu des résultats de la finale individuelle concours d'intelligence artificielle Python 1000 Bornes.
Je présente toutes mes excuses pour tous ces mois de retard, découlant d'un incident de santé dans la famille début mars.
J'en profite pour remercier les candidats pour leur patience admirable, ainsi que ceux qui ont mis la main à la pâte pour faire avancer la gestion de l'événement alors que j'étais indisponible, notamment Afyu et également cent20.
Nos remerciements une fois encore tous ceux qui ont rendu possible cet événement auquel nous pensions déjà depuis plusieurs années et qui nous tenait tant à cœur :
Sommaire :
Sur les 42 participants et participantes cette année, nous avions retenu invité les 3 premiers au classement à participer à une finale pour un lot supplémentaire :
La finale en question était l'occasion de faire évoluer le code de son IA si cela n'avait pas été anticipé, car le format des combats changeait exprès.
Etaient prévus ici non plus des duels, mais un truel entre les IAs de nos 3 champions.
Les IAs gérant et optimisées pour ce format devaient nous être téléversées jusqu'au dimanche 11 mars 2024 23h59 GMT+1.
Tous nos champions ont bien téléversé une ou plusieurs IAs avant la date en question. Sauf indication contraire de leur part (il y avait la possibilité de cocher l'IA à prendre en compte), c'est l'IA soumise en dernier qui va participer au truel.
Afin d'éliminer tout facteur aléatoire, nous avons fait s'affronter ces 3 IAs lors d'une grande série de truels, très exactement 388'888 truels.
Rappelons le 1000 Bornes est un jeu se jouant à tour de rôle. Pour 3 joueurs, pourront alors jouer dans l'ordre : joueur1, joueur2, joueur3, joueur1, joueur2, joueur3, joueur1, …
Selon la façon dont ont été codées les différentes IAs, certaines positions pourraient être avantagées ou désavantagées (si par exemple dans le cas où plusieurs adversaires sont vulnérables, une IA attaque toujours la position de plus bas numéro).
Pour n'avantager et de désavantager personne, nous changeons l'ordre des adversaires à chaque nouveau truel.
Voici le détail des truels joués par chaque IA dans les différentes positions possibles :
Intéressons nous maintenant au classement des IAs, en terme de scores, pour chaque truel.
Voici toutes les fois où chaque IA est dernière d'un truel (pire des 3 scores) en fonction des différentes positions :
Voici maintenant toutes les fois où chaque IA est victorieuse d'un truel (meilleur des 3 scores) en fonction des différentes positions :
On peut effectivement remarquer de grosses disparités en fonction des positions, Afyu bondissant par exemple de 52-53% à 73% de victoires si son IA joue en position 3 !
Mais la question n'est pas de savoir ce qu'il fait de spécial dans cette configuration (probablement rien vu le cadre imposé par le script réalisant les truels), mais plutôt de savoir ce que les autres IAs ou plutôt l'une d'entre elles ne font pas ou font moins bien dans cette configuration (comme du code non entièrement adapté à ce nouveau format et ne tenant pas compte du joueur3 pour certaines actions : qui est le plus proche de la ligne d'arrivée, qui attaquer, etc.). Si dans ce cas on oublie de tenir compte pour certaines décisions de ce qui semble être l'IA la plus dangereuse, effectivement cela explose son taux de victoires…
Si le vainqueur de la finale semble certes évident au vu des résultats précédents, reste encore à départager les deux autres qui sont très proches.
Pour cela rappelons que l'objectif n'était pas simplement de gagner, mais de gagner en réalisant le meilleur score possible.
Voici donc les scores cumulés (victoires et défaites confondues) lors des truels, en fonction ici encore des différentes positions de jeu :
Décidément, ici encore les deux IAs concernées sont extrêmement proches.
Les résultats des truels peuvent être téléchargés et sont accompagnés du script de classement.
Voici la sortie du script d'évaluation :
Je présente toutes mes excuses pour tous ces mois de retard, découlant d'un incident de santé dans la famille début mars.
J'en profite pour remercier les candidats pour leur patience admirable, ainsi que ceux qui ont mis la main à la pâte pour faire avancer la gestion de l'événement alors que j'étais indisponible, notamment Afyu et également cent20.
Nos remerciements une fois encore tous ceux qui ont rendu possible cet événement auquel nous pensions déjà depuis plusieurs années et qui nous tenait tant à cœur :
- principe du jeu : Edmond Dujardin
- graphismes du jeu : Jean-Yves Boucrot
- codage du jeu : Xavier Andréani alias critor
- test du jeu : Xavier Andréani alias critor + Adrien Bertrand alias Adriweb + RapidZapper
- plateforme en ligne de participation et duels entre IAs : Adrien Bertrand alias Adriweb + RapidZapper
- mises à jour spécifiques pour corriger des bugs ou contourner des problèmes de compatibilité apparaissant avec le jeu : Bernard Parisse alias parisse + Yaya.Cout + VittaScience
- firmware dédié à la compatibilité avec les NumWorks N0110 verrouillées et N0115/N0120 : RapidZapper
- principe de l'évaluation : noelnadal + Sébastien Michelland alias Lephe + Xavier Andréani alias critor
- bannières : Xavier Andréani alias critor + Sébastien Michelland alias Lephe
- dotation en lots : Texas Instruments + Casio + R. Jarrety S.A.S. + Calcuso + Université Grenoble Alpes + Vincent Robert alias cent20 + NumWorks + HP
Sommaire :
1) Les finalistes et la finale
Go to topSur les 42 participants et participantes cette année, nous avions retenu invité les 3 premiers au classement à participer à une finale pour un lot supplémentaire :
2) La finale
Go to topLa finale en question était l'occasion de faire évoluer le code de son IA si cela n'avait pas été anticipé, car le format des combats changeait exprès.
Etaient prévus ici non plus des duels, mais un truel entre les IAs de nos 3 champions.
Les IAs gérant et optimisées pour ce format devaient nous être téléversées jusqu'au dimanche 11 mars 2024 23h59 GMT+1.
3) Les IAs
Go to topTous nos champions ont bien téléversé une ou plusieurs IAs avant la date en question. Sauf indication contraire de leur part (il y avait la possibilité de cocher l'IA à prendre en compte), c'est l'IA soumise en dernier qui va participer au truel.
- SlyVTT va combattre avec son IA SLYnapse_finale, après nous avoir envoyé 4 autres tentatives d'IA.
Lorsque qu'elle gagne, son IA s'esclame : "Je suis SLYnapse-11.0 ... Moi en mode Truelle, je Maçonne " - Afyu va quant à lui se battre avec son IA Triteleia.
En cas de victoire, son IA s'écrie : "Et BIM, c'est qui le meilleur ?" - Yaya.Cout pour sa part va leur opposer son IA 42_2-5, après nous avoir soumis 1 autre tentative d'IA.
Lorsqu'elle remporte le truel, son IA sait faire preuve de modestie : "I don't have the driving license, btw"
4) Modalités d'évaluation
Go to topAfin d'éliminer tout facteur aléatoire, nous avons fait s'affronter ces 3 IAs lors d'une grande série de truels, très exactement 388'888 truels.
Rappelons le 1000 Bornes est un jeu se jouant à tour de rôle. Pour 3 joueurs, pourront alors jouer dans l'ordre : joueur1, joueur2, joueur3, joueur1, joueur2, joueur3, joueur1, …
Selon la façon dont ont été codées les différentes IAs, certaines positions pourraient être avantagées ou désavantagées (si par exemple dans le cas où plusieurs adversaires sont vulnérables, une IA attaque toujours la position de plus bas numéro).
Pour n'avantager et de désavantager personne, nous changeons l'ordre des adversaires à chaque nouveau truel.
Voici le détail des truels joués par chaque IA dans les différentes positions possibles :
Joueur 1 | Joueur 2 | Joueur 3 | |
SlyVTT | 129'628 | 129'630 | 129'630 |
Afyu | 129'628 | 129'630 | 129'630 |
Yaya.Cout | 129'632 | 129'628 | 129'628 |
5) Vainqueurs et derniers
Go to topIntéressons nous maintenant au classement des IAs, en terme de scores, pour chaque truel.
Voici toutes les fois où chaque IA est dernière d'un truel (pire des 3 scores) en fonction des différentes positions :
Joueur 1 | Joueur 2 | Joueur 3 | TOTAL | |
SlyVTT | 42'091 (32,47%) | 48'295 (37,26%) | 73'286 (56,53%) | 163'672 (42,09%) |
Afyu | 23'829 (18,38%) | 23'383 (18,04%) | 8'258 (6,37%) | 55'470 (14,26%) |
Yaya.Cout | 61'701 (47,60%) | 64'643 (49,87%) | 45'424 (35,04%) | 171'768 (44,17%) |
Voici maintenant toutes les fois où chaque IA est victorieuse d'un truel (meilleur des 3 scores) en fonction des différentes positions :
Joueur 1 | Joueur 2 | Joueur 3 | TOTAL | |
SlyVTT | 27'504 (21,22%) | 24'799 (19,13%) | 13'018 (10,04%) | 65'321 (16,80%) |
Afyu | 68'311 (52,70%) | 69'746 (53,80%) | 94'721 (73,07%) | 112'904 (59,77%) |
Yaya.Cout | 24'651 (19,02%) | 24'187 (18,66%) | 43'232 (33,35%) | 92'070 (23,68%) |
On peut effectivement remarquer de grosses disparités en fonction des positions, Afyu bondissant par exemple de 52-53% à 73% de victoires si son IA joue en position 3 !
Mais la question n'est pas de savoir ce qu'il fait de spécial dans cette configuration (probablement rien vu le cadre imposé par le script réalisant les truels), mais plutôt de savoir ce que les autres IAs ou plutôt l'une d'entre elles ne font pas ou font moins bien dans cette configuration (comme du code non entièrement adapté à ce nouveau format et ne tenant pas compte du joueur3 pour certaines actions : qui est le plus proche de la ligne d'arrivée, qui attaquer, etc.). Si dans ce cas on oublie de tenir compte pour certaines décisions de ce qui semble être l'IA la plus dangereuse, effectivement cela explose son taux de victoires…
6) Scores
Go to topSi le vainqueur de la finale semble certes évident au vu des résultats précédents, reste encore à départager les deux autres qui sont très proches.
Pour cela rappelons que l'objectif n'était pas simplement de gagner, mais de gagner en réalisant le meilleur score possible.
Voici donc les scores cumulés (victoires et défaites confondues) lors des truels, en fonction ici encore des différentes positions de jeu :
Joueur 1 | Joueur 2 | Joueur 3 | TOTAL | |
SlyVTT | 1'020'631'950 | 1'010'858'425 | 936'257'475 | 2'967'747'850 |
Afyu | 1'188'828'550 | 1'190'191'275 | 1'268'778'075 | 3'647'797'900 |
Yaya.Cout | 965'444'275 | 942'549'825 | 1'079'499'375 | 2'987'493'475 |
Décidément, ici encore les deux IAs concernées sont extrêmement proches.
7) Résultats
Go to topPour départager nos 3 candidats, nous faisons appel à notre version modifiée de l'algorithme de la méthode Elo déjà utilisée pour le classement individuel format duels, classant les IAs justement non pas en fonction du résultat binaire victoire/défaite de chaque truel, mais en fonction des scrores atteints en fin de partie.
Il est temps de proclamer les résultats :
Un énorme merci pour votre patience infinie et un grand bravo à tous, vous allez maintenant pouvoir compléter vos choix de lots avant expédition !
Il est temps de proclamer les résultats :
Un énorme merci pour votre patience infinie et un grand bravo à tous, vous allez maintenant pouvoir compléter vos choix de lots avant expédition !
Les résultats des truels peuvent être téléchargés et sont accompagnés du script de classement.
Voici la sortie du script d'évaluation :
- Code: Select all
>python3 ./finale_truel_elo.py findiv1.json findiv2.json findiv5.json findiv10.json findiv20.json findiv50.json findiv100.json findiv200.json findiv500.json findiv1000.json findiv2000.json findiv5000.json findiv10000.json findiv20000.json findiv50000.json findiv100000.json findiv200000.json
Traitement des 388888 truels...
[====================================================================================================] 100%
TOUR1 TOUR2 TOUR3
064814x SlyVTT Afyu Yaya.Cout
1er 016036 (24.74)% 026928 (41.55)% 022118 (34.13)%
dernier 024964 (38.52)% 017719 (27.34)% 022532 (34.76)%
scores 524855550 566602300 543311050
064814x SlyVTT Yaya.Cout Afyu
1er 011468 (17.69)% 003970 (6.13)% 049518 (76.40)%
dernier 017127 (26.42)% 045103 (69.59)% 002872 (4.43)%
scores 495776400 403851500 640704400
064814x Afyu SlyVTT Yaya.Cout
1er 030566 (47.16)% 013371 (20.63)% 021114 (32.58)%
dernier 014846 (22.91)% 027421 (42.31)% 022892 (35.32)%
scores 580178600 509152675 536188325
064814x Afyu Yaya.Cout SlyVTT
1er 037745 (58.24)% 020217 (31.19)% 007068 (10.91)%
dernier 008983 (13.86)% 019540 (30.15)% 036614 (56.49)%
scores 608649950 538698325 473423275
064816x Yaya.Cout SlyVTT Afyu
1er 008416 (12.98)% 011428 (17.63)% 045203 (69.74)%
dernier 038858 (59.95)% 020874 (32.21)% 005386 (8.31)%
scores 449862800 501705750 628073675
064816x Yaya.Cout Afyu SlyVTT
1er 016235 (25.05)% 042818 (66.06)% 005950 (9.18)%
dernier 022843 (35.24)% 005664 (8.74)% 036672 (56.58)%
scores 515581475 623588975 462834200
-------------------------------------------------------------------------------------------
NOM CRITERE TOTAL = TOUR1 + TOUR2 + TOUR3
SlyVTT truels : 388888 = 129628 + 129630 + 129630
Afyu truels : 388888 = 129628 + 129630 + 129630
Yaya.Cout truels : 388888 = 129632 + 129628 + 129628
SlyVTT 1er : 065321 (16.80%) = 027504 (21.22%) + 024799 (19.13%) + 013018 (10.04%)
Afyu 1er : 232778 (59.86%) = 068311 (52.70%) + 069746 (53.80%) + 094721 (73.07%)
Yaya.Cout 1er : 092070 (23.68%) = 024651 (19.02%) + 024187 (18.66%) + 043232 (33.35%)
SlyVTT dernier : 163672 (42.09%) = 042091 (32.47%) + 048295 (37.26%) + 073286 (56.53%)
Afyu dernier : 055470 (14.26%) = 023829 (18.38%) + 023383 (18.04%) + 008258 (6.37%)
Yaya.Cout dernier : 171768 (44.17%) = 061701 (47.60%) + 064643 (49.87%) + 045424 (35.04%)
SlyVTT scores : 2967747850 = 1020631950 + 1010858425 + 936257475
Afyu scores : 3647797900 = 1188828550 + 1190191275 + 1268778075
Yaya.Cout scores : 2987493475 = 965444275 + 942549825 + 1079499375
-------------------------------------------------------------------------------------------
RANG NOM GROUP IA ELO FREQUENCE
1 Afyu br.AI.n all.IA.ge Triteleia 212.213 100.00% top1
2 SlyVTT br.AI.n all.IA.ge SLYnapse_finale 176.714 99.93% top2
3 Yaya.Cout 42_2-5 174.061 99.93% top3