Projet d’Informatique
Algorithme MinMax en th´eorie des jeux
4 septembre 2008
1 La strat´egie du MinMax
1.1 Contexte g´en´eral
Ce projet se propose de se familiariser avec un algorithme classique d’in-
telligence artificielle appel´e algorithme MinMax. Cet algorithme est utilis´e
pour les jeux `a deux joueurs, d´ecrit en th´eorie des jeux comme ´etant `a in-
formation compl`ete et `a somme nulle. C’est le cas notamment des ´echecs,
des dames, de l’othello, du puissance 4, et en r`egle g´en´erale de beaucoup de
jeu de plateau `a deux joueurs.
→Recherche Bibliographique : Qu’est ce qu’un jeu `a information
compl`ete ? A somme nulle ? Trouver des exemples de jeux ne satisfaisant pas
ces crit`eres. Quelles peuvent ˆetre les m´ethodes utilis´ees pour faire jouer un
ordinateur `a de tels jeux ?
1.2 Id´ee g´en´erale de l’algorithme MinMax
1.2.1 Notations
On notera dans toute la suite J1et J2les deux joueurs, et l’id´ee de
l’algorithme est ici ´enonc´ee ind´ependemment du type de jeu pourvu que
chaque joueur n’ait, `a chaque tour, qu’un nombre fini de coups possibles.
On appelle configuration et on notera θune description compl`ete de l’´etat
de la partie `a un instant donn´e : situation du jeu, mais aussi qui doit jouer,
et eventuellement comment (temps imparti, historique des coups, ...).
θd´epend bien ´evidemment du type de jeu :
– Pour un morpion, c’est simplement l’´etat de la grille (croix et ronds
d´ej`a jou´es) ainsi que l’information “C’est `a J1/2de jouer”
– Pour un jeu d’´echec, ce sera la position de toutes les pi`eces sur l’´ech´equier,
l’information “C’est `a J1/2de jouer”, mais aussi un historique des posi-
tions pour ´eviter les situations sans issues, et ´eventuellement le temps
de jeu restant par joueur (en cas de partie chronom´etr´ee).
1
On suppose ´egalement que l’on dispose d’une fonction d’´evaluation Φ qui
associe `a toute configuration θune valeur num´erique r´eelle. Φ(θ) quantifie la
certitude de gagner, ´etant donner l’´etat θde la partie : plus la valeur rendue
par Φ est grande, plus la situation θest favorable. Le but de toute partie
est donc, pour un joueur, de maximiser sa propre fonction d’´evaluation et
de minimiser celle de l’autre. D’o`u l’id´ee et le nom de l’algorithme MinMax.
1.2.2 Coeur de l’algorithme
Supposons que le jeu soit dans la situation θ, et que J1ait `a jouer un
coup parmi ncoups possibles pour amener le jeu dans une nouvelle situation
θiavec i∈[1, .., n], comme expliqu´e sur la figure 1. Si J1joue un coup qui
θ
θ1θiθn
θ1,1θ1,α1θi,1θ1,αiθn,1θn,αn
J1joue
J2joue
Fig. 1 – Sch´ema conceptuel du MinMax, expliqu´e pour un seul niveau d’ana-
lyse (i.e sur deux coups)
le m`ene dans la situation particuli`ere θi, alors J2, s’il joue intelligement, va
chercher `a minimiser la fonction d’´evaluation de J1au coup suivant, c’est
`a dire qu’il cherchera, parmi les αicoups `a jouer `a partir de θi, `a choisir
θi,j telle que Φ(θi,j) soit minimale. J1`a donc interˆet `a choisir le coup qui va
maximiser ce minimum, et donc de jouer la situation θitelle que :
Φ(θi) = max
i∈[1,n]min
j∈[1,αi]Φ(θi,j) (1)
1.3 Recursivit´e
Ce que nous venons de d´ecrire sur un niveau d’analyse (2 coups), peut
ˆetre appliqu´e de fa¸con r´ecursive sur plusieurs niveaux. En effet, comme le
montre la figure 1 le d´eroulement d’une partie peut ˆetre vu comme un arbre :
– La racine (le sommet de l’arbre) correspond `a l’´etat initial du jeu.
– Les noeuds `a profondeurs paire correspondent aux noeuds o`u J1doit
jouer, alors que c’est `a J2de jouer aux noeuds de profondeurs impaires.
2
– Chaque arc correspond `a un coup jou´e et associe un ´etat du jeu `a la
profondeur
– Aux feuilles, tout en bas de l’arbre, se trouvent les fins de parties.
– Un chemin complet, allant de la racine `a une feuille, d´ecrit une partie
possible
On a peut alors ´etendre l’algorithme, not´e F, en le faisant calculer le
meilleur coup `a jouer sur nniveaux, de la fa¸con suivante :
F(θ) =
Φ(θ) si θest une feuille de l’arbre
maxi∈[1,n]F(θi) si θest un noeud joueur avec fils θ1,..,n
mini∈[1,n]F(θi) si θest un noeud opposant avec fils θ1,..,n
(2)
La r´ecurrence peut ˆetre stopp´ee au bout de nniveaux, afin de jouer le
coup qui, apr`es avoir analys´e tous les coups possibles dans une profondeur
2n(car un niveau d’analyse est toujours un coup du joueur J1et la r´eponse
de J2), va ˆetre le plus favorable.
2 Application au jeu de Nim
2.1 Principe du jeu de Nim
Le jeu de Nim (aussi appel´e jeu des allumettes), est un jeu o`u sont
dispos´ees sur le plateau Nallumettes, par groupe de k. Chaque joueur peut
prendre autant d’allumettes qu’il le souhaite dans un groupe, puis c’est `a
l’autre de jouer. Le joueur qui prend la derni`ere allumette `a gagn´e.
Fig. 2 – Exemple de jeu de Nim avec 20 allumettes, r´eparties en 4 tas de 5
2.2 Exemple pratique
Sans rien coder, juste au papier et au stylo, vous r´efl´echirez aux principe
du MinMax r´ecursif dans le cadre du jeu de Nim, comme d´etaill´e sur la figure
3. Quelle est la fonction d’´evaluation Φ pour un tel jeu ? Vous construirez,
sur une feuille, un exemple de partie en d´eveloppant l’arbre de tous les coups
possibles et en indiquant la valeur de Φ en chaque noeud pour un d´epart avec
deux tas de 3 et 2 allumettes. Il est important de bien comprendre comment
l’algorithme op`ere avant d’aller plus loin, n’h´esitez pas `a me contacter si
vous avez des questions.
3
Fig. 3 – Exemple de l’algorithme du MinMax appliqu´e au jeu de nim dans
une situation avec 2 tas comportant respectivement 2 et 1 allumettes. On
a l’arbre des coups ainsi que la valeur de Φ pour chaque configuration.
L’algorithme est d´eroul´e sur 2 niveaux d’analyses (4 coups), et l’on constate
que le coup `a jouer, pour le joueur 1, est de ne prendre qu’une allumette
pour laisser deux tas de deux.
2.3 Travail demand´e
Vous fournirez un code ***comment´e*** (en Cou autre) permettant,
avec une interface graphique basique en mode console, de jouer au jeu de
Nim `a deux ou seul contre l’ordinateur. Les contraintes `a respecter sont les
suivantes :
→Le choix du nombre d’allumette et de groupes devra ˆetre configurable.
Par d´efaut, on restera sur la version de la Figure 2 (4 groupes de 5),
→On devra pouvoir choisir le type de jeu voulu (jeu `a 2 ou jeu seul
contre l’ordinateur).
→On devra pouvoir choisir quel joueur va commencer la partie, J1ou
J2
→Contre l’ordinateur, on envisagera plusieurs niveaux de difficult´es :
Al´eatoire L’ordinateur joue au hasard
Facile MinMax sur un niveau
Moyen MinMax sur cinq niveaux
Difficile MinMax sur dix niveaux
Imbattable ? (facultatif, voir derni`ere section)
2.4 Quelques pistes pour le code
Les indications donn´ees ici ne sont l`a qu’`a titre informatif et il n’est donc
pas obligatoire de les suivre au pieds de la lettre. R´efl´echissez juste bien `a
votre code avant de vous lancer, et aux diff´erentes fonctions qui vont ˆetre
4
n´ecessaires. Vous pouvez commencer par coder d’abord le jeu dans sa ver-
sion 2 joueurs humains, utilisant a priori des fonctions telles que :
–config partie() →affiche un menu permettant de selectionner le
nombre de groupe et d’allumettes
–affiche plateau(θ)→affiche la configuration θdu jeu sur la console
–coups possibles(θ)→retourne, pour une configuration θ, tous les
coups jouables possibles. Si un joueur veut jouer un coup qui n’est pas
dans cette liste, le coup doit ˆetre interdit.
–joue coup(θ,humain)→joue un coup possible dans la configuration
θ, avec un bool´een humain d´efinissant si le coup est jou´e par un hu-
main (auquel cas on doit pr´evoir une m´ethode de saisie du coup), ou
par l’ordinateur (via MinMax).
Pour ce qui est de la partie intelligence artificielle, via le MinMax, vous
aurez besoin de fonctions telles que :
–config level() →affiche un menu pour choisir le niveau de l’IA.
–eval coup(θ)→´evalue la valeur de Φ pour une configuration. (On
supposera que Φ est `a valeur dans [0,1], rendant 0 pour un d´efaite et
1 pour une victoire).
–minmax(θ)→calcule le coup `a jouer par minmax pour un seul niveau
d’analyse (2 coups).
–minmax n(θ,n) calcule le coup `a jouer par minmax pour une anaylse
sur 2ncoups.
3 Pour aller plus loin
Dans cette section, vous trouverez diff´erentes pistes pour continuer le
projet. Vous pouvez les explorer dans l’ordre que vous voulez, en fonction
du temps que vous voulez leur accorder. Toutes font appel `a des recherches
actives de votre part, mais je reste disponible pour toutes vos questions. L’al-
gorithme MinMax, de par sa construction, est donc un algorithme exhaustif
qui construit l’arbre de toutes les configurations du jeu (pour une profondeur
d’analyse fix´ee) et choisit, a chaque coup, celui qui va minimiser les chances
de gagner de l’adversaire. N´eanmoins, la construction d’un tel arbre n’est
pas possible dans tous les cas car lorsque trop de branches sont possibles, les
temps de calculs deviennent prohibitifs ! Pour s’en convaincre, vous pouvez
tester la r´eactivit´e de votre programme quand le nombre d’allumette devient
grand et/ou que la profondeur de l’analyse du MinMax augmente.
→Recherche Bibliographique : Quelles sont les strat´egies envisag´ees
pour faire face `a ce probl`eme ? Expliquer moi rapidement les intˆerets de
5
1 / 6 100%