Vous êtes sur la page 1sur 18

Systmes Experts

3 eme Anne ENSIMAG 1999/00


James L. Crowley
Sance 5 :

3 novembre 1999

Systmes de Productions : CLIPS 6.0


Les Rgles en CLIPS................................. 3
Syntaxe du "defrule" ....................................................3
Les VARIABLES :.......................................................4
Variables d'indice :........................................4
Variables d'attribut :......................................4

Syntaxes des Rgles - Constraints : ................ 6


Prdicates :..................................................................7
Syntaxes des rgles - fonctions:......................................8
Deffunctions................................................................9
Les actions : .............................................................. 10
Les actions Prdefinis :............................................... 11

L'algorithme RETE ..................................12


Le rseau de dcisions ................................................ 12
L'arbre de jonctions : l'unification de faits................... 14
Remarque sur la complexit :...................................... 15

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

Le cycle "Recognize-Act" est la base du moteur d'infrence.


Il comporte 3 phases :
Correspondance (appariement des faits et rgles)
Slection
(slection dune activation pour excution)
Excution
(lexcution dune rgle peut engendrer la modification
de la mmoire de travail).

5-2

Systme de Productions

Sance 5

Les Rgles en CLIPS


Syntaxe du "defrule"
(defrule <rule-name> [<comment>]
[<declaration>]
; Rule Properties
<conditional-element>*
; Left-Hand Side (LHS)
=>
[<action>*])
; Right-Hand Side (RHS)
Si la rgle <rule-name> n'existe pas, elle est dclare.
Si une rgle avec <rule-name> existe, elle est remplace par defrule.
Il n'y a pas de limites de nombres de conditions ou nombres d'actions.
Les actions sont excutes d'une manire squentielle.
S'il n'y a pas de "conditional-element", "(initial-fact)" est pris par dfaut
<conditional-element> ::= <pattern-CE> |
<assigned-pattern-CE> |
<not-CE> |
<and-CE> |
<or-CE> |
<logical-CE> |
<test-CE>

Une condition (CE) peut tre une liste dattributs ou un Template.


Liste : (<constant-1> ... <constant-n>)
Deftemplate :
(<deftemplate-name> (<slot-name-1> <constant-1>)

(<slot-name-n> <constant-n>))

La condition peut tre un littral (constant) ou ce peut contenir les variables.

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)

(deftemplate A (slot B (default 0)))


(defrule rule-A
?f <- (A (B 0))
=>
(printout t "Changing " ?f crlf)
(modify ?f (B 1))
)
Variables d'attribut :
Les variables d'attribut servent :
1) rcuprer les attributs pour les actions
2) mettre en correspondance les faits.
Syntaxe :
? - Match avec un item. Valeur non garde.
$? - Match avec une suite d'items. Les valeurs ne sont pas gardes
?<NOM> - une variable pour un item. Valeur affecte ?<NOM>
NOM doit tre un "mot" (chane de caractres entre espaces).
$?<LISTE> - une variable pour une liste d'items.

Les variables sont affectes leur premire occurrence.


Aprs, elles dfinissent une valeur matcher (principe de l'unification)
5-4

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

Syntaxes des Rgles - Constraints :


On peut imposer les contraintes sur les correspondances :
Il y a deux classes de contraintes : logique et prdicative
Logique : on peut composer les formes avec "et", "ou", "~" (ngation)
<v1> ou <v2>

- valeur v1 ou valeur v2.

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>) -

vrai si <arg> est un nombre


vrai si <arg> est une chane
vrai si <arg> est un mot

(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

Syntaxes des rgles - fonctions:


Une condition peut dpendre du calcul d'une fonction.
Ceci peut tre une des fonctions prdfinies en CLIPS,
ou une fonction dfinie par l'utilisateur :
Les fonctions peuvent tre dans les conditions, les actions, ou interprtes par
l'interprte.
Une fonction dans une condition est excute par la commande "test".
Syntaxe :

(test (<fonction> [<<args>>]))

Il existe plusieurs classes des fonctions prdfinies.


Fonctions logiques :
Fonction
ngation
conjonction
disjonction

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))

/
*
+
-

(test (< ?x (/ ?y 2)))


(test (< ?x (* ?y 2)))
(test (> (+ ?y 1) ?max))
(test (< (- ?y 1) ?min))

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

Les actions Prdefinis :


1) assert :

les fait sont entrs par l'action "ASSERT"

Syntax : (assert (<<fait>>) [(<<faits>>)])


(defrule j'existe
(je pense)
=>
(assert (j'existe!))
)
2) retract - pour effacer un fait
(defrule je-n'existe-pas
?moi <- (je ne pense pas)
=>
(retract ?moi)
)
3) Str-assert

Affirmer une chane comme une liste

(defrule j-existe-je-pense
(je pense)
=>
(str-assert "Je pense que j'existe")
)
(facts)
f-0

(Je pense que j'existe)

4) Halt : termination d'excution

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

RETE est un algorithme incrmental d'unification.


De ce fait, RETE rduit fortement le temps d'execution d'un systme d'xecution.
L'algorithme RETE "vite" l'itration.
RETE vite l'itration. Il est incrmental. Il fonctionne avec les modifications
(assert, retract, modify) de la liste des faits (faits).
RETE utilise un rseau de dcisions fait par la compilation des rgles.
L'arbre de dcisions contient l'information de la mmoire de travail.
RETE et le mot latin pour rseau.
Une modification de la mmoire de travail est propage travers un "rseau"
pour engendrer des modifications dans l'agenda.
L'agenda est compos d'une liste d "activations".
Le rseau de dcisions
La partie condition des rgles est compose de tests ("CONDITIONS").
(defrule nom
(condition-1)
(condition-2)
=>
(actions)
)
5-12

Systme de Productions

Sance 5

Chaque condition de chaque rgle est compile en filtres :


Condition
Rgle

MT

Condition

Condition

Les filtres de conditions sont indexs par


Le "type" d'une template, ou
Le premier champs d'une liste.

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

L'arbre de jonctions : l'unification de faits


Pour chaque rgle il y a un arbre de jonction. Il sert
1) maintenir une liste des objets qui satisfont chaque condition de la rgle.
2) assure que les attributs variables sont les mmes.
A l'entre de l'arbre de jonction, il y a une liste de faits, ayant satisfait les
conditions (passes l'arbre de patterns).
A l'intrieur, il y a un arbre de tests pour unifier les faits.
Le tests mettent en correspondance les variables d'attibuts.
Exemple :
(defrule exemple
(personne nom ?x)
(pre-de ?x ?y)
=>

5-14

Systme de Productions

Sance 5

Remarque sur la complexit :


Pour le temps d'excution d'un cycle :
Soit :
P : Nombre de rgles
W : Nombre d'lments dans les faits
C : Nombre de conditions dans une rgle.
Le complexit de calcul d'un cycle "recognize-act" est
Meilleur cas O(log2 P)
plus mauvais cas O(P W c)
Dans le cas normal, le croissance de temps d'excution est pratiquement
linaire avec le nombre de faits et de rgles, mais avec un taux de croissance
trs faible. On peut, ainsi, avoir les systmes avec les milliers de faits et rgles.

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:

une fois qu'un fait associ une rgle est excut,


lassociation est limine de l'agenda.

Slection (rsolution de conflit)


Principes de slction :
Rfraction : une association de rgles et faits ne peut tre excute quune fois.
Recency : les activations sont tries la base du plus grand indice de leurs
faits.
Variation : MEA, le fait satisfaisant la premire condition dtermine le
rcency.
Spcificit : les activations sont tries la base du nombre de tests dans les
conditions.
Par exemple :
(defrule example
(item ?x ?y ?x)
(test (and (numberp ?x) (> ?x (+ 10 ?y)) (< ?x 100)))
=>)

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

Vous aimerez peut-être aussi