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θ11θi,1θ1iθn,1θn,αn
J1joue
J2joue
Fig. 1 – Scema 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[1i]Φ(θ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 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%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !