200 likes | 347 Views
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. Base de règles règles. Type de faits.
E N D
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 Base de règles règles Type de faits réfraction Agenda activation Règles « activables » Faits cycle production appariement
Mots clés CLIPS Base de règles règles defrule deftemplate Type de faits assert/modify duplicate/retract/deffacts/reset refresh réfraction Agenda activation Règles « activables » Faits run<n> production appariement
Types faits et règlesexemple 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èglesexemple 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 <file-name>) (reset) assertion des deffacts (run <n>) lance n cycles (agenda) visualise l’agenda les faits et règles sont numérotés (assert <fact>) (retract <nb-fact>) (refresh <rule>) ré-injection (undef <rule>)
Exemple d’exécutionexemple 1 {deloor@deloor}~/enseignement/ia/CLIPS/EXAMPLES/pdl$ clips CLIPS (V6.21 06/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))) <Fact-0> 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 <defrule-name>) (ppdeftemplate<deftemplate-name>) (ppdeffacts <deffacts-name>)
Debug Visualisation durant l’exécution (watch) (watch all) (watch rules) (watch statistics) (unwatch)
Appariement • Variables en tête de règle • Première rencontre = affectation
Appariement • Adressage des faits
Exemple 2 {deloor@deloor}~/enseignement/ia/CLIPS/EXAMPLES/pdl$ clips CLIPS (V6.21 06/15/03) CLIPS> (load "coursExemple2.CLP") Defining deftemplate: vehicule Defining defrule: sortirParking +j TRUE CLIPS> (assert (vehicule (nom trotinette) (position parking) (vitesse 0))) <Fact-0> CLIPS> (assert (vehicule (nom kart) (position route) (vitesse 12km/h))) <Fact-1> 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> (deftemplate vehicule (slot nom) (slot position) (slot vitesse)) (defrule sortirParking ?f1 <- (vehicule (position parking)) => (modify ?f1 (position route) (vitesse 40km/heures)))
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
{deloor@deloor}~/enseignement/ia/CLIPS/EXAMPLES/pdl$ clips • CLIPS (V6.21 06/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))) • <Fact-0> • CLIPS> (assert (vehicule (nom kart) (position route) (vitesse 12km/h))) • <Fact-1> • 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 <nom_de _regle>) • (undeftemplate <nom_de_template>) • (undeffacts <nom_de_liste_de_faits>) • On ne peut supprimer un élément utilisé par un autre qui n’est pas supprimé
Debug • (set-break <nom_de_regle>) • (show-break) • (remove break <nom_de_regle>)
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 <règle>) 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))