MIF06 – Base de l’Intelligence Artificielle 2016-2017 Examen MIF06 - BIA - Année 2016-2017 Documents Interdits 3 janvier 2016 – 1h30 PARTIE 1 - MODELISATION DE PROBLEMES – 5 PTS Un fermier a un loup, une chèvre et un chou sur la rive gauche d'une rivière. Il souhaite les faire passer sur la rive droite en utilisant un bateau dans lequel il ne peut emmener qu'un seul des trois ; or il ne peut laisser le loup seul avec la chèvre, ni la chèvre seule avec le chou. Le fermier peut voyager seul, mais les animaux ne peuvent pas voyager sans le fermier. Question 1 : Proposer une façon de modéliser ce problème selon le canevas présenté en cours : Etats (liste des variables d’états) / Etat initial / Opérateurs (action, condition d’application et fonction de successeur) / Test de but / Fonction de coût. ================================= Indices de correction ====================================== Exemple de formalisation (pas la seule) : (1 pt) Etats : une liste de quatre éléments, correspondant aux positions respectives du fermier, du loup, de la chèvre et du chou, chacune prenant la valeur "g" ou "d". (0,5 pts) Etat initial : (g, g, g, g) (2,5 pts) Opérateurs (action, condition d’application et fonction de successeur) - Fermier traverse seul (Rive1 vers Rive2) : o Condition : Le Fermier doit être sur la Rive1 et la Rive1 ne doit pas avoir en même temps loup+chevre ou chevre+chou i.e. Rive1 doit avoir le fermier + (1 objet seul ou loup+chou) o - Successeur : seul le 1er élément de la liste change Fermier traverse avec le loup (Rive1 vers Rive2) : o Condition : : Le Fermier et le loup doivent doit être sur la Rive1 et la Rive1 ne doit pas avoir en même temps chevre+chou i.e. Rive1 doit avoir le fermier, le loup + 1 autre objet o - - Successeur : les 1er et 2ème éléments de la liste changent Fermier traverse avec la chevre (Rive1 vers Rive2) o Condition : Le Fermier et la chèvre doivent doit être sur la Rive1 o Successeur : les 1er et 3ème éléments de la liste changent Fermier traverse avec le chou (Rive1 vers Rive2) : o Condition : Le Fermier doit être sur la Rive1 et la Rive1 ne doit pas avoir en même temps loup+chevre i.e. Rive1 doit avoir le fermier, le chou + 1 objet seul o Successeur : les 1er et 4ème éléments de la liste changent Page 1 sur 5 MIF06 – Base de l’Intelligence Artificielle 2016-2017 (0,5 pts) Test de but : être dans l’état final (d, d, d, d) (0,5 pts) Fonction de coût (simple sans heuristique) : 1 ou (1+nb), nb étant le nombre d’éléments transportés ========================================================================================== PARTIE 2 – RAISONNEMENT LOGIQUE – 5 PTS Question 2 : Comment démontrer qu’un raisonnement est valide à l’aide de la logique des prédicats ? Illustrer vos propos en montrant que la formule suivante est universellement valide : F = ∀x ∃y ∀z (R(x, z) → R(x, y)) ================================= Indices de correction ====================================== 1 : formaliser le pb (toutes les clauses et la négation de la conclusion) 2 : mise sous forme clausale i.e. FNC = conjonction de disjonctions, puis prénexe, puis skolémisation (fixe toutes les ∃) 3 : preuve par réfutation avec unification dans le monde de Herbrand 4 : conclusion : si on a un ensemble d’instances de base insatisfiable alors le raisonnement est valide --La mise sous forme standard de Skolem de la négation de la conclusion (et donc de la formule) donne : (1pt negation, 1pt prenexe + skolem) ¬F = ∃x ∀y ∃z (R (x , z ) ∧ ¬R (x , y )) =∃x ∃f ∀y (R(x,f(y)) ∧ ¬R(x,y)) Ce qui nous donne la forme clausale de la conjonction des expressions précédentes : (1pt forme clausale) C¬F = {R(a, f (y1)), ¬R(a, y2)} Dans l’univers de Herbrand H0 = {a, f(a)} (1 pt Herbrand) En unifiant y1/a et y2/f(a), C¬F = {R(a, f (a)), ¬R(a, f (a))} est insatisfiable. (1pt unification & clause vide) La négation de F ne peut donc être vraie, la formule est donc universellement valide. ========================================================================================== PARTIE 3 – SYSTEME A BASE DE CONNAISSANCES – 5 PTS Page 2 sur 5 MIF06 – Base de l’Intelligence Artificielle 2016-2017 Nous avons observé l’organisation des réunions au sein d’une petite entreprise et nous en avons tiré les informations suivantes : – Si la réunion commence en retard, Alphonse n’y sera pas ; – Si Jules et Eva assistent à la réunion, elle ne sera pas calme ; – Si Sophie vient, la réunion commencera en retard ; – Si Marc vient à la réunion, Eva vient aussi ; – Si Jules, Sophie et Eva assistent à la réunion, et si Alphonse ne vient pas, la réunion sera fructueuse. Question 3 : À partir des informations recueillies, définir une base de règles qui pourra être exploitée par un moteur d’inférence pour prédire le déroulement des réunions en fonction des participants. Question 4 : Sachant que pour la prochaine réunion, Jules et Marc seront présents. Que peut-on déduire sur le déroulement de la réunion ? Quel mécanisme d’inférence avez-vous utilisé ? Déroulez-le sur papier. Question 5 : Sachant que pour la réunion d’après, Jules, Marc et Sophie seront présents. Est-ce que la réunion sera fructueuse ? Quel mécanisme d’inférence avez-vous utilisé ? Déroulez-le sur papier. ================================= Indices de correction ====================================== Base de règles : (1,5 pts) R1 : Si retard Alors non(reunion(alphonse)) R2 : Si reunion(jules) & reunion(eva) Alors non(calme) R3 : Si reunion(sophie) Alors retard R4 : Si reunion(marc) Alors reunion(eva) R5 : Si reunion(jules) & reunion(sophie) & reunion(eva) & non(reunion(alphonse)) Alors fructueuse (0,5 pour nom avant-arrière) (1,5 pts pour solution) Avec un chainage avant BF = {reunion(jules), reunion(marc)} 1ère boucle sur les règles : R4 => BF = {reunion(jules), reunion(marc), reunion(eva)} On reboucle sur les règles. R2 => BF = {reunion(jules), reunion(marc), reunion(eva), non(calme)} On reboucle sur les règles mais sans changement, donc on s’arrête. Page 3 sur 5 MIF06 – Base de l’Intelligence Artificielle 2016-2017 On peut donc dire que « la réunion ne sera pas calme » si Jules et Marc sont présents. (1,5 pts pour solution) Avec un chainage arrière BF = {reunion(jules), reunion(marc), reunion(sophie)} But : prouver fructueuse R5 prouvera fructueuse si on a: reunion(jules) & reunion(sophie) & reunion(eva) & non(reunion(alphonse)) Or reunion(jules) et reunion(sophie) sont dans la BF Reste à prouver reunion(eva) et non(reunion(alphonse)) R4 prouvera reunion(eva) si on a reunion(marc) Or reunion(marc) est dans la BF donc on peut prouver reunion(eva) R1 prouvera non(reunion(alphonse)) si on a retard Reste à prouver retard R3 prouvera retard si on a reunion(sophie) Or reunion(sophie) est dans la BF, donc on a prouvé retard donc on a prouvé non(reunion(alphonse)) On a donc prouvé chacun des prémisses de la règle R5, donc on a prouvé que la réunion sera fructueuse. ========================================================================================== PARTIE 4 – PROLOG – 5 PTS Question 6 : Définir le prédicat permute(L1,L2), qui étant donnée la liste L1, construit la liste L2 contenant une permutation de L1. Exemple : findall(L,permute([1,2,3],L),R). R = [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] N1 N6 N5 N2 N4 Page 4 sur 5 N3 MIF06 – Base de l’Intelligence Artificielle 2016-2017 Question 7 : On veut placer les nombres de 1 à 6 en triangle, sur les sommets et sur les milieux des segments, en utilisant un nombre une fois seulement, de façon à ce que la somme des trois nombres utilisés soit la même pour les trois cotés du triangle. En utilisant permute, écrire le programme qui donne une solution de ce problème. ================================= Indices de correction ====================================== /* permute – 2 pts */ permute([],[]). permute(L,[X|L2]) :- member(X,L), enleve(X,L,L1), permute(L1,L2). /* enleve – 1 pts */ enleve(_,[],[]). enleve(X,[X|L],L) :- !. enleve(X,[Y|L],[Y|L1]) :- enleve(X,L,L1). /* triangle(liste_de_6_nombres) – 2 pts */ triangle([N1,N2,N3,N4,N5,N6]) :permute([1,2,3,4,5,6],[N1,N2,N3,N4,N5,N6]), M1 is N1+N2+N3, M2 is N1+N6+N5, M3 is N3+N4+N5, M1==M2, M2==M3. /* findall(L,triangle(L),L1), length(L1,N). donne 24 */ ========================================================================================== Page 5 sur 5