IA de jeux, Introduction

Voir aussi : video youtube - video peertube - code source

Cet article est le premier d’une série consacrée à l’implémentation d’un jeu de Puissance 4 et de quelques Intelligences Artificielles. L’objectif est à la fois d’aborder le domaine des IA de jeux, mais également de voir comment les implémenter relativement efficacement, en C++ et en Haskell.

Articles de la séries IA de jeux :

IA de jeux

Le domaine des jeux est intéressant pour étudier et développer certains algorithmes d’intelligence artificielle. En effet, un jeu peut être vu comme un environnement bien défini et contrôlé. Par exemple, le jeu de Go a permis de faire évoluer les algorithmes d’apprentissage par renforcement et réseau de neurones profond, notamment grâce au programme AlphaGo de DeepMind.

Jeu et IA abordés ici

Dans cette série d’articles, on s’intéressera à un jeu beaucoup plus simple : Puissance 4. Il s’agit d’un jeu en tour à tour où chacun des 2 joueurs essaie d’aligner 4 pions de sa couleur, dans un plateau vertical (exemple de jeu en ligne : Connect 4 - CBC Kids).

Au niveau des IA, on considéra des algorithmes simples (random, Monte-Carlo) et un algorithme à base d’arbre de recherche (Monte-Carlo Tree Search).

Applications à implémenter

A partir de ces jeu et IA, on implémentera plusieurs applications. Tout d’abord, une interface texte permettra à un utilisateur de jouer au Puissance 4 contre une IA.

$ ./cli.out 

0123456
.......
.......
.......
.......
.......
.......
moves: 0 1 2 3 4 5 6
status: PlayR

j ? 2

0123456
.......
.......
.......
.......
.......
..RY...
moves: 0 1 2 3 4 5 6
status: PlayR

j ? 

Une autre application permettra de comparer deux IA, notamment en faisant varier un paramètre de réglage.

$ ./cmp2.out 
McX-Random-full
MctsX-Random-full
McX-Random
MctsX-Random
McX-Mc128
MctsX-Mcts512
McX-Mcts512
MctsX-Mc128
McX-MctsX

Ce programme de comparaison génèrera des tableaux de résultats, qu’on utilisera ensuite pour générer des graphiques.

$ ../scripts/plot.sh 
plotting ./out-test1-MctsX-Random-full
plotting ./out-test1-MctsX-Mcts512
plotting ./out-test2-McX-MctsX
plotting ./out-test1-McX-Mcts512
plotting ./out-test1-McX-Random-full
plotting ./out-test1-McX-Mc128
plotting ./out-test1-MctsX-Mc128
plotting ./out-test1-MctsX-Random
plotting ./out-test1-McX-Random

Par exemple, le graphique suivant illustre les résultats, au Puissance 4, de l’IA MCTS (dont on fait varier le nombre de simulations totales) à l’IA MC (fixée à 128 simulations par coup possible).

Rouge: MctsX gagne. Jaune: Mc128 gagne. Bleu: égalité.

Organisation de cette série d’articles

Les articles suivants traiteront des sujets suivants :

d’abord en C++, puis en Haskell. Enfin, un bilan sera fait dans un dernier article.