MinMax appliqué au puissance 4

publicité
Master 1
SI - MADOCS
2009 – 2010
TP Intelligence Artificielle
Sylvain Chevallier
[email protected]
TD 1 - Algorithme MinMax
Rappel : MinMax
Principe de l’algorithme MinMax :
– MinMax(p)=evaluation(p) si p est une position terminale
– MinMax(p)=max(MinMax(o1 ), ..., MinMax(on )) si p est une position joueur avec fils o1 , ..., on
– MinMax(p)=min(MinMax(j1 ), ..., MinMax(jm )) si p est une position opposant avec fils j1 , ..., jm
Question 1 : Illustrez sur la figure suivante la remontée des valeurs selon l’algorithme MinMax.
Question 2 : Quel noeud faut-il choisir ? pourquoi ?
Rappel : coupures α et β
On considère que pour une position p donnée, il existe Cn = {c1 , . . . , ci , . . . , cn } coups suivants possibles.
AlphaBeta(p, α, β) retourne valeur
Si p est une position terminale, retourne evaluation(p)
Si p est une position joueur
Pour pi ∈ Cn faire
α= max(α, AlphaBeta(p, α, β))
Si α > β, retourner α C’est une coupure β
Retourner α
Si p est une position opposant
Pour pi ∈ Cn faire
β= min(β, AlphaBeta(p, α, β))
Si α > β, retourner β C’est une coupure α
Retourner β
Question 3 : Complétez la figure suivante en utilisant la remontée des valeurs selon l’algorithme α-β. Indiquez
les valeurs de α et β ainsi que les coupures.
Application au puissance 4
On se propose d’appliquer l’algorithme MinMax à un jeu à deux joueurs simple : le puissance 4.
Vous devrez :
1. Écrire un programme qui utilise MinMax pour jouer au puissance 4 contre un joueur humain.
2. Faire un compte-rendu de TP (5 pages environ) en suivant les indications données dans la section Compterendu.
Programmation
Les choix algorithmiques sont laissés à votre discrétion, vous êtes libre de proposer l’implémentation qui
vous paraı̂t la plus adaptée. Vous pouvez vous inspirez de cet algorithme en pseudo-code (proposé par Fabien
Torre, maı̂tre de conférence à Lille 3).
Voici quelques indications pour vous aidez à plannifier l’écriture de votre programme :
– Définissez la structure de donnée correspondant à un état de jeu
– Programmez la fonction affiche(etat jeu ej) qui affiche à l’écran un état du jeu : grille, pions du joueur
et pions adverses
– Écrivez les fonctions qui vérifient si un coup est légal et qui vérifient si un état de jeu est gagnant, perdant
ou nul.
– Écrivez un programme qui permet de jouer à deux joueurs humains (pas d’IA).
– Programmez la fonction etats suivant(etat jeu ej) qui génère les états de jeux accessibles à partir de
ej (c’est a dire la liste des coups suivants possibles).
– Définissez et programmez la fonction evaluation(etat jeu ej) qui retourne le score correspondant à
l’état de jeu ej. (Attention, selon le niveau de profondeur de la recherche, cette évaluation peut dépendre
du joueur auquel correspond ej.
– Définissez et programmez une fonction estjoueur(etat jeu ej) qui sert à déterminer si un état de jeu
correspond au joueur ou à l’adversaire.
– Implémentez l’algorithme MinMax, de manière a ce qu’il retourne un pointeur vers l’etat à jouer.
– Implementez le tour de jeu pour pouvoir jouer avec l’utilisateur.
Compte-rendu
Vous devrez rendre un compte-rendu, sous format électronique (PDF), envoyé par mail à l’enseignant. Ce
compte-rendu doit être structuré en deux parties : la première présente le contexte du TP et la seconde détaille
les choix d’implémentations et les résultats obtenus. Dans la première partie, vous présenterez l’algorithme
MinMax et le jeu de puissance 4. Les solutions que vous aurez retenues pour votre programme doivent être
présentées et argumentées dans la secondes partie.
Vous devez joindre les fichiers de votre programme (.c, .h et makefile) à votre compte-rendu.
Facultatif
Vous pouvez convenir avec un autre étudiant d’un protocole d’echange des coups que recupérerait votre
programme (fichier, reseau, etc...), afin de faire jouer les programmes les uns contre les autre et d’améliorer les
heuristiques selon les victoires/echecs de programmes.
Téléchargement