Académique Documents
Professionnel Documents
Culture Documents
10 novembre 1999
L'Agenda ............................................... 7
Slection (rsolution de conflit) :..................................7
Strategies de rsolution de conflit : ................................8
Illustration de lAgenda : ..............................................9
Salience :................................................................... 10
Hirarchie des Saliences :............................................ 10
Systmes de Productions
Architecture d'un systme de production
Mmoire de Travail
("Facts List")
Interface
Utilisateur
MATCH
(Rete)
Sance 6
Agenda
Rules
Excution
Slection
6-2
Systmes de Productions
Sance 6
L'algorithme RETE
Dans un systme de productions, en principe, pour chaque condition de chaque
rgle, il faut parcourir la liste des faits.
Afin dviter le cot de calul CLIPS (et OPS-5 et ART ) sont construits avec
l'algorithme RETE.
MT
Match
Rete
Agenda
Rgles
Systmes de Productions
Sance 6
MT
Condition
Condition
Rgle
Agenda
(Depuis clips 6, le premier champs d'une liste sert de "type" pour la liste.
D'o la ncessit de commencer les faits par un "symbole"
Ces filtres forment "l'arbre de patterne". (un arbre de dcision).
La sortie est un "arbre de jonction.
Exemple d'un arbre de patterne :
(deftemplate personne
(slot nom)
(slot metier)
)
(defrule ski-dimanche
(aujourdhui dimanche)
(personne (metier ?p:&~pretre))
=>
(assert (fait du ski))
)
6-4
Systmes de Productions
Sance 6
Item1 = aujourdhui
item2 = dimanche
Facts
faits
Facts
type = personne
metier prete
Arbre de "Pattern"
Ski Dimanche
Arbre de jonction
6-5
Systmes de Productions
Sance 6
6-6
Systmes de Productions
Sance 6
L'Agenda
AGENDA : l'agenda est une liste des instances des rgles associes avec les
variables. Chaque activation est une association des faits et rgles.
Refraction:
a specificity 2
6-7
Systmes de Productions
Sance 6
6-8
Systmes de Productions
Sance 6
Illustration de lAgenda :
(set-strategy depth)
(get-strategy)
(defrule rule-A
?f <- (a)
=>
(printout t "Rule A fires with " ?f crlf)
)
(defrule rule-B
?f <- (b)
=>
(printout t "Rule B fires with " ?f crlf)
)
(defrule rule-A-and-B
?f1 <- (a)
?f2 <- (b)
=>
(printout t "Rule B fires with A =" ?f1 " and B = " ?f2 crlf)
)
(assert (a))
(assert (a))
(assert (b))
(set-strategy depth)
(set-strategy breadth)
(set-strategy lex)
(set-strategy mea)
(set-strategy complexity)
(set-strategy simplicity)
(set-strategy random)
(set-strategy depth)
6-9
Systmes de Productions
Sance 6
Salience :
Normalement l'agenda est une pile.
CLIPS fournit une mthode de slection de priorit des rgles. "Salience"
(sailliance)
(defrule fire-first
(declare (salience 30))
(priority first)
=>
(printout t "fire me first" crlf)
)
La valeur de salience peut tre entre 10 000 et 10 000.
Les dbutants ont tendance abuser de "salience".
Cela permet de commander l'ordre d'excution des rgles. Or, justement, si le
systme est bien conu, on n'a pas besoin d'tre concern par l'ordre
exact des rgles, mais plutt des blocs de rgles.
Un systme bien fait utilisera 3 ou 4 niveaux de salience.
Il ne doit jamais tre ncessaire den utiliser plus que 7 .
En place de salience, il faut structurer les rgles avec les lments de contrle.
Salience
300 ;; Rgles qui permettre une rduction des hypothses.
200 ;; Connaissance du domaine (infrer et trier les hypothses)
100 ;; Interroger l'utilisateur
0
;; transitions de phases.
6-10
Systmes de Productions
Sance 6
6-11
Systmes de Productions
Sance 6
Dtection
Identification
Recouperation
Dtection : salience 3
Identification : salience 2
Recouperation : salience 1.
Systmes de Productions
3) Utiliser un lment "phase" pour marquer chaque phase et
utiliser les rgles pour exprimer les transitions.
Sance 6
6-13
Systmes de Productions
Sance 6
de la
de la
6-14
Systmes de Productions
Puis l'intrieur de chaque phase on a des rgles de connaissance
du domaine :
Sance 6
par exemple :
(defrule trouver-panne ; une triche - on demande
(phase identification)
=>
(printout t "eh alors? quelle est cette panne? ")
(assert (panne id =(read)))
)
;; function factice pour set
(deffunction set (?a ?b)
(printout t ?a " is set to " ?b crlf))
;; tester la fonction
(set moteur off)
;; expertise du domaine
(defrule rcuprer-du-fault-moteur
(phase rcupration)
(panne id moteur)
=>
(set moteur off) ;; fonction definie par l'utilisateur.
(set back-up-moteur on)
(assert (panne isole))
)
6-15
Systmes de Productions
Sance 6
6-16
Systmes de Productions
Sance 6
6-17
Systmes de Productions
Sance 6
Arbres de dcisions
Les arbres de dcision sont utiles pour les problmes de classification.
Caractristiques d'un problme de classification :
1) L'ensemble des rponses possibles est fini et connu davance.
(exemples : problme de diagnoses et de taxonomie.
2) L'espace de solutions est rduit par une srie de tests.
Les arbres de dcisions ne fonctionnent pas bien pour les problmes de
planification, ordonnancement, ou synthses.
Ils fonctionnent mal s'il faut construire la solution partielle chaque tape.
Un arbre de dcisions est compos de noeuds et de branches.
Les noeuds peuvent tre les dcisions ou les rponses.
Les ensembles de rponses possibles sont les feuilles de l'arbre.
6-18
Systmes de Productions
Sance 6
n1
decision
n3
reponse
chat
n2
reponse
serpent
n4
reponse
chien
(deffacts arbre
(noeud racine dcision "Est-ce un animal de sang-chaud?" n1
n2)
(noeud n1 decision "Est-ce quil ronronne ?" n3 n4)
(noeud n2 reponse serpent)
(noeud n3 reponse chat)
(noeud n4 reponse chien)
)
;; vielle rgle d'init
(defrule init
(initial-fact)
=>
(assert (noeud-actuel racine))
)
6-19
Systmes de Productions
;; rgle demander pour le noeud de dcision
Sance 6
(defrule faire-dcision
?N <- (noeud-actuel ?nom)
(noeud ?nom decision ?q ?oui ?non)
=>
(retract ?N)
(format t "%s (oui ou non) " ?q)
(bind ?rponse (read))
(if (eq ?rponse oui)
then (assert (noeud-actuel ?oui) )
else (assert (noeud-actuel ?non))
)
)
;; rgle pour traiter les rponses
(defrule faire-rponse
?N <- (noeud-actuel ?nom)
(noeud ?nom rponse ?r)
=>
(printout t "Je pense que c'est un " ?r crlf)
(printout t "c'est correct ? (oui ou non) ")
(bind ?rep (read))
(if (eq ?rep oui)
then (assert (phase demande-encore))
(retract ?N)
else (assert (phase corrige-rponse))
)
)
;; rgle pour essayer encore
(defrule essaie-encore
?phase <- (phase demande-encore)
=>
(retract ?phase)
(printout t "essaie encore ? (oui ou non))
(bind ?rep (read))
(if (eq ?rep oui)
then (assert (noeud-actuel racine))
else (save-facts "animal.dat")
)
)
6-20
Systmes de Productions
;; rgles pour apprendre une nouvelle rponse
Sance 6
(defrule corrige-rponse
?P <- (phase corrige-rponse)
?N <- (noeud-actuel ?nom)
?D <- (noeud ?nom rponse ?r)
=>
(retract ?P ?N ?D) ;;
demander la bonne rponse
(printout t "quel est l'animal? ")
(bind ?new (read))
(printout t
"quelle question poser pour distinguer " crlf)
(printout t "un " ?new " d'un " ?r "? ")
(bind ?question (readline))
(bind ?newnode1 (gensym*))
(bind ?newnode2 (gensym*))
(assert (noeud ?newnode1 reponse ?new))
(assert (noeud ?newnode2 reponse ?r))
(assert
(noeud ?nom decision ?question ?newnode1 ?newnode2))
(assert (phase demande-encore))
)
;; Rgles d'ouverture et de lecture du fichier animal.dat
(defrule init
(initial-fact)
=>
(assert (file =(open "animal.dat" data "r")))
)
6-21
Systmes de Productions
;; ouverture et fermeture du fichier animal.dat
Sance 6
(defrule no-file
?f <- (file FALSE)
=>
(retract ?f)
(assert (noeud-actuel racine))
)
;; lecture du fichier
(defrule init-file
?f <- (file TRUE)
=>
(bind ?in (readline data))
(printout t ?in crlf)
(if (eq ?in EOF) then (assert (eof))
else
(assert-string ?in)
(retract ?f)
(assert (file TRUE))
)
)
(defrule eof
(declare (salience 30))
?f <- (file TRUE)
?eof <- (eof)
=>
(retract ?f ?eof)
(close data)
(assert (noeud-actuel racine))
)
6-22
Systmes de Productions
Sance 6
Systmes de Productions
Sance 6
6-24