Télécharger la présentation
Publié parAgrippine Baudet Modifié depuis plus de 10 années
1
Systèmes Experts implé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 Moteur d’inférences
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 restriction
Eliminer les connaissances trivialement inutilisables Phase de filtrage Dé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 effets Chaînage avant sélection d’une règle selon ses prémisses Chaînage arrière sé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évocable Les choix réalisés en phase de résolution de conflit ne sont jamais remis en cause Par tentatives On 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 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 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
15
Implémentation de la base de connaissance en Prolog
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. Base des faits a. c. d. e. g. h. k.
16
Utilisation directe de Prolog comme moteur d’inférences
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. ?- q. yes ?- i no ?- q,a,i. ?- q,a,h. Base des faits a. c. d. e. g. h. k.
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), 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
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 » ?- 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
31
La Trace des inférences est une liste …
?- 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 [[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,…,bn la 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).
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.