340 likes | 473 Views
Systèmes Experts implémentation en Prolog. Définition. Application capable d'effectuer dans un domaine des raisonnements logiques comparables à ceux que feraient des experts humains de ce domaine
E N D
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
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
Cycle de base Caractéristiques d’un moteur d’inférences Mode d’invocation des règles Régime Interactivité Capacités d’explications Moteur d’inférences
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) Le cycle de base
Mode d’invocation des règles Régime Interactivité Capacités d’explications Caractéristiques d’un moteur d’inférences
Le chaînage consistent à enchaîner des déductions logiques pour aller en direction d'une cause ou de ses effets Chaînageavant 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 Caractéristiques :Mode d’invocation des règles
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 Mode d’invocation des règles Chaînage avant
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 Mode d’invocation des règles Chaînage arrière
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 Caractéristiques :Régime
Interroger l’utilisateur / l’expert Obtenir des connaissances immédiatement exploitables par le moteur Caractéristiques :Moteur d’inférences interactif
Objectif renforcer la crédibilité du système Expliquer : pourquoi le moteur pose telle question comment le moteur a pu obtenir telle réponse Caractéristiques :Capacités d’explications
Mode d’invocation des règles : ? Régime : ? Interactif : ? Capacités d’explications : ? Prolog : un moteur d’inférences !
Base des faits initiaux a, c, d, e, g, h, k Exemple Une base de connaissance symbolique 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. sik et w et malorsi • 2.sii et w et jalorsq • 3.sif et halorsb • 4.sia et balorsq • 5.sic et halorsr • 6.sir et j et malorss • 7.sigalorsf • 8.siw et n et o et palorsq
Base des faits a. c. d. e. g. h. k. 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.
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. no ?- q,a,h. yes Base des faits a. c. d. e. g. h. k.
Définir la procédure effacer/1de telle façon que le comportement globale de Prolog ne soit pas modifié effacer([]). effacer([But|AutresButs]) :- ? . Comment améliorer l’interface de Prolog ?
Définir la procédure effacer/1de telle façon que le comportement global de Prolog ne soit pas modifié effacer([]). effacer([But|AutresButs]) :- But, effacer(AutresButs). 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) ). Comment améliorer l’interface de Prolog ?
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
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.
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.
Implémenter des capacités d’explications Proposer une interaction avec l’utilisateur Augmenter le pouvoir d’expression des règles Redéfinir un moteur d’inférences « au-dessus » de Prolog
Utiliser le prédicatrule/2en 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 Comment redéfinir prolog« au-dessus » de Prolog ?
ReDéfinir la procédure effacer/1de telle façon que le comportement global de Prolog ne soit pas modifié effacer([]). effacer([But|AutresButs]):- But, effacer(AutresButs). Comment redéfinir un Prolog « au dessus » de Prolog ? effacer([]). effacer([But|AutresButs]) :- rule(But,SousButs), effacer(SousButs), effacer(AutresButs).
clause(T,CorpsTerme) ?- clause(q,T). T = i, w, j ; T = a, b ; T = w, n, o, p ;
rule(T,CorpsListe) ?- rule(q,L). L = [i, w, j] ; L = [a, b] ; L = [w, n, o, p] ;
termeToListe(T,L) ?- termeToListe((a,b,c),L). L = [a, b, c] ;
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).
?- 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 » Des capacités d’explications
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]]]]
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
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]]
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).