Précédent
Suivant

Exploration en situation d'adversité
Les jeux

Jeux à deux joueurs, avec tours alternés, déterministe, à information complète, à somme nulle.

1) Algorithme MINIMAX

Les deux joureurs s'appelle MAX et MIN. C'est MAX qui commence.

Si le jeux est fini, on peut parcourir tous les états possibles, et utiliser seulement la fonction d'utilité sans heuristique.

La fonction d'utilité `"G"` appliqué à un état terminal `X` décompte le nombre les points gagnants pour MAX selon la règles du jeux, `"G"(X)`. Comme le jeu est à somme nulle, le nombre de points gagnants correspondant pour MIN est `-"G"(X)`.

L'algorithme MINIMAX se résume récursivement comme suit :

`Decide_max(X)` :
`v:="Valeur_max"(X)`
Retourner l'action `a` appartenant à `"A"(X)` telle que "Valeur_min"(R(X,a))`

`"Valeur_max"(X)` :
Si `"Fin"(X)` alors retourner `"G"(X)`
`v:=-oo`
Pour chaque action `a` appartenant à `"A"(X)` faire :
`v:="max"(v, "Valeur_min"(R(X,a))`
Retourner `v`

`"Valeur_min"(X)` :
Si `"Fin"(X)` alors retourner `"G"(X)`
`v:=+oo`
Pour chaque action `a` appartenant à `"A"(X)` faire :
`v:="min"(v, "Valeur_max"(R(X,a))`
Retourner `v`

C'est un algorithme d'exploration en profondeur d'abord :
`b` : nombre d'actions possibles à chaque état.
`m` : profondeur maximal de l'arbre (nombre maximum de coups dans un jeux)

Complétude : oui si l'arbre est fini.
Optimalité : oui (si l'adversaire est aussi optimal) .
Complexité en temps : `O(b^m)`
Complxité en espace : `O(bm)`

2) Élagage alpha-beta

L'algorithme évide de parcourir des parties de l'arbre qui n'ont pas d'influence sur le résultat final.

`alpha` : la valeur du meilleur choix pour MAX dans le pire des cas, trouvée jusqu'ici, où MAX joue en premier.

`beta` : la valeur du meilleur choix pour MIN dans le pire des cas, trouvée jusqu'ici, où MIN joue en premier.

`Decide_max(X)` :
`v:="Valeur_max"(X, -oo,+oo)`
Retourner
l'action `a` appartenant à `"A"(X)` telle que "Valeur_min"(R(X,a))`

`"Valeur_max"(X)` :
Si `"Fin"(X,alpha beta)` alors retourner `"G"(X)`
`v:=-oo`
Pour chaque action `a` appartenant à `"A"(X)` faire :
`v:=max(v, "Valeur_min"(R(X,a),alpha,beta)`
Si `v>=beta` Alors retrouner `v`
`alpha := max(alpha, v)`
Retourner `v`

`"Valeur_min"(X)` :
Si `"Fin"(X)` alors retourner `"G"(X)`
`v:=+oo`
Pour chaque action `a` appartenant à `"A"(X)` faire :
`v:="min"(v, "Valeur_max"(R(X,a))`
Si `v<=alpha` alors retourner `v`
beta := min(beta,v)`
Retourner `v`

La complexité intitialement en `O(b^m)` se rapproche de `O(b^(m/2))`

 

---- 11 juin 2026 ----

 

Précédent
Suivant

 

 


Dominique Mabboux-Stromberg