Académique Documents
Professionnel Documents
Culture Documents
3 novembre 1999
L'Agenda ..............................................16
Slection (rsolution de conflit).................................. 16
Strategies de rsolution de conflit : .............................. 16
Illustration de lAgenda : ............................................ 17
Systme de Productions
Architecture d'un systme de production
Mmoire de Travail
("Facts List")
Interface
Utilisateur
MATCH
(Rete)
Sance 5
Agenda
Rules
Excution
Slection
5-2
Systme de Productions
Sance 5
(<slot-name-n> <constant-n>))
5-3
Systme de Productions
Sance 5
Les VARIABLES :
Les <<CONDITIONS>> peuvent contenir des variables. Il y en a deux sortes :
Variable d'indice: contient l'indice d'un lment de MT
Variable d'attribut : contient la valeur d'un attribut.
Variables d'indice :
Les variables d'indice servent rcuprer l'indice d'un fait
Ceci permet de retirer ou modifier le fait :
(defrule rule-A
?f <- (a)
=>
(printout t "Retracting
(retract ?f)
)
" ?f
crlf)
Systme de Productions
Sance 5
Exemples :
(assert (a b c))
(defrule traiter-1-sur-3
(a ?x ?)
=>
(printout t "x = " $?x crlf)
)
(defrule traiter-une-liste
($?x)
=>
(printout t "x = " $?x crlf)
)
Technique CLIPS de traiter chaque lment dune liste :
(defrule traiter-chaque-element
($? ?x $?)
=>
(printout t "x = " ?x crlf)
)
((deftemplate person
;
une relation pour une
personne
"record pour une personne" ; commentaire optionnel
(slot famille
; nom du person
(type STRING)
; Type chaine de caractres
(default " Dupont")) ; Par dfaut
(slot prenom
; nom de la personne
(type STRING)
; Type chaine de caractres
(default "Pierre ")) ; Par dfaut
)
(defrule Find-same-name
?P1 <- (person (nom ?n1) (prenom ?b))
?P2 <- (person (nom ?n2) (prenom ?b))
=>
(printout t ?B ?n1 " et " ?B ?n2 "Ont le meme prenom"
crlf)
)
5-5
Systme de Productions
Sance 5
Avec variables, Les variables sont affectes. Il faut que toutes les affections
soient les mmes pour qu'une rgle soit xutable.
Exemple :
(?x & vert | bleu) - CONDITION satisfaite si ?x est vert ou bleu.
(?x & ~rouge)
- Condition satisfaite si ?x rouge
Exemples de rgles :
(defrule test3
(couleur ?x & vert | bleu)
=>
(assert (ok))
)
(assert (couleur vert))
(assert (couleur rouge))
(defrule feu-rouge
(couleur ?x&~vert&~jaune)
=>
(assert (il faut arreter))
(printout t "arret" crlf)
)
5-6
Systme de Productions
Sance 5
Prdicates :
Les affectations peuvent tre contraintes par des prdicats.
La variable est suivie par un oprateur logique et une ":"
(?x&:(<predicate> <<arguments>>)
(?x|: (<predicate> <<arguments>>)
(?x&~(<predicate> <<arguments>>)
variable et prdicats
variable ou prdicats
variable et ngation d'un prdicat
Prdicats prdefinis :
(numberp <arg>) (stringp <arg>) (wordp <arg>) -
(defrule example-1
(data ?x&:(numberp ?x))
=>)
(defrule example-2
(data ?x&~:(symbolp ?x))
=>)
(defrule example-3
(data ?x&:(numberp ?x)&:(oddp ?x))
=>)
(defrule example-4
(data ?y)
(data ?x&:(> ?x ?y))
=>)
(defrule example-5
(data $?x&:(> (length$ ?x) 2))
=>)
5-7
Systme de Productions
Sance 5
Symbole
not
and
or
Fonction de comparaisons
Fonction
galit numrique
quivalence
inquivalence num.
inquivalence
Suprieur
Suprieur ou eq
infrieur
Infrieur ou eq
Symbole
=
eq
!=
neq
>
>=
<
<=
exemple
(test (= ?x ?y))
(test (eq ?nom ?mere))
(test (!= ?x ?y))
(test (neq ?nom ?mere))
(test (> ?x ?y))
(test (>= ?x ?y))
(test (< ?x ?y))
(test (<= ?x ?y))
/
*
+
-
Arithmtique :
division
multiplication
addition
soustraction
5-8
Systme de Productions
Sance 5
Deffunctions
L'utilisateur peut crire les fonctions avec la commande "deffunction".
Une fonction dfinie par l'utilisateur doit rendre une chane, un mot, ou un
nombre.
Syntaxe :
(deffunction <name> [<comment>]
(<regular-parameter>* [<wildcard-parameter>])
<action>*)
<regular-parameter> ::= <single-field-variable>
<wildcard-parameter> ::= <multifield-variable>
exemples :
(deffunction ma-fonction (?x)
(printout t "L'argument est " ?x crlf)
)
(ma-fonction fou)
(deffunction test (?a ?b)
(+ ?a ?b) (* ?a ?b))
(test 3 2)
(deffunction distance (?x1 ?y1 ?x2 ?y2)
(bind ?dx (- ?x1 ?x2))
(bind ?dy (- ?y1 ?y2))
(sqrt (+ (* ?dx ?dx) (* ?dy ?dy)))
)
5-9
Systme de Productions
Sance 5
Les actions :
Dans les actions, une fonction externe est execute par :
(<fonction> <<args>>)
exemple :
(deffunction distance (?x1 ?y1 ?x2 ?y2)
(bind ?dx (- ?x1 ?x2))
(bind ?dy (- ?y1 ?y2))
(sqrt (+ (* ?dx ?dx) (* ?dy ?dy)))
)
(defrule calcul-distance
(point ?x1 ?y1)
(point ?x2 ?y2)
=>
(assert
(distance (distance ?x1 ?y1 ?x2 ?y2)))
)
Fonctions prdfinies utilises dans les actions :
bind - affecter une valeur une variable.
read, readline - entre les donne
Exemple :
(defrule ask-user
(person)
=>
(printout t "Prenom? ")
(bind ?prenom (read))
(printout t "Nom de famille? ")
(assert (person ?prenom (read)))
)
5-10
Systme de Productions
Sance 5
(defrule j-existe-je-pense
(je pense)
=>
(str-assert "Je pense que j'existe")
)
(facts)
f-0
5-11
Systme de Productions
Sance 5
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
Systme de Productions
Sance 5
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))
)
5-13
Systme de Productions
Sance 5
Item1 = aujourdhui
item2 = dimanche
Facts
faits
Facts
type = personne
metier prete
Arbre de "Pattern"
Ski Dimanche
Arbre de jonction
5-14
Systme de Productions
Sance 5
5-15
Systme de Productions
Sance 5
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
Strategies de rsolution de conflit :
CLIPS contient sept modes de "slection" (stratgies de rsolution de conflit)
1) "Depth Strategy" (par profondeur): option par dfaut.
L'agenda est tri par "saliency",
pour des valeurs de "saliency" gales,
l'agenda est une PILE d'activations. (LIFO)
5-16
Systme de Productions
Sance 5
2) "Breadth Strategy" (largeur d'abord).
L'agenda est tri par "saliency", pour une valeur de "saliency" l'agenda
est une queue des activations. (FIFO)
3) LEX strategy (Lexographic). Pour compatibilit avec OPS-5.
L'agenda est une PILE, pas de saliency. Les activations sont tries par le
"recency" des faits. Pour les activations les
plus rcentes, les activations sont tries par le nombre de conditions. (mlange de
"depth" et "complexity").
4) MEA strategy (Means-Ends-Analysis) Pour compatibilit avec OPS-5 les
activations sont tries sur la base du recency de la premire condition de la rgle,
puis par nombres de conditions
5) Complexity Strategy : les rgles avec le plus de conditions ont priorit.
6) Simplicity : les rgles avec le moins de conditions ont priorit.
7) Random : alatoire (ordre d'entre des rgles?)
Le strategy "Depth" est recommand.
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)
5-17
Systme de Productions
=>
(printout t "Rule B fires with A =" ?f1 " and B = " ?f2 crlf)
)
Sance 5
(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)
5-18