Vous êtes sur la page 1sur 6

Algorithmes pour l’étude des jeux

1 Introduction
Les jeux que nous considérons ont les caractéristiques suivantes :
− Deux joueurs
− Information complète
− 3 états finaux possibles (Gain de l’un, Gain de l’autre, Nulle)
− Sans mémoire (seule la position présente compte)
− Sans hasard
− Décision tour à tour

Jeux de plateaux classiques. Échecs, Dames, Othello, Go, Morpion, Puissance 4

Jeu de Nim. On dispose n bâtonnets. Chacun à son tour, chaque joueur décide d’en
prendre 1, 2 ou 3. Celui qui prend le dernier perd.

Une variante : le jeu de Marienbad. On dispose 16 bâtonnets sur 4 lignes : 1 sur


la 1ère ; 3 sur la 2ème ; 5 sur la 3ème et 7 sur la 4ème. Chacun à son tour, chaque joueur
décide de prendre autant de bâtonnets qu’il le souhaite sur la ligne de son choix. Celui qui
prend le dernier perd (ou gagne, selon la règle)

Jeu de Chomp. On démarre avec un rectangle de taille n × m. Chacun à son tour,


chaque joueur choisit un carreau ; ce carreau et tous ceux qui sont en dessous et/où à
droite sont éliminés. Le joueur qui doit prendre le carreau dans le coin supérieur gauche
perd.

Jeu de Wythoff. On place une dame sur un échiquier. Chacun à son tour, chaque joueur
la déplace vers le bas/la gauche/la diagonale bas-gauche d’autant de cases qu’il le souhaite.
Le joueur qui amène la dame sur la base dans le coin inférieur gauche gagne.

1
2 Définitions
Définition 2.1 (Bipartition d’un graphe)
Une bipartition d’un graphe G est la donnée d’une partition S = S0 ∪ S1 des sommets, de
sorte que toute arête a ∈ A a l’une de ses extrémités dans S0 et l’autre dans S1 .

Définition 2.2 (Graphe de jeu)


Un graphe de jeu à deux joueurs (ou arène) est la donnée d’un graphe orienté fini et d’une
bipartition des sommets.
En notant S = S0 ∪ S1 cette bipartition, on dit que les sommets de Si sont contrôlés par
le joueur i.

Remarque 2.3
En pratique, les graphes considérés seront aussi acycliques. Cette hypothèse sera implicite
dans la suite.

Définition 2.4 (Partie)


Une partie (dans un graphe de jeu à deux joueurs) est un chemin s0 , s1 , . . . , sn sur le graphe,
tel que sn est un état final (= sans successeur).

Définition 2.5 (Jeu d’accessibilité)


On parle de jeu d’accessibilité quand à chaque état final on associe l’un des 3 résultats
suivants : Gain de J0 , Gain de J1 ou Match Nul.
Dans un jeu d’accessibilité, le résultat de la partie est celui du dernier état de la partie.

Remarque 2.6
Ainsi, les jeux d’accessibilité sont sans mémoire. L’état final de la partie suffit à en déter-
miner l’issue.

Définition 2.7 (Stratégie)


Soit i ∈ {0, 1}. Une stratégie de Ji est la donnée d’une partie Si∗ ⊂ Si et d’une fonction
fi : Si∗ → S1−i telle que, pour tout s ∈ Si∗ , s, f (s) est une arête.

Remarque 2.8
Le joueur Ji décide donc de ce qu’il va jouer s’il se retrouve dans un état de Si∗ . Il peut
sembler plus naturel de définir f sur Si (privé des états terminaux) ; dans ce cas, on choisit
un successeur quelconque aux sommets de Si \ Si∗ .

Définition 2.9 (Stratégie gagnante)


Une stratégie (Si∗ , fi ) de Ji est gagnante depuis une position s ∈ S si, pour toute partie
s0 , . . . , sn , avec s = s0 et telle que pour tout sommet sk dans Si∗ , sk+1 = fi (sk ), alors Ji
gagne la partie.

2
Remarque 2.10
Autrement dit, une stratégie est gagnante (depuis une position s) si le joueur qui la suit
gagne toujours ses parties, quelles que soient les coups joués par son adversaire. On re-
marque que sur un sommet de Si \ Si∗ , Ji peut jouer un coup quelconque.

Définition 2.11 (État gagnant)


Un état s est gagnant pour le joueur Ji s’il existe une stratégie pour Ji qui est gagnante
depuis cette position.

Remarque 2.12
On pourrait généraliser et considérer des stratégies du joueur Ji depuis une position s, lui
assurant au moins un Match Nul.

Jeu de Nim à 8 bâtonnets. On peut représenter ce jeu par un graphe à 16 sommets,


numérotés (i, k) avec i ∈ {0, 1} et k ∈ J1, 8K. Le sommet (i, k) correspond à la position où
il reste k bâtonnets et que c’est à Ji de jouer.
Une arête relie (i, k) et (j, ℓ) si, et seulement si i = 1 − j et |k − ℓ| ∈ {1, 2, 3}.
On montre qu’une stratégie consiste (quand c’est possible) à laisser toujours à son adver-
saire un nombre de bâtonnets congru à 1 modulo 4. Une stratégie de J0 consiste donc à
poser S0∗ = {2, 3, 4, 6, 7, 8} et à définir f0 par

(0, 2), (0, 3), (0, 4) 7→ (1, 1) et (0, 6), (0, 7), (0, 8) 7→ (1, 5)

et de même pour J1 . Les positions (0, 2), (0, 3), (0, 4), (0, 6), (0, 7), (0, 8) et (1, 1), (1, 5) sont
les positions gagnantes pour J0 .

3 Calcul des positions et stratégies gagnantes


Notation 3.1
Pour i ∈ {0, 1}, on note Fi l’ensemble des états finaux gagnants pour Ji .

Notation 3.2
Si X ⊂ S, on définit

Ai (x) = {s ∈ Si | ∃t ∈ X : (s, t) arête} ∪ {s ∈ S1−i | ∀(s, t) arête, t ∈ X}.

Remarque 3.3
Ainsi, Ai (X) ∩ Si est l’ensemble des états contrôlés par le joueur Ji , pour lesquels il peut
décider d’aller dans X ; Ai (x) ∩ S1−i est l’ensemble des états contrôlés par l’adversaire du
joueur Ji , à partir desquels son adversaire est forcé d’aller dans X.

3
Notation 3.4
On définit la suite Attrk (Ji ) k∈N par Attr0 (Ji ) = Fi et


∀k ∈ N, Attrk+1 (Ji ) = Attrk (Ji ) ∪ Ai (Attrk (Ji )).

C’est une suite croissante (pour l’inclusion) dans l’ensemble ordonné fini P(S) ; elle est
donc stationnaire. On note Wi son ensemble limite.

Théorème 3.5
L’ensemble limite Wi est l’ensemble des positions gagnantes pour le joueur Ji .

Démonstration. (Idée) Pour montrer que les états de Wi sont des positions gagnantes pour
Ji , il faut définir la stratégie de Ji . On définit Si∗ comme Wi ∩ Si \ Fi . Par définition, un état
s ∈ Si∗ est dans un certain Attrk (Ji ) (avec k ≥ 1) et il existe t ∈ Attrk−1 (Ji ) tel que (s, t)
est une arête. La fonction fi de stratégie est définie en associant un tel t à s. On montre
alors par récurrence sur k que tout état dans Attrk (Ji ) est une position gagnante pour Ji ,
pour la stratégie qu’on a décrite.
Réciproquement, les longueurs des parties démarrant en un sommet s sont majorées (dans
l’hypothèse d’acyclicité) par un certain entier N (s). On raisonne ensuite par récurrence sur
k, pour montrer que si s est une position gagnante pour le joueur Ji , telle que N (s) ≤ k,
alors s ∈ Wi .

Exercice 3.6
On joue au jeu de Wythoff sur un échiquier 8 × 8.
Représenter les positions perdantes pour le joueur qui doit jouer.

Remarque 3.7
Comme les jeux de Nim, le jeu de Wythoff est impartial : il existe une copie de chaque
position , l’une contrôlée par le joueur J0 et l’autre par le joueur J1 . Dans ces jeux, il peut
être intéressant de fusionner ces deux copies et de parler d’état gagnant/perdant pour le
joueur qui va jouer.

4 Algorithme du min-max
Si l’arène du jeu a n états, le calcul de Wi par l’algorithme précédent fonctionne en
complexité O(n3 ) ; il devient vite impossible de procéder de façon exacte. Pour pallier ce
problème, on utilise l’algorithme du min-max. Le principe est le suivant :
− En utilisant une heuristique, on évalue chaque état : l’évaluation sera d’autant plus
grande qu’on pense que la position est gagnante pour le joueur J0 (par convention).
− En parcourant le jeu jusqu’à une certaine profondeur k (fixée), on réévalue la position
en faisant remonter les évaluations des positions futures.

4
Remarques 4.1
− L’évaluation des états finaux est exacte. On leur associe la valeur +∞ si l’état est
gagnant pour J0 , −∞ s’il est gagnant pour J1 et 0 si la partie est nulle.
− Avec une profondeur infinie, l’algorithme évalue chaque position à ±∞ ou 0 ; cela
revient à calculer les attracteurs W0 et W1 .

Exemple 4.2
On considère la situation suivante.

Les carrés gris sont les sommets contrôlés par J0 ; les disques bleus ceux contrôlés par
J1 . Les deux joueurs ont 3 coups disponibles ; on réévalue les positions à une profondeur
2, les évaluations des Ck étant déterminées par l’heuristique.
Pour choisir son coup, A doit prendre le maximum entre les évaluations de B1 , B2 et B3 .
Or, en B1 , le joueur 1 va jouer le coup qui minimise l’évaluation (ici C3 ) ; en B2 , il joue
C4 ; en B3 , il joue C8 . Ainsi, B1 , B2 et B3 sont réévalués à 3, 5 et 2 ; et donc A est réévalué
à 5.

Implémentation. On utilise deux fonctions, qui s’appellent l’une l’autre de façon récur-
sive. On note h l’heuristique utilisée.
La fonction minimax sera utilisée pour les états contrôlés par J1 (on prend le minimum
des sucesseurs) ; maximum pour les états contrôlés par J0 .
d e f minimax ( s , k ) :
i f k == 0 or s u c c e s s e u r s [ s ] = [ ] :
return h( s )
min = f l o a t ( " i n f " )
f o r t in s u c c e s s e u r s ( s ) :
m = maximin ( t , k−1)
i f m < min :
min = m
r e t u r n min

5
d e f maximin ( s , k ) :
i f k == 0 or s u c c e s s e u r s [ s ] = [ ] :
return h( s )
max = −f l o a t ( " i n f " )
f o r t in s u c c e s s e u r s ( s ) :
M = maximin ( t , k−1)
i f M > max:
max = M
r e t u r n max

Remarque 4.3
On peut optimiser ces calculs en remarquant que certaines branches n’ont pas à être cal-
culées. Considérons la situation suivante :

Pour calculer la réévaluation du sommet principal A (contrôlé par J0 ), on doit calculer


les réévaluations des successeurs (représentés par des ronds). On suppose qu’on a calculé
les réévaluations des deux premiers successeurs B1 et B2 : on a trouvé 4 et 5. Puis on
commence à calculer la réévaluation du dernier successeur B3 ; pour cela, on doit chercher
le minimum de ses successeurs notés C7 , C8 et C9 . Si la réévaluation de C7 donne 1, on
sait que la réévaluation de B3 sera au maximum de 1 ; ce qu’elle vaut vraiment n’a pas
d’importance, son évaluation ne pourra pas modifier la réévaluation 5 du sommet principal
A.
Donc, on élague : on ne calcule pas les évaluations de C8 et C9 .

Vous aimerez peut-être aussi