Systèmes à base de règles 1/100
Introduction Méthode classique de représentation de connaissances (1943, règles de production). Souvent utilisé en IA et dans les systèmes experts (semblable aux raisonnements humains?) Forme des règles : SI ANTECEDENTS ALORS CONSEQUENTS ANTECEDENTS représente les prémisses, souvent une conjonction de conditions, parfois des négations ou des disjonctions. CONSEQUENTS représentent des actions à envisager. Souvent l ajout de nouveaux faits. Toujours sous forme de conjonction. La présence de règles de production n implique pas un raisonnement déductif. 2/100
Type de systèmes de règle 1. système d ordre 0 : valeurs vrais ou faux (logique propositionnelle). SI il y a douleur ET patient a plus de 40 ans ET... 2. système d ordre 0+ : valeurs discrètes et continues. SI symptôme = douleur ET age >= 40 ET... 3. système d ordre 1 : instantiation de variables (logique du premier ordre). SI x a une douleur ET x a l âge n ET n > 40 ET... On peut augmenter l expressivité des règles avec négations, quantificateurs, etc. en prenant en compte le fait que cela a un coût. 3/100
Cycle du moteur d inférence Évolution Exécution Restriction - sous-ensemble des règles - sous-ensemble des faits Filtrage détermination de l ensemble de conflits Résolution des conflits choix de la (ou des règles) Exécutions des actions des règles Base de faits et base de règles modifiées Actions vers l environnement 4/100
Grammaire classique pour des faits Trois ensembles : 1. ensemble N d objets (objet physique ou propriété ou but) ; 2. emsemble P de noms de propriétés sur ces objets ; 3. ensemble V de valeurs possibles sur ces propriétés (valeurs numériques, symboles, objets). Un propriété est un triplet (o, π, v). Souvent, on combine les propriétés sur un même objet : (o, π 1, v 1, π 2, v 2,...). Cette approche se rattache très bien aux langages orientés objets. 5/100
Evaluation : phase de restriction Sélection d un sous-ensemble de la base de faits et de la base de règles : basé sur la méta-connaissances ; choix d un domaine (sur certains faits) ; mise en valeur de certaines règles : ancienneté, complexité, valeur,... structuration des faits et règles, méta-règles. 6/100
Evaluation : phase de filtrage Pattern-matching. Détermination des règles à déclencher compatibles avec les faits sélectionnés. L ensemble de conflit est l ensemble des instantiations (correspondance entre les prémisses de règles et les faits associés). Très coûteux en temps de calcul (90 % du temps de calcul). 7/100
Evaluation : résolution de conflits Sélection parmi les règles compatibles (si il y en a) des règles qui doivent être déclenchées. Stratégies principales : élimination des règles utilisées sur une même donnée (voire de toutes les règles qui ont été déclenchées récemment) éviter les boucles ; utilisation des données ajoutées le plus récemment (exploration «en profondeur») ; utilisation des règles les plus spécifiques : celles qui possèdent le plus de conditions sont préférées aux règles générales ; règles avec les plus de conclusions ; détermination de l intérêt des conclusions. Stratégies utilisant des méta-règles, ou un algorithme du moteur d inférence. 8/100
Exécution 2 modes possibles : 1. Régime de contrôle irrévocable ; 2. Régime de contrôle par tentative : retour arrière possible remplacement de règles par d autres. 9/100
Chaînage avant DEBUT FIN phase de selection phase de filtrage TANTQUE ensemble des règles applicables non vide ET problème non résolu FAIRE résolution de conflits modification des faits et règles applicables FINTANTQUE 10/100
Chaînage avant Inconvénients : 1. déclenche toutes les règles ; 2. demande beaucoup de faits initiaux (manque d interactivité) ; 3. explosion combinatoire possible (en largeur). 11/100
Exemple Fait initiaux : {B,C}, but : H. Règles : Si B et D et E alors F. Si G et D alors A. Si C et F alors A. Si B alors X. Si D alors E. Si X et A alors H. Si C alors D. Si X et C alors A. Si X et B alors D. 12/100
Chaînage arrière DEBUT FIN Phase de selection ; phase de filtrage SI ensemble de règles applicable vide ALORS questionner utilisateur SINON TANTQUE but non résolu ET il reste des règles sélectionnées FAIRE Résolution de conflits Ajouter les sous-buts Résoudre les sous-buts si possible FINTANTQUE 13/100
Chaînage arrière Algorithme plus compliqué (construction d un arbre ET/OU). Système interactif à la demande (distinguer faits demandables et non demandables). Arbre de recherche plus petit. Risque de bouclage. 14/100
Langages avec systèmes de règles Langages à chaînage arrière : dérivés Prolog... Langages à chaînage avant : par exemple CLIPS, Jess, drools... Selon les cas, on parle d expert system shells ou de business rules management systems (BRMS), ou de production rule systems... 15/100
Drools Drools ou JBoss Rules. en Java ; gratuit, code source ouvert ; intégrable dans Eclipse. Fondé sur la spécification JSR-94 qui décrit l API entre Java et les systèmes de règles. 16/100
Bases de Drools 1. Des fichiers java : définition des classes ; analyse et compilation des fichiers drools ; création, initialisation de la base de faits ; lancement des règles. 2. Un fichier Drools (.drl) (un format XML existe aussi) : description des règles. 17/100
Drools : faits Objets (beans) ajoutés dans la «base de faits». public static class Etudiant { private string name; public Etudiant () { } public string getname () { return this.name; } } public void setname (string name) { this.name = name; }...... session.insert (new Etudiant ()); 18/100
Ajouter des faits Ajouter un fait : dans du code Java : interface WorkingMemoryEntryPoint : insert(object) (retourne un FactHandle). dans du code Drools (partie droite des règles) : rule "Ajouter un etudiant" when then insert (new Etudiant ()); // macro vers l interface KnowledgeHelpe end Note : on ne peut pas insérer deux fois un même objet (mais selon la configuration générale, on peut insérer ou non deux objets «égaux»). 19/100
Retirer un fait Retirer un fait : dans du code Java : retract(facthandle). dans du code Drools : rule "Retirer un etudiant" when $e : Etudiant ( ) // préfixer les déclarations par $ est optionnel then retract ($e); // encore un fois, macro 20/100
Modifier un fait dans du code Java : après modification de l objet, update(facthandle,object) (interface WorkingMemoryEntryPoint dans du code Drools : rule "Modifier le nom" when $e : Etudiant ( ) then $e.setname ("Raoul"); update ( e ); // macro end L appel à update est nécessaire pour assurer la modification des règles activables. 21/100
Règles Syntaxe : rule <nom> <attributs>* when <premisses>* (LHS) then <actions>* (RHS) end Exemple : rule "J ai vu un etudiant" when e : Etudiant ( ) then System.out.println ("J ai vu " + e.getname() + " aujourd hui."); end 22/100
LHS : contraintes Contraintes : when $e : Etudiant ( name == "machin" ) then... end L utilisation de name est subordonnée à l existence du getter getname. On peut utiliser aussi des «accesseurs» (méthodes sans paramètres), sans mettre les parenthèses (eg calculeage ()). Plusieurs contraintes : when $e : Etudiant ( name == "machin" calculeage > 25 ) then... 23/100
LHS : déclaration de variables dans les faits when $e1 : Etudiant ( $age : calculeage > 20 ) $e2 : Etudiant ( calculeage > $age ) then 24/100
LHS : autres dans les contraintes (non exhaustif) Connecteurs logiques : &&,. Opérateurs : <, <=, >, >=, ==,!=, contains, not contains, memberof, not memberof, matches, not matches, soundslike. Type des valeurs pour les restrictions litérales : numérique, date, chaîne, booléen, enum. On peut mettre des expressions entre parenthèses : Person( girlage : age, sex == "F" ) Person( age == ( girlage + 2) ), sex == "M" ) cf la doc en ligne de Drools : (http://downloads.jboss.com/drools/docs/5.0.1.26597. FINAL/drools-expert/html/index.html). 25/100
LHS : autres éléments conditionnels Quelques exemples : eval( isvalid(p1, p2) ) // evaluation de code Java (peu optimal car variab not Etudiant( ) // négation d une contrainte Personne () or Etudiant () // disjonction, produit deux sous-règles exists Etudiant () // règle activée _une_ fois si on a un ou plusieurs étudi On trouve aussi forall (teste si une condition implique les autres), from (pour chercher au-delà de la base de fait), collect (créer/utiliser des collections de faits), accumulate (itération sur une collection de faits). Cf la doc en ligne de Drools. 26/100
RHS Liste d actions à exécuter (en Java). Inadapté pour mettre des structures de contrôle (hors séquence) : les actions doivent rester élémentaires. Quelques macros supplémentaires gérer la base de faits : insert, retract, update, insertlogical (voir plus loin). 27/100
Algorithme de Rete Principe : calcul de l ensemble de conflit plus vite, en prenant plus de mémoire. Deux idées principales : 1. Les prémisses de nombreuses règles sont communs, on peut donc mettre des tests communs (ressemblance structurelle). 2. La base de travail ne change pas beaucoup entre deux cycles du moteur (redondance temporelle). 28/100
RETE : vue de haut niveau Création et mise à jour d un «réseau», graphe orienté acyclique avec une racine. chaque nœud est un «pattern» on garde pour chaque nœud les informations pour satisfaire le «pattern» (faits, relations entre variables et valeurs) chaque chemin depuis la racine représente d abord un prémisse de règles, puis la conjonction de ces prémisses pour arriver à une règles. 29/100
Exemple Avec la syntaxe de drools : rule "regle1" when Animal (type == Type.CAT, $c : color, size == Siz.SMA, $h : hair) Animal (type == Type.DOG, color == $c, $q : size, hair == Hair.MED) Animal (type == Type.DOG, color!= $c, size == $q, hair == $h) then... end rule "regle2" when Animal (type == Type.CAT, $c : color, size == Siz.SMA, $h : hair) Animal (type == Type.CAT, color == $c, size == Siz.LAR, hair!= $h) then... end 30/100
Réseau début Animal type = CAT type = DOG size = LAR size = SMA hair = MED C1 Join (color = color hair!= hair) Join (color = color) Join (color!= color, size = size, hair = hair) Regle 2 Regle 1 31/100
Exemple avec base de faits s.insert (new Animal (Type.CAT,Col.BRO,Siz.LAR,Hair.SHO)); // a1 s.insert (new Animal (Type.CAT,Col.WHI,Siz.LAR,Hair.SHO)); // a2 s.insert (new Animal (Type.CAT,Col.WHI,Siz.SMA,Hair.SHO)); // a3 s.insert (new Animal (Type.DOG,Col.BRO,Siz.MED,Hair.MED)); // a4 s.insert (new Animal (Type.CAT,Col.BRO,Siz.SMA,Hair.MED)); // a5 s.insert (new Animal (Type.DOG,Col.BRO,Siz.SMA,Hair.SHO)); // a6 s.insert (new Animal (Type.DOG,Col.WHI,Siz.MED,Hair.MED)); // a7 s.insert (new Animal (Type.DOG,Col.BRO,Siz.LAR,Hair.MED)); // a8 s.insert (new Animal (Type.DOG,Col.WHI,Siz.LAR,Hair.MED)); // a9 32/100
Réseau début {a1,...,a9} Animal {a1,a2,a3,a5} type = CAT type = DOG {a4,a6,a7,a8,a9} size = LAR size = SMA hair = MED {a1,a2} {a3,a5} {a4,a7,a8,a9} {a3,a5} C1 { (a1,a5) } Join Join (color = color) (color = color { (a3,a7) hair!= hair) (a3,a9) (a5,a4) Regle 2 (a5,a8) } Regle 1 Join (color!= color, size = size, hair = hair) { (a5,a4,a7) (a5,a8,a9) } 33/100
Salience : priorité des règles Un attribut important pour les règles, la salience : rule "les oiseaux volent" when $o : Oiseau ( ) then System.out.println ($o.getname() + " peut voler."); retract ( $o ); end rule "les manchots ne volent pas" salience 10 when $o : Oiseau ( type = "Manchot" ) then System.out.println ($o.getname() + " ne peut pas voler."); retract ( $o ); end 34/100
Salience (bis) La salience est un moyen de hiérarchiser les règles prioritaires. Ne pas abuser, par exemple 4 niveaux : 1. règles de réduction des hypothèses ; 2. connaissance du domaine (inférences) ; 3. interrogation de l utilisateur ; 4. transitions de phase (d étapes du programme). D autres méthodes (partition de l agenda, flot de règles) sont possibles. 35/100
Stratégies de Drools Pour des règles de même salience : Stratégies en profondeur (règles activées le plus récemment, stratégie par défaut en Drools), en largeur (règles activées le plus anciennement). Stratégies de simplicité ou complexité. Stratégie aléatoire. et d autres... 36/100