Computing winning positions in a game
Reading time20 minEn bref
Résumé de l’article
Dans cet article, nous vous expliquons comment trouver les positions gagnantes dans un jeu, c’est-à-dire comment trouver des configurations qui mèneront sûrement à la victoire.
Points clés
-
Gagner un jeu consiste à atteindre une configuration de jeu où le jeu est gagné.
-
Plus largement, les régions gagnantes désignent des configurations à partir desquelles une configuration gagnante peut sûrement être atteinte.
-
Les régions gagnantes peuvent être construites à partir des configurations gagnantes.
-
Des algorithmes tels que Maximin peuvent être utilisés pour trouver une bonne stratégie dans un jeu.
Contenu de l’article
1 — Vidéo
Veuillez regarder la vidéo ci-dessous. Vous pouvez également lire la transcription si vous préférez.
Pour aller plus loin
2 — L’algorithme maximin
En théorie des jeux (plus précisément dans les jeux à information complète et somme nulle), l’algorithme maximin vise à trouver le meilleur coup à jouer à chaque étape, en supposant que l’adversaire jouera de manière optimale. Le but de l’adversaire est donc de minimiser notre gain, tandis que le nôtre est de le maximiser.
Concrètement, l’idée principale de l’algorithme est de partir des feuilles de l’arbre des solutions, et d’attribuer un score à chacune de ces feuilles, correspondant au gain qu’elle nous procure.
Ensuite, on remonte l’arbre jusqu’à la racine, en alternant minimisations des scores et maximisations. Cette alternance modélise les choix soit du joueur, soit de l’adversaire.
2.1 — Exemple
Décrivons ce qui se passe sur un exemple, tiré de la page Wikipédia française sur l’algorithme Minimax (minimax est juste le problème symétrique de maximin dans lequel on cherche à minimiser une fonction de perte plutôt qu’à maximiser un gain) :
Ici, nous avons un arbre des exécutions possibles d’un jeu, dans lequel les profondeurs modélisées par des carrés indiquent notre tour de jouer, et les cercles indiquent le tour de l’adversaire.
Pour chaque nœud cercle, l’adversaire va essayer de minimiser notre gain, en choisissant l’action qui mène au gain minimum pour nous. Par conséquent, l’algorithme minimax supposera les choix suivants :
Cela signifie maintenant que, si j’atteins l’état du jeu $B1$, l’adversaire jouera de manière à ce que notre gain total soit 3, obtenu à partir de l’état $C3$. Si nous faisons aller le jeu à l’état $B2$, notre adversaire peut jouer de manière à ce que le gain soit 5 en imposant l’état $C4$. Enfin, si nous jouons pour atteindre la situation $B3$, l’adversaire peut jouer de manière à ce que le gain soit 2 en imposant l’état $C8$.
Le choix optimal pour nous est donc de maximiser le gain, et de jouer de manière à atteindre l’état $B2$. En faisant ce choix, le meilleur gain que l’on peut espérer face à un adversaire optimal est 5 :
L’algorithme minimax consiste à alterner ces étapes de minimisations et maximisations, afin de maximiser le gain que nous pouvons finalement attendre en prenant une décision.
Il est important de noter que l’algorithme maximin ne renverra pas la séquence de coups qui mène au gain le plus élevé possible (qui dans l’exemple ci-dessus serait $C9$ avec un gain de 12), mais la séquence de jeu la moins mauvaise, c’est-à-dire celle qui mène réalistement à notre meilleur gain.
Pour conclure, remarquez qu’ici nous alternons les décisions entre les joueurs, ce qui implique qu’ils prennent leurs décisions à tour de rôle. Il existe cependant des résultats équivalents pour les jeux simultanés tels que PyRat.
Pour aller plus loin
- L’algorithme minimax.
Quelques codes pour implémenter un algorithme minimax. ```