Introduction aux systèmes à base de règles Les bases du langage CLIPS Partie II 1
Les faits non-ordonnés ~= record PASCAL ou structure en C Enregistrement de la structure (deftemplate …) Chaque champ est nommé Un champ est appelé slot ou multislot Exemple : (deftemplate etudiant (slot age (range 18 77) (default 20)) (multislot faculte (allowed-values Hec Droit SSP Lettres) (default Hec)) (slot moyenne (type FLOAT)) ) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 2
Les faits non-ordonnés Assertion comme faits ordonnés (assert (…)) L'ordre des champs n'a pas d'importance Les champs qui ont une valeur par défaut n'ont pas besoin d'être initialisés Seuls les multislot peuvent prendre une liste de valeurs Exemple : CLIPS> (assert (etudiant)) <Fact-0> CLIPS> (facts) f-0 (etudiant (age 20) (faculte Hec) (moyenne 0.0)) CF 1.00 For a total of 1 fact. CLIPS> Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 3
Les règles Schéma : Rule header Pattern(s) (LHS : left-hand side) THEN arrow action (RHS : right-hand side) IF pattern THEN action Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 4
Les règles Exemple : (defrule Maregle "ceci est un commentaire" (declare (salience 99)) (fait LeFaitVoulu) => (assert (trouver CeQueJeCherche)) ) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 5
Les règles Analyse de l'exemple : (defrule <nom> "<commentaire>" (declare (salience <coefficient d'importance>)) (<pattern>) => (<action>) ) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 6
Les fonctions Exemple : (deffunction MaFonction "fonction qui imprime un message" (?Message) (printout t ?message crlf) ) Appel de la fonction : CLIPS>(Mafonction "Hello World !") Hello World ! CLIPS> Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 7
Les fonctions Analyse de l'exemple : (deffunction <nom> "<commentaire>" (<paramètres>) (<action>) ) Fonctions à effet de bord VS à retour de valeur. Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 8
Les fonctions A retour de valeur : (deffunction add () (return (+ 1 2)) ; si le return est omis, la ; dernière expression est ; renvoyée ) Appel : CLIPS>(add) 3 CLIPS> (+ 2 (add)) 5 CLIPS> Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 9
Fonctions procédurales (Bind ?x <valeur>) : permet de forcer la liaison d'une valeur à une variable (if <expression> then <action> [else <action>]) Itérations : loop-for-count, while, switch Groupement d’évaluations : progn Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 10
Les opérateurs Mathématiques : +, -, /, *, **, div, abs, max,min, exp, log, mod, round, sqrt, cos, sin, tan, … Booléens : AND, OR, NOT De comparaison : <,>,<=,>=,<>,=,eq,neq,intergerp, stringp, floatp, ... Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 11
Construction de faits et de règles Assurer le pattern matching complet ou partiel entre des faits, et le LHS de la règle Faits-données et faits de contrôle Graphe de résolution : Ex = Etat Fx = fonction de transition Ea Eb Ec f1 f2 Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 12
Construction de faits et de règles Les états sont l'ensemble ou un sous-ensemble des faits en mémoire à l'instant t Les fonctions de transition sont les règles en mémoire à l'instant t Exemple d'état : ((pere-de Philippe Michel) (pere-de Ernest Philippe)) Exemple de fonction de transition : (defrule grand-pere (pere-de ?x ?y) (pere-de ?y ?z) => (assert(grand-pere-de ?x ?z) Etat suivant : ((pere-de Philippe Michel) (pere-de Ernest Philippe) (grand-pere-de Ernest Michel)) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 13
Construction de faits et de règles - choix de valeurs ~ = Not ; | = Or & connexion des précédents Ex1 : (defrule passage (feu ~vert) => (printout t "Ne pas traverser")) Ex2 : (defrule localisation (faculté Hec|Droit) (assert (lieu BFSH1)) Ex3 : (defrule les-petits (taille ?taille&~GRAND&~MOYEN) (printout t "la taille est " ?taille crlf)) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 14
Construction de faits et de règles - choix de valeurs ":" ou (test) Test booléen par une fonction de comparaison (<,>,=, <>, eq, neq, integerp, stringp, ...) sur les faits. Ex1 : (defrule example-1 (data-1 ?y) (data-2 ?x&:(> ?x ?y)) => (printout t ?x " est plus grand que " ?y crlf)) Ex2 : (defrule example-2 (data-2 ?x) (test (> ?x ?y)) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 15
Construction de faits et de règles - choix de faits and, or, not. Exemple : (defrule traverser (and (not (gauche voiture)) (not (droite voiture)) ) => (printout t "Vous pouvez traverser…" crlf)) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 16
Construction de faits et de règles - Faits de contrôle Dynamisme / usage pour enchaînement des règles Exemple : (defrule etape-1 (fait 1) => (assert (etape 1))) (defrule etape-2 ?fait <- (etape 1) ; NB pas de parenthèses (fait 2) (assert (etape 3)) (retract ?fait)) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 17
Entrée de données Au clavier : (read) (readline) Exemple : (defrule read-input (initial-fact) => (printout t "Donnez le nom d'une couleur " crlf) (assert (color (read)))) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 18
Entrée de données Par fichier : contenu du fichier faits.txt (fait Hello) Déroulement CLIPS> (open "C:\\faits.txt" Fichier "r") TRUE CLIPS> (assert-string (readline Fichier)) <Fact-0> CLIPS> (facts) f-0 (fait Hello) CF 1.00 For a total of 1 fact. CLIPS>(close Fichier) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 19
Les objets Abstraction Héritage Encapsulation Polymorphisme Liaison dynamique Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 20
Les objets Classes Instances Messages Attributs Méthodes Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 21
Les objets (classes) La classe 1ère est OBJECT Les classes prédéfinies sont : FLOAT INTEGER SYMBOL STRING MULTIFIELD EXTERNAL-ADDRESS FACT-ADDRESS INSTANCE-ADDRESS INSTANCE-NAME OBJECT PRIMITIVE NUMBER LEXEME ADDRESS INSTANCE USER INITIAL-OBJECT Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 22
Les objets (classes) Le nom d'une classe s'écrit en MAJUSCULES (defclass MACLASSE (is-a USER)) CLIPS> (describe-class USER) Abstract: direct instances of this class cannot be created. Direct Superclasses: OBJECT Inheritance Precedence: USER OBJECT Direct Subclasses: INITIAL-OBJECT Recognized message-handlers: init primary in class USER delete primary in class USER print primary in class USER direct-modify primary in class USER message-modify primary in class USER direct-duplicate primary in class USER message-duplicate primary in class USER CLIPS> Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 23
Les objets (classes) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 24
Les objets (classes) (defclass <NOM_CLASSE> (is-a <SUPER-CLASS>) (role <concrete|abstract>) (slot <nom-attribut> (<facet> <valeur-facet>))) Exemple : (defclass PERSONNE (is-a USER) (role concrete) (pattern-match reactive) (slot age (create-accessor read-write)) ) Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 25
Les objets (classes) Les facettes sont : default ... Access read-write | read-only | initialize-only storage local | shared propagation inherit | no-inherit source exclusive | composite pattern-match reactive | non-reactive create-accessor ?NONE | read | write | read-write visibility private | public Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 26
Les objets (instances) (make-instance [<nom-instance>] of <classe> <slot-override>) Exemple : CLIPS>(make-instance Philippe (age 26)) [Philippe] CLIPS> (unmake-instance Philippe) TRUE CLIPS> Cours pratiques de systèmes à base de connaissances. Semestre d’été 1999 27