Master 1
SI - MADOCS
2009 – 2010
TP Intelligence Artificielle
Sylvain Chevallier
sylvain.chevallier@ensea.fr
TD 1 - Algorithme MinMax
Rappel : MinMax
Principe de l’algorithme MinMax :
– MinMax(p)=evaluation(p) si pest une position terminale
– MinMax(p)=max(MinMax(o1), ..., MinMax(on)) si pest une position joueur avec fils o1, ..., on
– MinMax(p)=min(MinMax(j1), ..., MinMax(jm)) si pest une position opposant avec fils j1, ..., jm
Question 1 : Illustrez sur la figure suivante la remonee des valeurs selon l’algorithme MinMax.
Question 2 : Quel noeud faut-il choisir ? pourquoi ?
Rappel : coupures αet β
On consid`ere que pour une position pdonn´ee, il existe Cn={c1, . . . , ci, . . . , cn}coups suivants possibles.
AlphaBeta(p,α,β) retourne valeur
Si pest une position terminale, retourne evaluation(p)
Si pest une position joueur
Pour piCnfaire
α= max(α, AlphaBeta(p,α,β))
Si α>β, retourner αC’est une coupure β
Retourner α
Si pest une position opposant
Pour piCnfaire
β= min(β, AlphaBeta(p,α,β))
Si α>β, retourner βC’est une coupure α
Retourner β
Question 3 : Compl´etez la figure suivante en utilisant la remont´ee 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 `a un jeu `a deux joueurs simple : le puissance 4.
Vous devrez :
1. ´
Ecrire 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´ees dans la section Compte-
rendu.
Programmation
Les choix algorithmiques sont laiss´es `a votre discr´etion, vous ˆetes libre de proposer l’impl´ementation qui
vous paraˆıt la plus adapt´ee. Vous pouvez vous inspirez de cet algorithme en pseudo-code (propos´e par Fabien
Torre, maˆıtre de conf´erence `a Lille 3).
Voici quelques indications pour vous aidez `a plannifier l’´ecriture de votre programme :
D´efinissez la structure de donn´ee correspondant `a un ´etat de jeu
Programmez la fonction affiche(etat jeu ej) qui affiche `a l’´ecran un ´etat du jeu : grille, pions du joueur
et pions adverses
´
Ecrivez les fonctions qui v´erifient si un coup est l´egal et qui v´erifient si un ´etat de jeu est gagnant, perdant
ou nul.
´
Ecrivez un programme qui permet de jouer `a deux joueurs humains (pas d’IA).
Programmez la fonction etats suivant(etat jeu ej) qui g´en`ere les ´etats de jeux accessibles `a partir de
ej (c’est a dire la liste des coups suivants possibles).
D´efinissez et programmez la fonction evaluation(etat jeu ej) qui retourne le score correspondant `a
l’´etat de jeu ej. (Attention, selon le niveau de profondeur de la recherche, cette ´evaluation peut d´ependre
du joueur auquel correspond ej.
D´efinissez et programmez une fonction estjoueur(etat jeu ej) qui sert `a d´eterminer si un ´etat de jeu
correspond au joueur ou `a l’adversaire.
Impl´ementez l’algorithme MinMax, de mani`ere a ce qu’il retourne un pointeur vers l’etat `a jouer.
Implementez le tour de jeu pour pouvoir jouer avec l’utilisateur.
Compte-rendu
Vous devrez rendre un compte-rendu, sous format ´electronique (PDF), envoy´e par mail `a l’enseignant. Ce
compte-rendu doit ˆetre structur´e en deux parties : la premi`ere pr´esente le contexte du TP et la seconde d´etaille
les choix d’impl´ementations et les r´esultats obtenus. Dans la premi`ere partie, vous pr´esenterez l’algorithme
MinMax et le jeu de puissance 4. Les solutions que vous aurez retenues pour votre programme doivent ˆetre
pr´esent´ees et argument´ees dans la secondes partie.
Vous devez joindre les fichiers de votre programme (.c, .h et makefile) `a votre compte-rendu.
Facultatif
Vous pouvez convenir avec un autre ´etudiant d’un protocole d’echange des coups que recup´ererait votre
programme (fichier, reseau, etc...), afin de faire jouer les programmes les uns contre les autre et d’am´eliorer les
heuristiques selon les victoires/echecs de programmes.
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !