2
Rappel : A*
8
2 3
4
1 6 4
État initial 7 5
7 6 5
Fonction de transition
(successeurs) 2
1
8
6
3
4
Nord
2
1
8 3
4 ...
Est
7 5 Sud 7 6 5
Fonction de but 2 8 3
(configuration finale)
... Ouest 1
7
4
6 5
3
Exploration en situation d’adversité : les
jeux
Un environnement multiagents.
Chaque agent doit tenir compte des actions des autres
agents.
L’imprévisibilité des autres agents crée des
contingences dans la résolution du problème.
Résolution dans un environnement concurrentiel : les
buts des agents sont en conflit (si l’un gagne l’autre perd
!).
4
Essayons A* pour les jeux d’échec
quand même …
Comment définir un état du jeu d’échec ?
Comment définir un état but ?
Quelle est la fonction de transition en présence d’adversité ?
L’adversaire peut modifier l’arbre d’exploration en cours.
Et même si nous le faisions :
Le jeu d’échec a un facteur de branchement 35
Une partie compte souvent jusqu’à 50 coups par joueur
L’arbre d’exploration du jeu d’échec compte 35100 nœuds
5
Programmation de jeux VS Résolution
de problèmes
Prendre en compte l’imprévisibilité de l’adversaire.
Les jeux, comme les problèmes du monde réel
nécessitent une prise de décision rapide même si le
calcul de la solution optimale est impossible.
Plusieurs acteurs qui modifient l’environnement (les
configurations/états du jeu).
Un algorithme tel que A* s’avère complètement
inefficace.
6
Solutions étudiées
8
Cadre du cours
Un jeu est dit à somme nulle si la somme des valeurs de la fonction d’utilité obtenues pour
tous les joueurs en fin de partie est toujours la même pour toute instance du jeu.
En jeu d’échec par exemple, si un joueur gagne, l’autre perd nécessairement : c’est pour
cet antagonisme entre les fonctions d’utilité qu’on parle de situation d’adversité, ce jeu
est à somme nulle :
Victoire : 1
Défaite : 0
Match nul :
« Jeu à somme constante » serait plus approprié, mais il parait que le terme « jeu à
somme nulle » a été retenue si on imagine que chaque joueur verse un droit d’entrée de .
11
Objectifs du cours (pour des jeux à tour
de rôle)
Jeux à somme nulle, à information parfaite et
déterministes :
L’algorithme MiniMAX
L’élagage -
Jeux non déterministes
Jeux à information imparfaite en temps réel
Conclusion
12
Jeux à deux joueurs
A chaque tour, choisir l’action menant à l’état qui a une meilleure valeur minimax
(selon le jeu de l’adversaire).
Exemple d’un arbre de jeu de morpion à deux demi-coups : un pour chacun (un tour)
MAX 3 A
Nœuds Max
a1 a2 a3
Nœuds Min
B C D
MIN 3 2 2
b1 c1 c3 d1
b2 b3 c2 d3
d2
3 12 8 2 4 6 14 5 2
17
Principe de l’algorithme MINIMAX
A chaque tour, choisir l’action menant à l’état qui a une meilleure valeur minimax
(selon le jeu de l’adversaire).
Exemple d’un arbre de jeu de morpion à deux demi-coups : un pour chacun (un tour)
MAX 3 A Nœuds Max
a1 a2 a3
Nœuds Min
B C D
MIN 3 2 2 Valeurs minimax
b1 c1 c3 d1
b2 b3 c2 d3
d2
3 12 8 2 14 2 18
4 6 5
Principe de l’algorithme MINIMAX
Il permet de trouver le meilleur coup pour un jeu à information parfaite et
déterministe.
A chaque tour, choisir l’action menant à l’état qui a une meilleure valeur minimax
(selon le jeu de l’adversaire).
Exemple d’un arbre de jeu de morpion à deux demi-coups : un pour chacun (un tour)
MAX 3 A Nœuds Max
a1 a2 a3
Nœuds Min
B C D
MIN 3 2 2 Valeurs minimax
b1 c1 c3 d1
b2 b3 c2 d3
d2
Valeurs d’utilité pour Max :
3 12 8 2 4 6 14 5 2 états terminaux
19
Fonction MINIMAX
a1 a2 a3
B C D
MIN 3 2 2
b1 c3
b3 c1 c2 d1 d3
b2
d2
3 12 8 2 4 6 14 5 2
22
Fonctionnement
a1 a2 a3
B C D
MIN 3 2 2
b1 c3
b3 c1 c2 d1 d3
b2
d2
3 12 8 2 4 6 14 5 2
23
Fonctionnement
a1 a2 a3
B C D
MIN 3 2 2
b1 c3
b3 c1 c2 d1 d3
b2
d2
3 12 8 2 4 6 14 5 2
24
Fonctionnement
a1 a2 a3
B C D
MIN 3 2 2
b1 c3
b3 c1 c2 d1 d3
b2
d2
3 12 8 2 4 6 14 5 2
25
Fonctionnement
MAX 3 A
a1 a2 a3
B C D
MIN 3 2 2
b1 c3
b3 c1 c2 d1 d3
b2
d2
3 12 8 2 4 6 14 5 2
26
Fonctionnement
On peut même identifier la décision minimax à la racine : l’action a1 est un choix optimal
pour MAX.
Mais attention ! Le coup optimal pour MAX suppose aussi que MIN joue d’une façon
optimale.
MAX 3 A
a1 a2 a3
B C D
MIN 3 2 2
b1 c3
b3 c1 c2 d1 d3
b2
d2
3 12 8 2 4 6 14 5 2
27
Propriétés MINIMAX
Complet ?
Oui (si l’arbre est fini)
Optimal ?
Oui (contre un adversaire qui joue d’une façon optimale)
Complexité en temps ?
O(bm):
Complexité en espace ?
O(bm), parce que l’algorithme effectue une recherche en
profondeur.
Des jetons sont places sur une table entre deux adversaires.
Un déplacement consiste à diviser une pile de jetons en 2
piles non vides de tailles différentes.
Par exemple, 6 jetons peuvent être divisés en de piles de 5
jetons et l’autre de 1 jetons, ou de 4 et 2, mais pas de 3 et 3.
Le premier joueur qui ne peut plus diviser la pile a perdu.
30
L’espace d’état de la variante du jeu de
Grundy
31
Minimax pour jeu de Grundy
32
Elagage alpha-bêta (pruning)
33
Elagage alpha-bêta : principe
3 A
a1 a2 a3
B C D
3 2 2
b1 c1 c3 d1
b2 b3 c2 d3
d2
3 12 8 2 x y 14 5 35 2
Elagage alpha-bêta : principe
MINIMAX(racine) 3 A
= max(min(3,12,8), min(2,x,y), min(14,5,2)) a1 a2 a3
= max(3, min(2,x,y), 2) 3
B
2
C
2
D
=3 x y 5
3 12 8 2 14 36 2
Elagage alpha-bêta : principe
= max(3, min(2,x,y), 2) 3
B
2
C
2
D
=3 x y 5
3 12 8 2 14 37 2
Elagage alpha-bêta : principe
= max(3, min(2,x,y), 2) 3
B
2
C
2
D
=3 x y 5
3 12 8 2 14 38 2
Elagage alpha-bêta : quand couper ?
41
Algorithme alpha-bêta
fonction EXPLORATION-ALPHA-BÊTA(état) retourne une action
VALEUR-MAX(état,)
retourner l’action dans ACTIONS(état) avec la valeur
fonction VALEUR-MAX(état, , ) retourne une valeur d’utilité
si TEST-TERMINAL(état) alors retourner UTILITÉ(état)
43
Elagage alpha-bêta : application de
l’algorithme
Pour calculer cette utilité v, la a =-,
fonction EXPLORATION-ALPHA-BETA(A) =+
appelle la fonction VALEUR-MAX [-,+] A
avec les valeurs de , et A.
Initialement : Appel de la fonction VALEUR-MAX
avec les valeurs de , et A :
= -
VALEUR-MAX(-,+ ,A). Elle doit
= + retourner la meilleure valeur
Entre [ et ] : l’intervalle des valeurs d’utilité v pour A.
possibles des nœuds visités. C’est
une information indicative et ne fait pas
partie de l’algorithme lui-même.
44
Elagage alpha-bêta : application de
l’algorithme
a =-,
Comme A n’est pas un nœud b =+
terminal, il ne retourne pas la v =-
valeur d’utilité v de l’état et [-,+] A
propage l’appel récursif pour ses
successeurs.
Initialisation (dans le fonction
VALEUR-MAX appelée pour A) de v à
-.
C’est cette valeur de v qui sera
remontée récursivement comme
minimax du nœud racine A
45
Elagage alpha-bêta : application de
l’algorithme
a =-,
La fonction VLAEUR-MAX appelée b =+
avec l’état A appelle donc la v =-
fonction VALEUR-MIN pour tous les [-,+] A
fils de ce nœud, pour garder à la
fin la meilleure valeur minimax a =-,
trouvée dans les successeurs. b =+
B
C’est l’appel v = MAX(v, VALEUR-
MIN(RESULTAT(B,a),,)) = MAX(-, VALEUR- Appel de la fonction VALEUR-MIN
MIN(RESULTAT(B,a),,)) qui permet de avec les valeurs de , et du 1er
garder en tout temps la meilleure successeur B de A : VALEUR-MIN(B,-
valeur minimax pour A parmi ses
,+ ). Elle doit retourner la
fils.
meilleure valeur d’utilité v pour B.
46
Elagage alpha-bêta : application de
l’algorithme
a =-,
La fonction VLAEUR-MIN appelée avec l’état b =+
B ne retourne pas sa fonction d’utilité v =-
puisque B n’est pas un état terminal.
[-,+] A
Initialisation (dans le fonction VALEUR-MIN a =-,
appelée pour B) de v à +. b =+
Appelle donc la fonction VALEUR-MAX pour v =+
tous les fils de ce nœud B, pour garder à B
la fin la meilleure valeur minimax trouvée [-,+
dans les successeurs. ]
Appel de la fonction
C’est l’appel v = MIN(v, VALEUR-
MAX(RESULTAT(s,a),,)) qui permet de garder
VALEUR-MAX avec les
en tout temps la meilleure valeur minimax valeurs de , et du
pour B parmi ses fils. 1er successeur de B.
47
Elagage alpha-bêta : application de
l’algorithme
a =-,
La première feuille sous B est un b =+
nœud terminal donc l’appel VALEUR- v =-
MAX(fils de B, -,+-) pour le 1er fils de B [-,+]
retourne la valeur d’utilité de l’état A
a =-,
soit 3 et l’appel récursif ne se b =+
poursuit pas pour ce nœud (terminal).
v =3
Cette première feuille sous B a la B
[-,+
valeur d’utilité 3, l’appel MIN(v, VALEUR-
MAX(RESULTAT(s,a),,)) qui n’est autre ]
que MIN(+, 3)=3 et donc v aussi.
Comme v>, v ne sera pas retournée
comme valeur d’utilité de B.
3
48
Elagage alpha-bêta : application de
l’algorithme
a =-,
doit recevoir maintenant b =+
MIN(,v) = MIN(+,3) = 3. v =-
[-,+] A
C’est cette actualisation de la a =-,
valeur de et le test v> qui b =3
font la différence avec v =3
l’algorithme minimax et [-,3] B
3
49
Elagage alpha-bêta : application de
l’algorithme
a =-,
La 2ème feuille sous B est un nœud terminal b =+
donc l’appel VALEUR-MAX(fils de B, -,3) pour le v =-
2ème fils de B retourne la valeur d’utilité de
l’état soit 12 et l’appel récursif ne se [-,+] A
poursuit pas pour ce nœud (terminal). a =-,
L’appel MIN(v, VALEUR-MAX(RESULTAT(s,a),,)) qui
b =3
n’est autre que MIN(3, 12)=3 et donc v aussi. v =3
B
MIN évite donc ce coup et la valeur de B [-,3]
maximale demeure 3.
Comme v>, v ne sera pas retournée
comme valeur d’utilité de B.
doit recevoir maintenant MIN(,v) = MIN(3,3) =
3.
3 12
50
Elagage alpha-bêta : application de
l’algorithme
a =-,
La 3ème feuille sous B est un nœud terminal b =+
donc l’appel VALEUR-MAX(fils de B, -,3) pour le v =-
3ème fils de B retourne la valeur d’utilité de
l’état soit 8 et l’appel récursif ne se [-,+] A
poursuit pas pour ce nœud (terminal). a =-,
L’appel MIN(v, VALEUR-MAX(RESULTAT(s,a),,)) qui
b =3
n’est autre que MIN(3, 8)=3 et donc v aussi. v =3
B
MIN évite donc ce coup et la valeur de B [-,3]
maximale demeure 3.
Comme v>, v ne sera pas retournée
comme valeur d’utilité de B.
doit recevoir maintenant MIN(,v) = MIN(3,3) =
3.
3 12 8
51
Elagage alpha-bêta : application de
l’algorithme
a =-,
=3,
v au niveau de l’appelant
Tous les successeurs de B ont été visités. A vaut - (voir page 37) b =+
au niveau de l’appelant
La valeur d’utilité v=3 sera donc retournée à vaut+
v =3
=-
l’appelant : VALEUR-MIN(RESULTAT(B,a),,).
[-,+]
[3,+] A
La fonction MAX(v, VALEUR-MIN(RESULTAT(B,a),,)) = a =-,
=3,
MAX(-, 3)) = 3 est donc appelée à fin de calculer
la meilleure valeur d’utilité pour le 1er coup de
b =3
A : B. v =3
B
Affection v = MAX(-, 3)) = 3 . [-,3]
[3,3]
v = 3 < = +, pas d’élagage (v ne sera pas
retournée comme valeur d’utilité).
= MAX(,v) = MAX(-,3) = 3.
On peut même inférer que la valeur de la
racine est au minimum 3.
3 12 8
52
Elagage alpha-bêta : application de
l’algorithme
a =3,
Maintenant c’est au tour du b =+
2ème fils de A, C, qui sera v =3
traité : VLAEUR-MIN(C,,) = VLAEUR- [3,+] A
MIN(C,3,+).
VLAEUR-MIN(C,3,+) ne retourne [-,+] a =3,
pas sa fonction d’utilité puisque [3,3] B C b =+
C n’est pas un état terminal. v =+
3 12 8 2
55
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,+] b =+
Maintenant c’est au tour du v =3
A
3ème fils de A, D, qui sera
traité : VLAEUR-MIN(D,,) = VLAEUR-
MIN(C,3,+).
VLAEUR-MIN(C,3,+) ne retourne [3,3] [-,+] a =3,
b =+
pas sa fonction d’utilité puisque B C
a =3,
D
v = +
[-,2]
C n’est pas un état terminal. b =+
v =2
Initialisation (dans la fonction
VALEUR-MIN appelée pour D) de v
à +.
3 12 8 2
56
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,+] b =+
Appelle la fonction VALEUR-MAX A v =3
pour tous les fils de ce nœud
D, pour garder à la fin la
meilleure valeur minimax
trouvée dans les successeurs.
[3,3] [-,+] a =3,
b =+
C’est l’appel v = MIN(v, VALEUR- B
[-,2]
C
a =3,
D
v = +
MAX(RESULTAT(s,a),,)) qui permet b =+
de garder en tout temps la v =2
3 12 8 2 14
59
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,+] b =+
La 2ème feuille sous D est un nœud
terminal donc l’appel VALEUR-MAX(fils de A v =3
D,3,14) pour le 2ème fils de B retourne la
valeur d’utilité de l’état soit 5 et
l’appel récursif ne se poursuit pas
pour ce nœud (terminal). [3,3] [-,14] a =3,
L’appel MIN(v, VALEUR- B C D b =14
a =3, v=5
MAX(RESULTAT(s,a),,)) qui n’est autre [-,2]
b =+
que MIN(14, 5)=5 et donc v aussi. v =2
Comme v>, v ne sera pas
retournée comme valeur d’utilité de
D.
3 12 8 2 14 5
60
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,+] b =+
doit recevoir maintenant A v =3
MIN(,v) = MIN(14,5) = 5.
3 12 8 2 14 5
61
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,+] b =+
La 3ème feuille sous D est un nœud
terminal donc l’appel VALEUR-MAX(fils de A v =3
D,3,5) pour le 3ème fils de B retourne la
valeur d’utilité de l’état soit 2 et
l’appel récursif ne se poursuit pas
pour ce nœud (terminal).
[3,3] [-,5] a =3,
L’appel MIN(v, VALEUR- B C D b =5
a =3, v=2
MAX(RESULTAT(s,a),,)) qui n’est autre [-,2]
b =+
que MIN(5, 2)=2 et donc v aussi. v =2
Comme v, la valeur de v est
retournée comme valeur d’utilité de
D.
3 12 8 2 14 5 2
62
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,+] b =+
L’exploration des fils de D A v =3
est terminée, donc D vaut
2 : retournée par l’appel de
VLAEUR-MIN sur D.
[3,3] [2,2] a =3,
v = MAX(v,2) = MAX(3,2) B C D b =5
[-,2] a =3, v=2
b =+
v =2
3 12 8 2 14 5 2
63
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,+] b =+
L’exploration des fils de D A v =3
est terminée, donc D vaut
2 : retournée par l’appel de
VLAEUR-MIN sur D.
[3,3] [2,2] a =3,
v = MAX(v,2) = MAX(3,2) B C D b =5
[-,2] a =3, v=2
b =+
v =2
3 12 8 2 14 5 2
64
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,3] b =+
L’exploration des fils de D A v =3
est terminée, donc D vaut
2 : retournée par l’appel de
VLAEUR-MIN sur D.
[3,3] [2,2] a =3,
v = MAX(v,2) = MAX(3,2) = 3. B C D b =5
[-,2] a =3, v=2
b =+
v< donc la valeur de v ne v =2
sera pas retourné.
= MAX(,v) = MAX(3,3)=3 14 5 2
3 12 8 2
65
Elagage alpha-bêta : application de
l’algorithme
a =3,
[3,3] b =+
Fin de l’appel de VALEUR-MAX par
A v =3
le retour de v =3.
Cette valeur sera récupéré par
la fonction EXPLORATION-ALPHA-BETA
sur l’état A. [3,3] [2,2] a =3,
B C D b =5
Elle sera assignée à la variable [-,2] a =3, v=2
v. b =+
v =2
EXPLORATION-ALPHA-BETA retourne
alors l’action qui mène l’état
ayant cette valeur, soit B. 2
3 12 8 2 14 5
66
Elagage alpha-bêta : application de
l’algorithme
Fin de l’appel de VALEUR-MAX par 3 A
le retour de v =3.
Cette valeur sera récupéré par
la fonction EXPLORATION-ALPHA-BETA
sur l’état A. 3
B
Elle sera assignée à la variable
v.
EXPLORATION-ALPHA-BETA retourne
alors l’action qui mène l’état
ayant cette valeur, soit B.
67
Application
Décision : prendre
l’action ayant mené à
-∞,+∞
7 une valeur 7, c’est-à-
Max 6, +∞ dire la deuxième action.
-∞,+ ∞ 7,+ ∞
6, + ∞
Min -∞, 6 6 7
6, 7
-∞,+ ∞ 6 -∞,6 14 6, + ∞ 7 6, 7
9
Max 9≥7
6, + ∞ 14 ≥ 6 7, + ∞
-∞,+ ∞ -∞, 6 6, 7
Min 6 6, + ∞ 4 14 9
-∞, 6 4≤6 3 7
-∞,+ ∞
Max
6 11 4 2 14 9 4 9 12 20
Légende de l’animation
69
Attention à l’ordre des coups
a =3,
[3,+] b =+
Revenons à A v =3
l’application de
l’algorithme (page
[3,3]
63). B C D
[-,2] a =3,
b =+
v =2
3 12 8 2 14 5 2
70
Attention à l’ordre des coups
a =3,
[3,+] b =+
Revenons à l’application A v =3
de l’algorithme (page 63).
Aucun successeur de D
ne peut être élagué, [3,3]
puisque les plus mauvais B
[-,2]
C
a =3,
D
74
Application 1
75
Application 1
Aucun : car les nœuds les plus favorables
pour les deux sont explores en dernier
76
Application 2
77
Application 2
Plusieurs nœuds peuvent être élagués car les
nœuds les plus favorables sont explorés en
premier.
78
Décisions en temps réel
(ressources limitées)
79
Décisions imparfaites en temps réel
81
Fonction d’évaluation
Les états de chaque catégorie ont les mêmes valeurs pour tous les attributs (ex. une catégorie
contient toutes les fin de partie à 2 pions contre un pion).
Chaque catégorie contient des états conduisant à une victoire, une perte ou à un match nul.
Si par exemple nous pensons que 72% des états d’une catégorie conduisent à une victoire
(+1), que 20% à une perte (0) et 8% à une partie nulle (½), la valeur pourrait être : (0,72 x +1)
+ (0,20 x 0) + (0,08 x ½) =0,76.
Mais c’est très difficile de la calculer ! A la place on calcule les contributions numériques
distinctes de chaque attribut et on les combine pour déterminer la valeur totale.
83
Fonction linéaire pondérée pour le jeu
d’échec
Chaque pièce a une valeur matérielle approximative : un pion
vaut 1, un cavalier ou un fou vaut 3, une reine vaut 9, etc.
86
Fonction d’évaluation pour le tic-tac-toe
87
Fonction d’évaluation pour le tic-tac-toe
O X X
O
O a 3 Chemins possibles pour gagner
Eval(s) = 4 - 3 = 1
88
Minimax appliqué au premier tour du
tic-tac-toe (Nilsson, 1971)
Etat
initial Coup de
MAX
89
Minimax appliqué au deuxième tour et un des 2
coups possibles de Max (Nilsson, 1971)
Etat
initial
Coup de
MAX
90
Minimax appliqué à un coup de MAX presque à
la fin de la partie Nilsson, 1971)
Coup de
MAX Etat
initial
91
Jeux stochastiques (non
déterministes)
92
Jeux stochastiques
94
Arbre de jeu d’une position du
backgammon
95
Arbre de jeu pou un lancer d’une pièce
de monnaie
MAX 3
3 -1
CHANCE
0,5 0,5 0,5 0,5
MIN 2 0
4 -2
ETATS TERMINAUX
2 4 7 4 6 0 5 -2
96
Algorithme EXPECTIMINMAX
Pour cette leçon, supposer que (de façon magique) nous avons une distribution de
probabilités à associer aux actions de l’adversaire/environnement.
97
Algorithme EXPECTIMINMAX
EXPECTIMINIMAX(s) =
UTILITÉ(s) Si n est un nœud terminal
maxa EXPECTIMINIMAX(RÉSULTAT(s,a)) Si n est un nœud Max
mina EXPECTIMINIMAX(RÉSULTAT(s,a)) Si n est un nœud Min
r P(r) EXPECTEDMINIMAX(RÉSULTAT(s,r)) Si n est un nœud chance
r représente un lancer de dés possible (ou événement aléatoire)
99
Quelques exploits
La recherche sur les jeux révèlent des aspects fondamentaux applicables à
d’autres domaines
Dans le pire des cas, il se comporte comme minimax (explore tous les nœuds)
101