Vous êtes sur la page 1sur 10

But du travail

Familiarisation avec les particularités et les principes de l’Intelligence Artificielle.


Rafraîchissement dans la mémoire les bases de la programmation en Prolog.
Contenu du travail

1. Proposer une définition de l'Intelligence Artificielle (IA). Discuter des forces et faiblesses de
cette définition.
Intelligence Artificielle - branche informatique orienté vers la création des machines qui
auront un comportement intelligent, c'est-à-dire percevoir, penser et agir rationnellement, presque
comme un humain.

2. Est-ce que la définition proposée en 1 se mesure à un concept idéal de l'intelligence ? À


l'intelligence humaine?
Non, je pense que la définition ne se mesure pas à un concept idéal de l'intelligence. Au
présent c’est seulement une tendance de construire un ordinateur qui aura les mêmes capacités
qu’un cerveau humain. Comme le but n’est pas encore atteint, on ne peut pas parler de « concept
idéal ».

3. Proposer un exemple de système informatique intelligent. Discuter de son appartenance à la


définition proposée en 1.
Comme exemple de système informatique intelligent peut servir le jeu aux échecs. Je pense
qu’il appartient à la définition proposé au dessus, de plus, il peut agir plus rapide et plus intelligent
qu’un humain.

4. En IA, on peut distinguer 4 approches de développement de systèmes intelligents selon le but


poursuivi. Nommer et décrire ces approches. À quelle approche appartient la définition suivante de
l'IA, par Luger et Stubblefield (1993) : L'IA est la branche de l'informatique portant sur
l'automatisation du comportement intelligent.
Approches de développement de systèmes intelligents, selon Russel :
- Humaine :
– penser comme un humain - modélisation cognitive :
1. Approche behavioriste – étude d’observable, les stimuli et les réponses.
2. Approche cognitive – expliquer le comportement au moyen des modèles, faisant
intervenir les notions : buts, connaissances, conscience, imagination.
– agir comme un humain – le test de Turing-la machine doit produire les mêmes résultats qu’un
humain.
- Rationnelle :
- penser rationnellement - les lois de la pensée : on s’intéresse aux processus rationnels, GOFAI –
Good Old-Fashioned AI-approche basée sur la logique.
- agir rationnellement - l’agent rationnel doit produire des résultats explicables, rationnels, en
respectant certains contraintes (information manquantes, temps restreint).

La définition de Luger et Stubblefield appartient a l’approche rationnelle (agir rationnellement).


5. Trouver un exemple de problème d'intelligence artificielle (IA). Justifier.
Résoudre un puzzle est un problème d’intelligence artificielle, parce qu’il a besoin d’un
raisonnement semblable au raisonnement humain (détecter et reconnaitre les formes el les
couleurs).
6. Nommer un domaine relié à l'IA. Expliquer le lien entre ce domaine et l'IA. La médecine est un
domaine qui utilise beaucoup l’IA, en ayant presque toujours besoin des systèmes experts pour
établir un diagnostic.
7. Nommer une caractéristique d'un problème d'IA. Expliquer. Une des caractéristiques d’un
problème l’IA est l’absence d’une solution algorithmique. Une machine a besoin d’un algorithme
pour résoudre un problème, pour réagir comme un humain. Elle n’a pas des connaissances, elle fait
seulement ce pour qu’elle a été programmée.
8. Trouver les 7 erreurs dans le programme Prolog ci-dessous. Indiquer s'il s'agit d'une erreur dans
la syntaxe ou dans la sémantique. Corriger les erreurs trouvées.
%Paul connaît Julie
connait (paul, Julie).
Julie est une constante, donc elle doit être écrite avec une minuscule : connait (paul, julie).

%Paul connaît Mathieu


connait (paul, mathieu)
Chaque clause doit avoir un point à la fin : connait (paul, mathieu).

%Paul connaît Albert


connait (albert, paul).
L’ordre des attributs n’est pas correct. La version correcte : connait (paul, albert).

%Tous ceux qui connaissent quelqu’un sont populaires


populaire(X):- connait(Z,Y).
La version correcte : populaire(X) :-connait(X, Z)

%Paul connaît quelqu’un qui est populaire


connait (paul, populaire(X)).
La version correcte : connait (paul, X) :- populaire(X).

%Tous ceux qui sont populaires sont heureux


populaire(X):- heureux(X).
La version correcte : heureux(X) :- populaire(X).

%Julie est jeune et jolie


jeune(julie), jolie(julie).
La version correcte : jeune (julie). jolie (julie).

%Toute jolie fille est connue par quelqu’un


connait(X,Y):- jolie(Y).
Pas de fautes.
9. Étant donné le prédicat connait/2, tiré du programme logique proposé en 9, écrire un prédicat
connaissance/2 qui est vrai lorsque deux personnes se connaissent mutuellement. Par exemple, si
Paul connaît Jean et que Jean connaît Paul, alors Paul est une connaissance d'Albert et vice versa :
?-connaissance(paul,albert).
yes
?-connaissance(albert, paul).
yes
connaissance(X,Y) :- connait(X,Y), connait(Y,X).
10. Pour chaque requête Prolog qui suit, indiquer si l’unification est possible et, si c’est le cas,
indiquer les substitutions nécessaires.
a. ?- a( X, f( y ) ) = a( b, Z ).
L’unification est possible, les substitutions nécessaires : X/b, Z/f(y).

b. ?- a( X, c ) = X( b, Y ).
L’unification n’est pas possible, les clauses sont différentes.

c. ?- a( b( X ), c, W ) = a( Y, X, d( 2, Y ) ).
L’unification est possible, les substitutions nécessaires : X / c, W / d(2, b(c)), Y / b(c).

d. ?- g( X, a, Y ) = g( Y, C, f( X ) ).
L’unification n’est pas possible : X/*, Y/*, Y/ f(*), C = a.

e. ?- 2 + 2 = 3 + 1.
L’unification n’est pas possible.

f. ?- A + 2 = 5 + A.
L’unification n’est pas possible. On ne peut pas faire les deux substitutions en même temps : A/2,
A/5.

g. ?- a(A,B,C,D) = a(C,A,D,e).
L’unification est possible, les substitutions nécessaires : A/e, B/e, C/e, D/e.

11. Étant donné le programme logique qui suit, où les clauses sont numérotées de 1 à 27. Tracer
l'arbre de résolution Prolog de la requête "?- enseignant(X).". Arrêter au premier succès. Indiquer
dans l’arbre les numéros des règles utilisées, les substitutions et la raison des échecs s'il y a lieu.
1. enseignant(A):- professeur(A).
2. enseignant(A):- charge(A).
3. professeur(A):- chercheur_pour(A,U), universite(U).
4. charge(A):- grad(A), universite(U), emploie(U,A).
5. charge(A):- professionnel(A), universite(U), emploie(U,A).
6. professionnel(A):- chercheur_pour(A,C), compagnie(C).
7. chercheur_pour(A,B):- grad(A), emploie(B,A).
8. grad(A):- phd(A).
9. grad(A):- msc(A).
10. phd(A):- msc(A), these(A).
11. msc(A):- bacc(A), memoire(A).
12. msc(A):- bacc(A), stage(A).
13. bacc(a).
14. bacc(b).
15. bacc(c).
16. bacc(d).
17. memoire(d).
18. memoire(c).
19. memoire(b).
20. these(c).
21. these(d).
22. universite(ul).
23. compagnie(ibm).
24. emploie(ul,d).
25. emploie(ul,c).
26. emploie(ibm,a).
27. emploie(ibm,d).

(premiere branche de l’arbre)


enseignant(X)

1 A/X

professeur(X)

3 A/X
chercheur_pour(X,U)
universite(U)
7 A/X

grad(X),emploie(B,X)
universite(U)
8 A/X 9 A/X

phd(X), msc(X)
emploie(B,X) emploie(B,X)
universite(U) universite(U)
10 A/X 11 A/X 12 A/X

msc(X), these(X) bacc(X), stage(X) bacc(X), memoire(X)

emploie(B,X) emploie(B,X) emploie(B,X)


universite(U) universite(U) universite(U)
11 A/X 12 A/X 13,18,20,25,22 X/c U/ul

bacc(X), memoire(X) bacc(X), stage(X) echec bacc(c)


memoire(c)
these(X) these(X) emploie(ul, c)
emploie(B,X) emploie(B,X)
universite(U) universite(U) universite(ul)
13,18,20,25,22 X/c U/ul echec

bacc(c),memoire(c),these(c),emploie(ul,c),universite(ul) succes succes

(deuxieme branche de l’arbre)

enseignant(X)

4 A/Xcharge(X) 4 A/X

grad(X) professionnel(X)
universite(U) universite(U )
emploie(U,X) emploie(U,X)
6 A/X

la meme comme
la premiere branche chercheur_pour(X,C)
compagnie(C)
universite(U)
emploie(U,X)

echec
12. Étant donné le programme Prolog ci-dessous, répondre aux questions qui suivent:
%est_un(X,Y) représente le fait que X est un Y
est_un(bloc1,cube). %1
est_un(bloc2,cube). %2
est_un(bloc3,cube). %3
est_un(pyramide1,pyramide). %4
est_un(table1,table). %5
%sur(X,Y) représente le fait que X est sur Y
sur(bloc1,bloc2). %6
sur(bloc2,bloc3). %7
sur(bloc3,table1). %8
sur(pyramide1,bloc1). %9
%couleur(X,Y) représente le fait que la couleur de X est Y
couleur(bloc1, rouge). %10
couleur(bloc2, bleu). %11
couleur(bloc3, bleu). %12
couleur(pyramide, vert). %13
%Prédicat quelconque
a(X):- sur(X, table1). %14
a(X):- sur(X, Y), est_un(Y,cube), a(Y). %15

a) Traduire par une requête Prolog les questions suivantes. Préciser s’il y a lieu le nom de la
variable contenant la réponse.

I. Est-ce qu’il existe un cube de couleur noir?


?- couleur(X,noir),est_un(X,cube).
false.

II. Quel cube est situé entre 2 cubes?


?- est_un(X,cube),est_un(Y,cube),est_un(Z,cube),sur(X,Y),sur(Y,Z),write(Y).

bloc2

X = bloc1,

Y = bloc2,

Z = bloc3;

false.

III. Un cube est-il une table?


?- est_un(X,cube),est_un(X,table).

false.
IV. Le bloc #1 est posé sur un cube de quelle couleur?
?- couleur(X,Y),sur(bloc1,X),est_un(X,cube),write(Y).

bleu

X = bloc2,

Y = bleu ;

false.

b) Traduire en français les requêtes suivantes en Prolog (La variable contenant la réponse
recherchée est Y.) :
I. ?- est_un(X,pyramide), sur(X,Y), est_un(Y,cube).
Quelle pyramide se trouve sur un cube ?
II. ?- sur(Y,X), sur(X,W), couleur(W,jaune).
Quel bloc est sur un autre bloc qui a son tour se trouve sur un bloc jeune ?
III. ?- couleur(Y,bleu).
Quels blocs sont de couleur bleu ?
IV. ?- est_un(Y, cube), est_un(Y,table).
Un cube est une table ?
c) Construire l’arbre de résolution de la requête "?-a(bloc2).". Chaque branche de l’arbre construit
doit être étiquetée du numéro de la clause (qui sont numérotées de 1 à 15) et, s’il y a lieu, des
substitutions ou de la raison de l’échec. Arrêter au premier succès.

13. Implanter des solutions en utilisant une approche déclarative


Les liens de parenté
On dispose de l'arbre généalogique ci-dessous (fig. 1.1). Les personnes identifiées dans cet
arbre aimeraient un outil rapide pour déterminer les liens de parenté (frère, sœur, tante, oncle,
etc.).
1) Représenter les connaissances de cet arbre à l’aide du prédicat parent/2, soit parent(X, Y) signifie
que X est le parent de Y.
parent(pamela,robert). parent(anne,luc).
parent(thomas,robert). parent(jimmy,luc).
parent(pierre,elizabeth). parent(julie,jean).
parent(marie,elizabeth). parent(sylvain,jean).
parent(robert,anne). parent(luc,sylvie).
parent(elizabeth,anne). parent(rachel,sylvie).
parent(robert,patricia). parent(patricia,marc).
parent(elizabeth,patricia). parent(martin,marc).
parent(anne,julie). parent(patricia,kevin).
parent(jimmy,julie). parent(martin,kevin).
parent(anne,nathalie). parent(kevin,tom).
parent(jimmy,nathalie). parent(sonia,tom).
2) Poser les questions suivantes en Prolog et valider les réponses obtenues en utilisant l’arbre :
 Est-ce que Marie est la mère d’Élizabeth ?
?- parent(marie,elizabeth).

true .

 Est-ce que Nathalie a des enfants ?


?- parent(nathalie,X).

false.

 Qui sont les parents de Patricia ?


?- parent(X,patricia).

X = robert ;

X = elizabeth ;

false.

 Est-ce que Martin est grand-père ?


?- parent(martin,X),parent(X,Y).
X = kevin,

Y = tom ;

false.

 Sylvie est-elle l’arrière-petite-fille de Robert ?


?- parent(X,sylvie),parent(Y,X),parent(robert,Y).

X = luc,

Y = anne ;

false.

3) Programmer à l’aide de règles d’inférence les relations suivantes :


 soeur-frère(X, Y) : X est la soeur ou le frère de Y
 tante-oncle(X, Y) : X est la tante ou l’oncle de Y
 petit-enfant(X, Y) : X est le petit-enfant de Y
 cousin-cousine(X, Y) : X est le cousin ou la cousine de Y
soeur-frere(X, Y):-parent(Z,X),parent(Z,Y), X\==Y .
tante-oncle(X, Y):-parent(Z, Y), soeur-frere(X, Z).
petit-enfant(X, Y):-parent(Z, X), parent(Y, Z).
cousin-cousine(X, Y):-parent(Z, X), tante-oncle(Z, Y).
Vérifier les relations définies en posant des questions et en utilisant l’arbre généalogique donné.
?- soeur-frere(anne,patricia).
true.
?- tante-oncle(patricia,julie).
true.
?- petit-enfant(julie,robert).
true.
?- cousin-cousine(julie,marc).
true.
4) On décide d’ajouter aux connaissances le sexe des personnes en utilisant les relations
femme/1 et homme/1, soit femme(X) signifie que X est une femme et homme(X) signifie que X
est un homme.
% les femmes %les hommes
femme(pamela). homme(thomas).
femme(marie). homme(pierre).
femme(elizabeth). homme(robert).
femme(anne). homme(jimmy).
femme(patricia). homme(martin).
femme(julie). homme(luc).
femme(nathalie). homme(marc).
femme(rachel). homme(kevin).
femme(sonia). homme(sylvian).
femme(sylvie). homme(jean).
homme(tom).
Programmer à l’aide de règles d’inférence les relations suivantes (de deux façons) :
soeur(X, Y), frère(X, Y), tante(X, Y), oncle(X, Y), cousin(X, Y) et cousine(X, Y).
 en utilisant les relations de la question (3) ainsi que femme/1 et homme/1 ;
soeur(X,Y):-soeur-frere(X,Y), femme(X).
frere(X,Y):-soeur-frere(X,Y), homme(X).
tante(X,Y):-tante-oncle(X, Y), femme(X).
oncle(X,Y):-tante-oncle(X, Y), homme(X).
cousin(X,Y):-cousin-cousine(X, Y), homme(X).
cousine(X,Y):-cousin-cousine(X, Y),femme(X).
 en utilisant seulement les relations parent/2, femme/1 et homme/1.
soeur(X,Y):-parent(Z,X),parent(Z,Y), X\==Y, femme(X).
frere(X,Y):-parent(Z,X),parent(Z,Y), X\==Y, homme(X).
tante(X,Y):-parent(Z, Y), soeur(X,Z), femme(X).
oncle(X,Y):-parent(Z, Y), frere(X,Z), homme(X).
cousin(X,Y):-parent(A,X), parent(B,Y), soeur(A,B);frere(A,B), homme(X).
cousine(X,Y):-parent(A,X), parent(B,Y), soeur(A,B);frere(A,B),femme(X).
5) Implanter en langage Prolog la relation ancêtre/2 /*ancêtre(X,Y) signifie que X est
l’ancêtre de Y */
ancetre(X,Y) :- parent(X,Y).
ancetre(X,Y) :- parent(X,Z),ancetre(Z,Y).

Conclusion

Dans ce travail pratique nous nous sommes familiarisés avec les particularités et les
principes de l’Intelligence Artificielle. Nous avons appris les bases de la programmation en Prolog,
c’est-a-dire effectuer une unification, effectuer un appel a la console, faire un arbre de résolution,
définir un prédicat de manière récursive. En résultat, je pense que les buts du travail ont été atteints.