Une introduction à Jrules Riche documentation à : C:\ILOG\JRules35\docs\pdf H. Lounis 1 Caractéristiques 100% Java librairie ; S intègre à des applications Java : supporte des expressions Java, Utilise et teste n importe quelle classe Java ; Opérateurs logiques ; Regroupement de règles ; Truth Maintenance system ; Raisonnement temporel ; Environnement graphique de manipulation des règles, débogage ; Syntax checker ; Compilation des règles ; Générateur de documentation (javadoc). H. Lounis 2
Introduction Base de connaissances Connaissances factuelles Connaissances déductives Base d objets Base de règles Classes Java Règles JRules.ilr Parsing Interface JRules-Java IlrContext.java.java.java.java javac Ruleset Règles tangibles Moteur d inférence.class.class.class.class Règle 1 Règle 2 Règle n Agenda Règle déclenchée Objet 1 Objet 2 Objet 3 Objet n Mémoire de travail
Patrons Form(color==black; shape==square); Form(shape==triangle); Form(color==gray; shape==circle); ~Form(color==gray; shape==circle); Form color : white, gray, black shape : star, sqaure, triangle, circle, ellipse H. Lounis 5 Mémoire de travail (base de faits) Actions assert Form(gray,circle); H. Lounis 6
Règles when Form(color==black; shape==circle); Form(color==white; shape==square); then assert Form(white,triangle); assert Form(black,ellipse); when?x: Form(color==gray; shape==rectangle); then retract?x; assert Form(white,rectangle); H. Lounis 7 Ensemble de règles C:\ILOG\JRules35\examples\applets\data\getstart.ilr H. Lounis 8
Initialiser la mémoire de travail rule initialize when?s: Form(shape==star); then retract?s; assert Form(black,triangle); assert Form(white,ellipse); assert Form(black,square); assert Form(black,square); ; H. Lounis 9 Une démo C:/ILOG/JRules35/examples/applets/getstart.html H. Lounis 10
Instance de règles rule rule1 Mémoire de travail when Form( color == white; shape == square ); Form( shape == circle); then... Instances de règles : rule1(a, C) rule1(a, D) rule1(b, C) rule1(b, D) H. Lounis 11 Agenda (instances de règles éligibles)) rule second rule init when foo(); then assert bar(); assert gee(); ; rule last when gee(); then System.out.println("last"); ; rule first priority = high; when foo(); gee(); foo(); then System.out.println("first"); ; priority = high; when foo(); gee(); foo(); then System.out.println("second"); ; rule third priority = high; when foo(); bar(); foo(); then System.out.println("third"); ; Pourquoi cet ordre : init, first, second, third, last (si initialement foo est le seul fait connu)? Refraction Priorité Recency Lexicography H. Lounis 12
Règle dans Jrules Déclenchables en chaînage avant Actions Asserting an Object ; Retracting an Object ; Modifying an Object ; Raisonnement dans Jrules Chaînage avant ; Les règles sont disposées en un réseau RETE (p.62 du document user s manual) ; Agenda : instances de règle éligibles ; Critères d ordonnancement des règles dans l agenda : Réfraction : une règle déjà exécutée ne peut être réinsérée dans l agenda que s il y a une nouveau fait qui se produit ; Priorité Recency : l objet le plus récemment modifié ou inséré ; Ordre lexicographique des noms de règles.
Exemple de règles Exemple de règles H. Lounis 16
Exemple: Diagnostic d une lampe (1) /** * Règle pour gérer le cas d'une seule lampe défectueuse */ rule Lampe when?x: Lampe(etat == false;?p: piece); exists Lampe(etat == true; piece ==?p); then assert Conseil("Changer cette Lampe"); ; La mpe etat : boolean piece : int Exemple: Diagnostic d une lampe (2) /** * Règle pour gérer le cas des lampes défectueuses de la même pièce */ rule Piece when?x: Lampe(etat == false;?p: piece); not Lampe(etat == true; piece ==?p); exists Lampe(etat == true; piece!=?p); then assert Conseil("Vérifier l'interrupteur ou le fusible de la pièce"); ;
Exemple: Diagnostic d une lampe (3) /** * Règle pour gérer le cas de toutes les lampes défectueuses */ rule Appartement when?x: Lampe(etat == false;?p: piece); not Lampe(etat == true; piece ==?p); not Lampe(etat == true; piece!=?p); then assert Conseil("Appeler la compagnie d'électricité"); ; Grammaire BNF de Jrules Chaque groupe de règles est défini dans une unité d entrée RulesetDefinition ::= ( ImportDefinition )* ( SetupDefinition )? ( RuleDefinition )* Une règle en Jrules: RuleDefinition ::= "rule" Identifier "" RuleParameters RuleConditions RuleActions ";"
Exemple: Structure d un programme Classes Java ; Application (Main class Java) ; Règles. import stocks.*; setup assert Stock("SUNW",101.5,90.25); assert Stock("NT",11.5,19.25); assert Stock("SU",271.5,300.25); assert Stock("SNW",121.5,93.25); assert Stock("SW",131.5,120.25); rule PrintPercentStockChange priority =?p; when?s:stock(?c:currentprice;?l:closingprice;?p:(?c-?l)/(.01*?l)); then System.out.println("Stock " +?s.symbol + " % change " +?p); ; package stocks; import java.io.*; import java.util.*; import ilog.rules.engine.*; class Main public static void main(string[] args) String filename = "stocks.ilr"; IlrRuleset ruleset = new IlrRuleset(); boolean parsed = ruleset.parsefilename(filename); if (!parsed) System.out.println("Parsing not OK."); return; IlrContext context = new IlrContext(ruleset); int nrules = context.fireallrules(); Exemple supplémentaire Agent nettoyeur H. Lounis 22