Mine de rien j’ai pas mal de chose à dire, alors comme ça risque d’être un petit peu long, pour plus de clarté je divise le post en 3 chapitres : Algo génétique pour build order, Concours d’IA pour Starcraft 1 et Appel à participation (à ne pas rater).
Algorithme génétique pour build order
StarCraft est bourré de termes techniques, et comme je pense que la plupart d’entre vous ne les connaissent pas, je vais les définir au fur et à mesure. Alors, c’est quoi un build order (BO) ? Comme son nom l’indique, c’est une séquence ordonnée de constructions. Rappelez-vous, j’en parle dans le billet précédent : un BO est une séquence d’ouverture dans StarCraft, c’est-à-dire les actions à faire en début de parties afin de pouvoir appliquer le plus rapidement possible la ou les stratégies choisies (je rappelle que SC est un jeu temps réel : être plus rapide que son adversaire est la clé de la victoire).
L’un des lecteurs de ce blog (JIM pour ne pas le nommer), également joueur de SC1 et 2, m’avait envoyé le lien d’un billet très intéressant sur un programme optimisant le BO de la race Zerg (l’une des trois races disponibles) en utilisant un algorithme génétique. En gros un algo génétique, c’est un algorithme d’optimisation qui va reproduire le schéma de sélection naturel. Pour cela, vous prenez une population d’individus (ici des BO satisfaisant le but à atteindre, à savoir une certaine stratégie donnée). Chaque individu est par nature plus ou moins fort (plus un BO se termine tôt, plus il est « fort »), cette force innée étant caractérisée par des propriétés génétiques (la séquence d’actions du BO). On garde les individus les plus forts et qui satisfont le but à atteindre, puis on renouvelle avec eux la population par croisements génétiques (la reproduction) où intervient parfois une modification aléatoire (mutation génétique). On répète l’opération (sélection, croisements, mutations) un certain nombre de fois, et on peut espérer arriver au bout d’un temps t à un super poulain pure race.
Pour info, c’est cet algo génétique qui a découvert le BO optimal pour la stratégie 7-Roaches sur SC2 (je vais pas rentrer dans les détails), l’une des stratégie les plus redoutable lorsque l’on joue Zerg. Et le BO trouvé par cet algo demande d’appliquer des séquences d’actions contre-intuitives (comme produire 2 overlords de suite), qui sont reconnue être en général sous-optimales. Bref, pas sûr qu’un être humain aurait trouvé ce BO par lui-même, ou alors il aurait fallu une bonne dose d’intuition et de créativité.
J’ai moi-même lancé cet algo sur mon PC. C’est un programme en java pas rapide (pléonasme) mais efficace qui a mis 1h30 à trouver le BO optimal 7-Roaches (et même une seconde plus optimal que le BO connu) en testant près de 3 millions de BO différents (555 BO par seconde) sur un dual core 2,66Gh avec 3Go de ram. Pour les curieux, le BO est le suivant :
@0:00 M:50 G:0 L:3 S:6/10 BuildDrone
@0:13 M:51 G:0 L:2 S:7/10 BuildDrone
@0:15 Spawned: Larva+1
@0:17 Spawned: Drone+1
@0:24 M:52 G:0 L:2 S:8/10 BuildDrone
@0:30 Spawned: Drone+1
@0:30 Spawned: Larva+1
@0:34 M:54 G:0 L:2 S:9/10 BuildDrone
@0:41 Spawned: Drone+1
@0:45 Spawned: Larva+1
@0:51 Spawned: Drone+1
@1:00 Spawned: Larva+1
@1:05 M:204 G:0 L:3 S:10/10 BuildSpawningPool
@1:13 M:55 G:0 L:3 S:9/10 BuildDrone
@1:28 Spawned: Larva+1
@1:28 M:100 G:0 L:3 S:10/10 BuildOverlord
@1:30 Spawned: Drone+1
@1:43 Spawned: Larva+1
@1:43 M:105 G:0 L:3 S:10/10 BuildOverlord
@1:46 M:26 G:0 L:2 S:10/10 BuildExtractor
@1:53 Spawned: Overlord+1
@1:54 M:52 G:0 L:2 S:9/18 BuildDrone
@1:58 Spawned: Larva+1
@2:08 Spawned: Overlord+1
@2:10 Spawned: Spawning Pool+1
@2:11 Spawned: Drone+1
@2:13 Spawned: Larva+1
@2:16 Spawned: Extractor+1
@2:17 M:152 G:0 L:3 S:10/26 BuildRoachWarren
@2:17 M:2 G:0 L:3 S:9/26 MineGas
@2:17 M:2 G:0 L:3 S:9/26 MineGas
@2:19 Mining: +1 on gas
@2:19 Mining: +1 on gas
@2:27 M:51 G:12 L:3 S:9/26 BuildDrone
@2:42 Spawned: Larva+1
@2:44 Spawned: Drone+1
@3:12 Spawned: Roach Warren+1
@3:12 M:241 G:75 L:3 S:10/26 BuildRoach
@3:12 M:166 G:50 L:2 S:12/26 BuildRoach
@3:12 M:91 G:25 L:1 S:14/26 MineGas
@3:12 M:91 G:25 L:1 S:14/26 BuildRoach
@3:14 Mining: +1 on gas
@3:27 Spawned: Larva+1
@3:27 M:91 G:28 L:1 S:16/26 BuildRoach
@3:39 Spawned: Roach+1
@3:39 Spawned: Roach+1
@3:39 Spawned: Roach+1
@3:42 Spawned: Larva+1
@3:42 M:90 G:32 L:1 S:18/26 BuildRoach
@3:54 Spawned: Roach+1
@3:57 Spawned: Larva+1
@3:57 M:89 G:35 L:1 S:20/26 BuildRoach
@4:09 Spawned: Roach+1
@4:12 Spawned: Larva+1
@4:12 M:88 G:39 L:1 S:22/26 BuildRoach
@4:24 Spawned: Roach+1
@4:27 Spawned: Larva+1
@4:39 Spawned: Roach+1
Satisfied.
Number of actions in build order: 32
—Final Output—
At time: 4:39
Minerals: 147 Gas: 65 Supply: 24/26
Drones: 10
Overlords: 3
Roaches: 7
Hatcheries: 1
Gas Extractors: 1
Spawning Pools: 1
Roach Warrens: 1
Concours d’IA pour Starcraft 1
À la mi-novembre de cette année était organisé un concours d’IA de StarCraft 1, à l’Université de Santa Cruz, Californie, lors de la conférence Artificial Intelligence and Interactive Digital Entertainment (AIIDE 2010). La page du concours est ici. Ce concours ouvert à tout le monde proposait 4 types de tournois : deux de micro-gestion, un de matchs à actions limitées et enfin un tournoi de matchs classiques, ce dernier étant bien entendu le plus intéressant car le plus complet et complexe. Les IA étaient tous différents, certains se focalisant sur la même stratégie (très mauvaise idée, et pourtant…), d’autres cherchant à s’adapter en fonction de la situation à travers de l’analyse et de l’apprentissage automatique. Le vainqueur du tournois est l’IA nommée « Overmind » de l’Université de Berkeley (même si le concours est ouvert à tous, c’est a priori les universitaires travaillant dans l’IA qui sont les mieux placés pour le remporter). Mais franchement, je trouve qu’ils ne méritait pas de gagner. Il y a un gros travail dessus, là c’est clair : il s’agit toute de même d’un projet de 10 personnes, plus un chef de projet épaulé par deux chefs adjoints. Mais leur IA a remporté tous ses matchs en appliquant la même technique qu’aucune IA n’a su contrer (harass mutalisks puis mass muta), sauf lors d’un match qu’il a perdu dû à une close position de son adversaire qui lui a rasé sa base par un run-by zealots avant qu’Overmind n’ait eu le temps de faire sa spire. Bref, rien de bien excitant au final. En plus, leur projet est complètement fermé : pas de code source disponible, ce qui je trouve est un comble pour ce genre de compétition, le but premier étant quand même de faire avancer la recherche en appliquant des résultats d’IA sur un « environnement commercial robuste » qu’offre StarCraft (pour reprendre les termes de la conf.) Pas d’articles ni de pre-print (pré-article si vous préférez) pour exposer à la communauté de chercheurs comment ils ont procédé et choisi les diverses facettes de leur IA. J’ai écris au chef du projet pour lui demandé s’il avait des pre-prints à m’envoyer ; je n’ai reçu aucune réponse. Tout ça sent à plein nez la licence propriétaire pour leur programme. Ils espèrent quoi ? Vendre leur IA à Blizzard ?
Franchement, on peut mieux faire. Et comme disait un autre lecteur de ce blog qui se reconnaitra, « si on peut, on doit ».
Appel à participation
L’année prochaine, la conf AIIDE 2011 sera organisée à l’Université d’Alberta au Canada, et inclura une nouvelle édition du concours d’IA pour SC 1. Je suis sans doute un peu fêlé de m’intéresser de si près à ce concours (celui de type 4, le plus complet) alors que j’ai déjà assez peu de temps libre, mais je me sens vraiment motivé. Question : il y a t-il quelques autres fêlés qui voudraient se lancer dans l’aventure ? On a un an pour faire une « kick-ass AI ».
J’ai quelques idées, notamment pour injecter de l’optimisation à travers des méthodes de recherche locale stochastiques (c’est-à-dire aléatoires), ce sur quoi je travaille. D’où mon projet Aiur (Artificial Intelligence Using Randomness). Avec un nom comme ça, je pense que la race choisie sera Protoss. ^^
Si comme moi vous sentez que ce projet vous enflamme, écrivez-moi un mail (plutôt qu’un commentaire sur ce billet) à l’adresse suivante : florian.richoux_arobase_gmail.com (en remplaçant bien sûr _arobase_ par le fameux symbole). Le projet est ouvert à tout le monde. Si jamais je ne vous connais pas, merci de me préciser en quelques mots vos compétences en IA théorique et/ou en algorithmique et/ou en programmation C++ (car oui, ça sera en C++). Je me réserve tout de fois le droit de rejeter une candidature si j’estime que vous n’avez pas le profil (mais j’accepte tous mes potes, car ça peut être délire de faire ça tous ensemble).
Que l’on soit bien d’accords, j’ai quelques idées de comment faire (et j’ai un plan de bataille pour l’organisation, en fait tout est déjà prêt), mais il reste quasiment tout à définir. Toutes idées sont les bienvenues, alors j’espère vous voir nombreux à répondre à cet appel ! (NB : je suis sur Kyoto aujourd’hui et demain, mais pas d’affolement je répondrai aux mails à partir de mercredi)
Commentaires récents