1 Systèmes Experts implémentation en Prolog. 2 Définition Application capable d'effectuer dans un...
-
Upload
agrippine-baudet -
Category
Documents
-
view
104 -
download
0
Transcript of 1 Systèmes Experts implémentation en Prolog. 2 Définition Application capable d'effectuer dans un...
1
Systèmes Expertsimplémentation en Prolog
2
Définition
• Application capable d'effectuer dans un domaine des raisonnements logiques comparables à ceux que feraient des experts humains de ce domaine
• Il s'appuie sur des bases de données de faits et de connaissances, ainsi que sur un moteur d’inférences, permettant de réaliser des déductions logiques
• C'est avant tout un système d'aide à la décision
3
Composants de base
Base de connaissance– Les connaissances sont propres au domaine
d’expertise– Règles de production
• si prémisse alors conclusion
Moteur d’inférences– Le mécanisme d’exploitation est indépendant
du domaine
4
Moteur d’inférences
• Cycle de base
• Caractéristiques d’un moteur d’inférences
– Mode d’invocation des règles
– Régime
– Interactivité
– Capacités d’explications
5
Le cycle de base
Phase de restrictionEliminer les connaissances trivialement inutilisables
Phase de filtrageDéterminer l’ensemble de résolution de conflits (i.e les
connaissances potentiellement utilisables)Phase de résolution de conflit
Sélectionner la ou les connaissances qui seront effectivement exploitées lors de la phase d’exécution
Par exemple, toutes les connaissances, la première, choix aléatoire, coût, intérêt, …
Exécution (inférer)
6
Caractéristiques d’un moteur d’inférences
– Mode d’invocation des règles
– Régime
– Interactivité
– Capacités d’explications
7
Caractéristiques :Mode d’invocation des règles
Le chaînage consistent à enchaîner des déductions logiques pour aller en direction d'une cause ou de
ses effetsChaînage avant
sélection d’une règle selon ses prémisses
Chaînage arrièresélection d’une règle selon ses conclusions
Chaînage mixte
8
Mode d’invocation des règles Chaînage avant
Phase de restriction
les faits établis
Phase de filtrage
les règles dont les prémisses sont vérifiées
C’est une recherche indépendante de l’objectif
9
Mode d’invocation des règles Chaînage arrière
Phase de restriction
les faits à établir
Phase de filtrage
les règles dont la conclusion contient des faits à établir
C’est une recherche dirigée par le but
10
Caractéristiques :Régime
IrrévocableLes choix réalisés en phase de résolution de conflit ne sont jamais remis en cause
Par tentativesOn peut considérer plusieurs éléments dans l’ensemble de conflit
Permet de remettre en cause l'application d'une règle si ce choix conduit à un échec
11
Caractéristiques :Moteur d’inférences interactif
• Interroger l’utilisateur / l’expert
• Obtenir des connaissances immédiatement exploitables par le moteur
12
Caractéristiques :Capacités d’explications
Objectif
renforcer la crédibilité du système
Expliquer :
pourquoi le moteur pose telle question
comment le moteur a pu obtenir telle réponse
13
Prolog : un moteur d’inférences !
• Mode d’invocation des règles : ?
• Régime : ?
• Interactif : ?
• Capacités d’explications : ?
14
Exemple Une base de connaissance symbolique
Base des faits initiaux
a, c, d, e, g, h, k
Base de règles
1. si k et w et m alors i
2. si i et w et j alors q
3. si f et h alors b
4. si a et b alors q
5. si c et h alors r
6. si r et j et m alors s
7. si g alors f
8. si w et n et o et p alors q
On demande d’établir le fait q
les règles 2, 4 et 8 forment l’ensemble de conflit
On choisira par exemple la première (règle 2)
cela aura pour effet de substituer à q dans la liste
des faits à établir les faits i, w et j
15
Implémentation de la base de connaissance en Prolog
Base des faitsa. c.d.e.g.h.k.
Base de règles
i :- k,w,m.
q :- i,w,j.
q :- a,b.
q :- w,n,o,p.
b :- f,h.
r :- c,h.
s :- r,j,m.
f :- g.
16
Utilisation directe de Prolog comme moteur d’inférences
?- q.yes
?- ino
?- q,a,i.no
?- q,a,h.yes
Base des faitsa. c.d.e.g.h.k.
Base de règles
i :- k,w,m.
q :- i,w,j.
q :- a,b.
q :- w,n,o,p.
b :- f,h.
r :- c,h.
s :- r,j,m.
f :- g.
17
Comment améliorer l’interface de Prolog ?
Définir la procédure effacer/1 de telle façon que le comportement globale de Prolog ne soit pas modifié
effacer([]).
effacer([But|AutresButs]) :- ? .
18
Comment améliorer l’interface de Prolog ?
Définir la procédure effacer/1 de telle façon que le comportement global de Prolog ne soit pas modifié
effacer([]).
effacer([But|AutresButs]) :- But, effacer(AutresButs).
19
Comment améliorer l’interface de Prolog ?
Définir une procédure frontale expertiser/1
expertiser(L) :-si(effacer(L),
ecrire_succes(L),ecrire_echec(L)
).
20
Utilisation du « nouveau » moteur d’inférences
?- expertiser([q]).
le fait q est etabli
?- expertiser([i]).
le fait i n'est pas etabli
?- expertiser([q,a,i]).
la conjonction de faits q et a et i n'est pas etablie
?- expertiser([q,a,h]).
la conjonction de faits q et a et h est etablie
21
Quelques prédicats « utilitaires »
ecrire_succes(L) :- print_conjonction(L,succes).ecrire_echec(L) :- print_conjonction(L,echec).
print_conjonction([T],Etat) :- ! , write('le fait '),write(T),si(Etat=succes,
write(' est etabli'), write(' n''est pas etabli')),nl.
print_conjonction(L,Etat) :- write('la conjonction de faits '),print_conjonction(L),si(Etat=succes,
write(' est etablie'),write(' n''est pas etablie')), nl.
22
Quelques prédicats « utilitaires »
print_conjonction([]).
print_conjonction([T]) :- !,write(T).
print_conjonction([T|Q]):-
write(T), write(' et '), print_conjonction(Q).
si(C,A,_):- C,!,A.
si(_,_,S) :- S.
23
Redéfinir un moteur d’inférences « au-dessus » de Prolog
• Implémenter des capacités d’explications
• Proposer une interaction avec l’utilisateur
• Augmenter le pouvoir d’expression des règles
24
Comment redéfinir prolog« au-dessus » de Prolog ?
Utiliser le prédicat rule/2 en mode (in,out)
Ce prédicat met en relation la tête et le corps d’une règle
?- rule(q, Corps).
Corps = [i , w , j] ;
Corps = [a , b] ;
Corps = [w , n , o , p] ;
no
25
Comment redéfinir un Prolog « au dessus » de Prolog ?
ReDéfinir la procédure effacer/1 de telle façon que le comportement global de Prolog ne soit pas modifié
effacer([]).
effacer([But|AutresButs]):-
But,
effacer(AutresButs).
effacer([]).
effacer([But|AutresButs]) :-
rule(But,SousButs),
effacer(SousButs),
effacer(AutresButs).
26
clause(T,CorpsTerme)
?- clause(q,T).
T = i, w, j ;
T = a, b ;
T = w, n, o, p ;
27
rule(T,CorpsListe)
?- rule(q, L).
L = [i, w, j] ;
L = [a, b] ;
L = [w, n, o, p] ;
28
termeToListe(T,L)
?- termeToListe((a,b,c),L).
L = [a, b, c] ;
29
Quelques prédicats « utilitaires »
rule(T,CorpsListe) :- clause(T,CorpsTerme), termeToListe(CorpsTerme,CorpsListe).
termeToListe(true,[]) :- !.
termeToListe(Terme,[Terme]) :- atom(Terme),!.
termeToListe(Terme,[T|Q]):- arg(1,Terme,T), arg(2,Terme,TT), termeToListe(TT,Q).
30
Des capacités d’explications
?- expertiser([q]).
Le fait q est etabli
q ?
a est un fait etabli
b ?
f ?
g est un fait etabli
h est un fait etabli
• le moteur devra justifier ses réponses en fournissant une « explication » de son raisonnement
• Plus précisément, suite à un succès, le moteur devra fournir la trace des inférences
• C’est à dire répondre au « comment »
31
La Trace des inférences est une liste …
?- expertiser([q]).Le fait q est etabliq ?a est un fait etablib ?
f ?g est un fait etabli
h est un fait etabli
[[q, [a], [b, [f, [g]], [h]]]]
32
La Trace des inférences est une liste
• Si on efface un fait f, la trace est [f]
• Si on efface une règle tete :- b1,b2,…,bnla trace est la liste
[tete,trace_b1,trace_b2,…, trace_bn]où trace_bi est la trace des inférences relatives à l’effacement du but bi
• Si on efface une conjonction de buts,la trace est la liste des traces relatives à l’effacement de chaque but
33
La Trace des inférences est une liste
Par exemple :
la trace résultant de l’effacement de a est [[a]]
la trace résultant de l’effacement de q est
[[q, [a], [b, [f, [g]], [h]]]]
la trace résultant de l’effacement de q,a est
[[q, [a], [b, [f, [g]], [h]]], [a]]
34
afficher_trace/1
afficher_trace(T) :- afficher_trace(T,0).%---------------------afficher_trace([],_) :- !.
afficher_trace([C],Ident) :- atom(C),!, tab(Ident), write(C),write(' est un fait etabli'),nl.
afficher_trace([C,X|Y],Ident) :- atom(C),!, tab(Ident), write(C), write(' ?'), nl, NewIdent is Ident+4, afficher_trace(X, NewIdent), afficher_trace(Y, NewIdent).
afficher_trace([X|Y], Ident) :- afficher_trace(X, Ident), afficher_trace(Y, Ident).