You are on page 1of 7

TP2 : Conception d’un jeu intelligent

(activité d’équipe)

Faculté de sciences et de génie
Département d'informatique et de génie logiciel
IFT2003 Intelligence artificielle I

Cette étape est importante pour que l’équipe de correction comprenne ce que vous avez choisi et réalisé. Travail à faire Le travail consiste à développer un jeu intelligent en équipe. L’accent est mis sur la technique de résolution de problèmes intelligente. Expliquez l'état initial.  analyser un problème de recherche dans un espace d'états . N’oubliez pas de préciser l’heuristique choisie en la décrivant dans vos mots (par ex. la technique de recherche utilisée ainsi que les résultats attendus. vous devez présenter le jeu choisi et expliquer les règles générales. Cela vous donnera une idée du type d’interface que vous pouvez produire. Objectifs d’apprentissage Les objectifs d’apprentissage reliés à ce travail sont les suivants :  identifier un problème d’intelligence artificielle . Vous devez donc analyser le problème à résoudre en utilisant la résolution de problèmes par espace d’états et construire votre programme à l'aide du langage Prolog en utilisant une des techniques de recherche heuristiques vues en cours (Hill-Climbing. 3. dames. excepté les jeux du taquin et du tic-tac-toe. etc. (10 %) Tout d’abord. 2. Échéance : 29 octobre 2017 (23h59). l'état final. (30%) Vous devez modéliser le problème. Le but est ensuite de programmer le jeu et de créer un joueur intelligent avec l’ordinateur. de préférence avec des règles simples ou bien modifiez les règles afin qu'elles soient plus simples. Minimax et AlphaBêta). 1. Les autres approches de résolution utilisées ne seront pas considérées. (30%) Vous devez maintenant implanter votre solution en langage Prolog. Meilleur d’abord. A*. évaluation. Le jeu peut se jouer en duel ou en individuel. évaluer le nombre de pièces bien placées). etc. vous devez suivre la démarche de résolution présentée dans le cadre du cours (recherche intelligente dans un espace d’états). vous devez choisir un jeu quelconque. Les annexes vous donnent des exemples de ce qui est attendu. Ensuite.  implanter une solution en utilisant une approche déclarative. Pour cela. go. solitaire. sachant que c’est aspect n’est pas primordial pour ce travail. Voici quelques exemples de jeux qui peuvent être choisis : puissance 4. c'est-à-dire décrire ce que vous vous proposez de résoudre comme dans les exemples présentés en cours. les mouvements autorisés.). aucune 2 . Aussi. Illustrez sur des exemples. la ou les fonctions heuristiques. puis en expliquant comment vous allez traduire cette heuristique dans votre programme (calcul.  choisir une technique de recherche appropriée dans un contexte donné . Travail Pratique : Conception d’un jeu intelligent Ce travail compte pour 5% de la note finale. N'oubliez pas de créer votre équipe dans le Portail des cours avant le 22 octobre 2017 (23h59).

La date limite de remise du travail est le 29 octobre 2017 (23h59). une conclusion (résumé du travail accompli et ce que vous auriez pu ou aimé faire de plus). Les prédicats doivent avoir une description surtout pour les plus importants. s’il y a lieu. Ajoutez une page couverture (titre. il est suggéré de vous autoévaluer à l’aide de la grille fournie avec cet énoncé et d’ajuster votre travail au besoin. Vous pouvez proposer plusieurs heuristiques et expliquer leur performance. ce que vous avez voulu faire.). la saisie par l'interpréteur est tout à fait acceptable. Les buts que vous vous êtes fixés sont-ils atteints ? Discutez aussi des limites de l'heuristique implémentée. ce que vous avez vraiment réalisé). 4. Modalités de remise de ce travail Avant de remettre votre travail. Le programme doit être documenté. (10%) Rédigez votre rapport en intégrant les 4 parties ci-dessus en soignant l’expression écrite et sa présentation. auteurs. etc. 5. interface graphique n'est demandée. une bibliographie. 3 . Vous aurez peut-être à proposer une interface de jeu adaptée. une table des matières et. à condition qu’il y ait eu une entente préalable avec votre professeur. une introduction (but du travail. La remise de ce travail se fait via le Portail des cours dans la rubrique Évaluation et résultats (un fichier PDF pour le rapport et un fichier PL pour le programme). Tout travail remis en retard ne sera pas évalué et recevra la note 0. date. (20%) Discutez les résultats obtenus (utilisez et donnez des jeux d’essais pour montrer les résultats obtenus par votre programme). La description peut être plus succincte pour ceux moins importants.

4 . Le pas paginé ou il paginé. présenté mais non résultats sont résultats ne sont discuté. grammaire. oubliés. Il manque 2 du format qui ont été rapport est paginé. incomplètes. incorrectement. ni illustrées. proposés. ni illustrés.). ni Avantages et et limites sont limite sont aucune limite n’est aucune limite n’est limites proposés. illustrées. par page (vocabulaire. Les explications et/ou Les éléments de la Tous les éléments de les illustrations Les éléments du Description de solution sont la solution sont données sont problème ne sont ni la solution expliqués ou expliqués et illustrés. syntaxe. etc. donnés. pas discutés. écrite fautes (vocabulaire. Les explications et/ou Les règles sont Les règles sont les illustrations Description des Les règles ne sont ni expliquées et expliquées ou données sont règles expliquées. Grille d'autoévaluation Description du jeu choisi (10%) Les explications et/ou Le but du jeu est Le but du jeu est les illustrations Le but du jeu n’est pas Présentation du présenté ou des présenté ainsi que données sont présenté et aucun jeu exemples sont des exemples. Présentation du Le format proposé Le rapport n’est Le rapport n’est pas Il y a plus de 2 éléments rapport est respecté. illustrés. (vocabulaire. etc. manque un élément éléments du format. Améliorations Une amélioration possible Une amélioration possible est Aucune amélioration n’est possibles est proposée et expliquée. correctement. proposée mais non expliquée. incorrectes ou expliqués. et joue correctement.). discutés. ni illustrés.). proposé. syntaxe. incomplètes. proposé. etc. Plusieurs avantages Un avantage et une Aucun avantage ou Aucun avantage. ni illustrés. l’approche par l’approche par incomplètes. Les prédicats Les prédicats L’explication et/ou Les prédicats importants sont Documentation importants sont l’illustration donnée importants sont ni expliqués ou expliqués et illustrés. Appréciation globale (10%) Le rapport ne Le rapport ne Le rapport ne contient Le rapport contient plus contient pas plus contient aucune faute pas plus de 5 fautes de 5 fautes par page Expression d’une dizaine de (vocabulaire. etc. expliqués. proposée. est incorrecte. illustrées. syntaxe. Implantation (30%) Le programme Le programme Le programme compile sans erreur compile sans erreur Le programme ne Fonctionnement compile sans erreur et joue mais joue compile pas sans erreur. espace d’états. syntaxe. Résultats et discussion (20%) Plusieurs jeux Plusieurs jeux Pas de jeu d’essai ou un d’essais sont d’essais sont Discussion des Un seul jeu d’essai est seul jeu d’essai est présentés et les présentés mais les jeux d’essais présenté et discuté. espace d’états. Modélisation du problème et de la solution (30%) Tous les éléments du Les éléments du Les explications et/ou problème sont problème sont les illustrations Les éléments du Description du expliqués et illustrés expliqués ou données sont problème ne sont ni problème en utilisant illustrés en utilisant incorrectes ou expliqués. incorrectes ou exemple n’est donné. grammaire. grammaire.). incorrectes ou incomplètes. illustrés. grammaire.

De.5.4. NouvelleConf ].6]). 4. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Hill Climbing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% resoudre_hill_climbing( Configuration.8. contraintes( deplacer_vers_haut. A ) :. [1.8. Configuration. ListeConfigurations ). De.A is De .youtube. contraintes( deplacer_vers_droite. resoudre_hill_climbing( Configuration.2. []. 5 . Deplacements ).2. [1. [NouvelleConf | Deja_generees].3. deplacer( deplacer_vers_haut.4. faire_liste( ListeValeurs. ANNEXES : EXEMPLES DE PROGRAMMES PROLOG JEU DU TIC-TAC-TOE https://www. resoudre_hill_climbing( NouvelleConf. De. [Deplacement | Deplacements] ) :- trouver_deplacements_legaux( Depls_Possibles. ListeConfsValides. Deplacement. configuration_finale([1. A ) :. valider( ListeConfigurations.1.7.6]).3. A ) :. % Les deplacements possibles de l'asteristique deplacer( deplacer_vers_gauche. trier( ListeConfsValuees. deplacer( deplacer_vers_droite. [3.5.A is De + 3. Deja_generees. Deplacements ). DeplsValides ). 3] ). De. generer_configurations( Depls_Possibles. valeur_HC_tous( ListeConfsValides. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Predicats necessaires au jeu du taquin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Situation de depart et situation a atteindre configuration_initiale([1. [] ). DeplsValides. ConfigurationFinale. 2. du format. A ) :. member( [ V. _.3. Deja_generees.7. ConfigurationFinale. % Les contraintes du jeu (ne pas sortir des 9 positions possibles contraintes( deplacer_vers_gauche. ConfigurationFinale. % Deplacements donne tous les deplacements a faire pour atteindre la situation finale % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% resolveur(Deplacements ) :- configuration_initiale( CI). 6. ListeConfsTriees ). ListeConfsValuees ). ListeConfsTriees ). Configuration.com/watch?v=LCJB3h0dmR0 JEU DU TAQUIN %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % resolveur du taquin (Technique du Hill-Climbing) % % La question a poser est : ?. CF.*.resolveur( Deplacements ). 7] ). configuration_finale(CF).A is De . Configuration ). ListeValeurs ). ListeConfsValides.A is De + 1. 9] ). deplacer( deplacer_vers_bas. resoudre_hill_climbing(CI. Depls_Possibles.*.

Depls ). Element. valider( Configurations. _. valeur_HC( []. Les_Grands ). Configuration ). [Y | Ys]. P ). valeur_HC( [X | Xs]. element_position( C1. faire_liste( [X | Xs]. Deplacements. [V|Valeurs] ) :- valeur_HC( C. V_HC ) :- valeur_HC( Xs. [D | Depls] ) :- not( member( C. haut. Deja_generees ) ). valider( [ C | Configurations ]. CF. Deja_generees. V_HC ). Deplacements ). [C | Configs]. Configuration ) :- findall( X. []. valider( [ C | Configurations ]. _. Valeurs ). Configs. % Determine toutes les configurations obtenues a partir d'une configuration en appliquant la liste des deplacements generer_configurations( []. 8. Configs. []. % Determine le premier deplacement possible (gauche. % Si une configuration a deja ete generee. C3. P1 ). Depls ) :- valider( Configurations. remplacer( P1. P. Ys. C3 ). Element. V ). V_HC is V_HC1 + 1. [Y | Ys]. []. trouver_deplacement_legal( X. Configuration. bas) trouver_deplacement_legal( Deplacement. Les_Petits. deplacer( Deplacement.!. valeur_HC( [X | Xs]. '*'. [[X. [ D | Deplacements ]. valeur_HC_tous( [C|Configs].Z] | Reste] ) :- faire_liste( Xs. 9] ). '*'. [] ). _. CF. Configuration ) :- position_element( Configuration. P1 ). % Calcul de la valeur de la fonction heuristique valeur_HC_tous( []. % trier (algorithme de tri QuickSort) trier( []. trier( Les_Petits. Zs. C). trier( [X|Reste]. V_HC1 ). Configs. Ys. ListeTriee ) :- partitionner( Reste. Deja_generees. !. Deja_generees. [7. Config ). Configs ). [] ). remplacer( P.contraintes( deplacer_vers_bas. Configuration. % faire une seule liste de triplet a partir de trois listes faire_liste( []. Configuration. % Determine tous les deplacements legaux qui s'appliquent a une configuration trouver_deplacements_legaux( Deplacements. 0 ) :. Configuration. C1. % Permet de generer une nouvelle configuration (C2) a partir d'une autre (C1) en appliquant Deplacement generer( Deplacement. generer_configurations( Deplacements. 6 . [ Config | Configs ] ) :- generer( Deplacement. Depls ). [] ). valeur_HC_tous( Configs. V_HC ) :- valeur_HC( Xs. [] ). C ) ).!. CF. []. Deja_generees. P).Y. generer_configurations( [ Deplacement | Deplacements ]. X. Ps ). not( member( P. Deplacements. Ys. C2 ). '*'. on la rejette ainsi que le deplacement associe valider( []. contraintes( Deplacement. C1. Reste ). [X | Ys]. [ D | Deplacements ]. [Z | Zs]. [] ). C2 ) :- position_element( C1. droit.

[ Element | Reste ]. [] ).1.X2. _.Y3]. 1 ) :. remplacer( NP.Y2. Ps. P ) :. partitionner( Xs. position_element( [ _ | Reste ]. []. NP ). NP). Ps. % element_position/3 : recherche l'element a une position donnee dans une liste element_position( [ Element | _ ]. Nouveau. element_position( Reste. % remplacer/3 : remplace un enieme element d'une liste par un autre remplacer( 1. Gs ). P is NP + 1. P ) :. Reste.X2.X2. [ [X1.Y2. [Y1. Element. Nouveau. Element.!. [X | Gs].X3] | Xs].X3] | Gs] ) :- partitionner( Xs. [ [X1. Gs). [ Element | Final ] ) :- NP is N . Gs ) :- X1 < Y1. 7 . partitionner( [].Y3]. Nouveau.!. Element. Final ). element_position( [ _ | Reste ]. Element. [ Nouveau | Reste ] ) :. partitionner( [ [X1. ListeTriee ).X2. trier( Les_Grands.Y3]. !. partitionner( [ [X1. [ Element | Reste ].Y2. [Y1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Predicats de service %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % position_element/3 : recherche la position d'un element dans une liste position_element( [ Element | _ ]. remplacer( N. 1 ) :. append( Ps. Ps.NP is P . Gs). Element.position_element( Reste. [Y1. [Y1.1. Element.X3] | Ps].Y2.!.X3] | Xs].Y3].