CLIPS Module Intelligence artificielle
Principes Langage de description de S.E. Faits et règles typés Assertion et délétion Chaînage avant Hiérarchie des règle « salience » Règles actives à un instant : agenda Réfraction www.
Principe Agenda Base de règles règles Type de faits appariement Règles « activables » Faits activation réfraction production cycle
Mots clés CLIPS Agenda Base de règles règles Type de faits assert/modify duplicate/retract/deffacts/reset appariement defrule run Règles « activables » Faits deftemplate activation réfraction refresh production
Types faits et règles exemple 1 (deftemplate objet (slot nom) (slot position) (slot couleur)) (deftemplate posseder (slot objet)) (deftemplate liste-nombres (multislot values)) (defrule prendre (objet (nom ?unNom)) => (assert(posseder (objet ?unNom))
Types faits et règles exemple 1 ; faits initiaux en ligne : assert (assert(objet (nom cafetiere) (position 5-7) (couleur bleue))) ; faits initiaux en vrac : deffacts ; ils seront insérés suite à l'instruction (reset) (deffacts scene1 "Exemple de scene" (objet (nom theiere) (position 4-4) (couleur verte)) (objet (nom chaise) (position 1-1) (couleur jaune)) (objet (nom pomme) (position 4-8) (couleur rouge)))
Execution (load ) (reset) assertion des deffacts (run ) lance n cycles (agenda) visualise l’agenda les faits et règles sont numérotés (assert ) (retract ) (refresh ) ré-injection (undef )
Exemple d’exécution exemple 1 clips CLIPS (V /15/03) CLIPS> (load "coursExample1.CLP") Defining deftemplate: objet Defining deftemplate: posseder Defining deftemplate: liste-nombres Defining defrule: prendre +j Defining deffacts: scene1 TRUE CLIPS> (assert (objet (nom cafetiere) (position 1-2) (couleur bleue))) CLIPS> (facts) f-0 (objet (nom cafetiere) (position 1-2) (couleur bleue)) For a total of 1 fact. CLIPS> (agenda) 0 prendre: f-0 For a total of 1 activation. CLIPS> (run) CLIPS> (facts) f-0 (objet (nom cafetiere) (position 1-2) (couleur bleue)) f-1 (posseder (objet cafetiere)) For a total of 2 facts. CLIPS> (agenda) CLIPS> (reset) CLIPS> (facts) f-0 (initial-fact) f-1 (objet (nom theiere) (position 4-4) (couleur verte)) f-2 (objet (nom chaise) (position 1-1) (couleur jaune)) f-3 (objet (nom pomme) (position 4-8) (couleur rouge)) For a total of 4 facts. CLIPS> (agenda) 0 prendre: f-3 0 prendre: f-2 0 prendre: f-1 For a total of 3 activations. CLIPS> (run) CLIPS> (facts) f-0 (initial-fact) f-1 (objet (nom theiere) (position 4-4) (couleur verte)) f-2 (objet (nom chaise) (position 1-1) (couleur jaune)) f-3 (objet (nom pomme) (position 4-8) (couleur rouge)) For a total of 4 facts. CLIPS> (agenda) 0 prendre: f-3 0 prendre: f-2 0 prendre: f-1 For a total of 3 activations. CLIPS> (run) CLIPS> (facts) f-0 (initial-fact) f-1 (objet (nom theiere) (position 4-4) (couleur verte)) f-2 (objet (nom chaise) (position 1-1) (couleur jaune)) f-3 (objet (nom pomme) (position 4-8) (couleur rouge)) f-4 (posseder (objet pomme)) f-5 (posseder (objet chaise)) f-6 (posseder (objet theiere)) For a total of 7 facts. CLIPS> (agenda) CLIPS>
Debug Enumération (des constructeurs) (list-defrules) (list-deftemplate) (liste-deffacts) Inspection (ppdefrule ) (ppdeftemplate ) (ppdeffacts )
Debug Visualisation durant l’exécution (watch) (watch all) (watch rules) (watch statistics) (unwatch)
Variables en tête de règle –Première rencontre = affectation Appariement
Appariement Adressage des faits
Exemple 2 (deftemplate vehicule (slot nom) (slot position) (slot vitesse)) (defrule sortirParking ?f1 <- (vehicule (position parking)) => (modify ?f1 (position route) (vitesse 40km/heures))) clips CLIPS (V /15/03) CLIPS> (load "coursExemple2.CLP") Defining deftemplate: vehicule Defining defrule: sortirParking +j TRUE CLIPS> (assert (vehicule (nom trotinette) (position parking) (vitesse 0))) CLIPS> (assert (vehicule (nom kart) (position route) (vitesse 12km/h))) CLIPS> (facts) f-0 (vehicule (nom trotinette) (position parking) (vitesse 0)) f-1 (vehicule (nom kart) (position route) (vitesse 12km/h)) For a total of 2 facts. CLIPS> (agenda) 0 sortirParking: f-0 For a total of 1 activation. CLIPS> (run) CLIPS> (facts) f-1 (vehicule (nom kart) (position route) (vitesse 12km/h)) f-2 (vehicule (nom trotinette) (position route) (vitesse 40km/heures)) For a total of 2 facts. CLIPS> (agenda) CLIPS>
Exemple 3 Une variable référencée dans 2 faits en tête de règle Une assertion/retraction -> activation d’autres règles. Plusieurs règles activées au même moment
clips CLIPS (V /15/03) CLIPS> (load "coursExemple2.CLP") Defining deftemplate: vehicule Defining deftemplate: surRoute Defining defrule: sortirParking +j TRUE CLIPS> (assert (vehicule (nom trotinette) (position parking) (vitesse 0))) CLIPS> (assert (vehicule (nom kart) (position route) (vitesse 12km/h))) CLIPS> (facts) f-0 (vehicule (nom trotinette) (position parking) (vitesse 0)) f-1 (vehicule (nom kart) (position route) (vitesse 12km/h)) For a total of 2 facts. CLIPS> (agenda) 0 sortirParking: f-0 For a total of 1 activation. CLIPS> (run) CLIPS> (facts) f-1 (vehicule (nom kart) (position route) (vitesse 12km/h)) f-2 (vehicule (nom trotinette) (position route) (vitesse 40km/heures)) For a total of 2 facts. CLIPS> (agenda) CLIPS>
Suppression de constructeurs (undefrule ) (undeftemplate ) (undeffacts ) On ne peut supprimer un élément utilisé par un autre qui n’est pas supprimé
Debug (set-break ) (show-break) (remove break )
Execution Une règle activée est mise dans l’agenda Lorsqu’elle est exécutée elle est retirée de l’agenda : « refraction » Au prochain pas, elle ne sera pas réactivée Sauf si c’est par de nouveaux faits Une régle peut être mise en plusieurs exemplaires dans l’agenda si elle est activée par plusieurs faits La fonction (refresh ) remet la règle dans l’agenda comme si elle n’avait pas été activée
Types faits et règles (deftemplate(objet (slot usage) (slot position) (slot couleur)) (deftemplate(posseder (multislot listeObjets))