correction

publicité
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
Téléchargement