Une introduction à Jrules Caractéristiques

publicité
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
1
Introduction
Base de connaissances
Connaissances factuelles
Connaissances déductives
Base d’objets
Base de règles
Classes Java
Règles JRules
.ilr
Interface JRules-Java
.java
.java
.java
.java
Parsing
IlrContext
javac
Moteur d ’inférence
Ruleset
Règles tangibles
Règle 1
Règle 2
Règle n
Agenda
Règle
déclenchée
.class
.class
.class
.class
Objet 1
Objet 2
Objet 3
Objet n
Mémoire de travail
2
Patrons
Form(color==black; shape==square);
Form(shape==triangle);
Form(color==gray; shape==circle);
~Form(color==gray; shape==circle);
For m
color : {w hite, gray, black}
s hape : {s tar, s qaure, triangle, circle, ellips e}
H. Lounis
5
Mémoire de travail (base de faits)
Actions
assert Form(gray,circle);
H. Lounis
6
3
Règles
when
{
Form(color==black; shape==circle);
Form(color==white; shape==square);
}
when
then
{
{
?x: Form(color==gray; shape==rectangle);
assert Form(white,triangle);
}
assert Form(black,ellipse);
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
4
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
5
Instance de règles
Mémoire de travail
rule rule1 {
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 {
priority = high;
rule init {
when { foo(); }
then {
when { foo(); gee(); foo(); }
then {
System.out.println("second"); } };
assert bar();
assert gee(); } };
rule third {
priority = high;
rule last {
when { gee(); }
then {
System.out.println("last"); } };
rule first {
priority = high;
when { foo(); gee(); foo(); }
then {
System.out.println("first"); } };
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
6
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.
7
Exemple de règles
Exemple de règles
H. Lounis
16
8
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
e ta t : boole a n
pie ce : 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");
}
};
9
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 "};"
10
Exemple: Structure d’un programme
package stocks;
ƒ Classes Java ;
ƒ Application (Main class Java) ;
ƒ Règles.
import java.io.*;
import java.util.*;
import ilog.rules.engine.*;
import stocks.*;
setup {
class Main
assert Stock("SUNW",101.5,90.25);
{
assert Stock("NT",11.5,19.25);
public static void main(String[] args) {
assert Stock("SU",271.5,300.25);
String filename = "stocks.ilr";
assert Stock("SNW",121.5,93.25);
IlrRuleset ruleset = new IlrRuleset();
assert Stock("SW",131.5,120.25); }
boolean parsed = ruleset.parseFileName(filename);
if (!parsed)
rule PrintPercentStockChange {
{
priority = ?p;
System.out.println("Parsing not OK.");
when {
return;
?s:Stock(?c:currentPrice; ?l:closingPrice;
}
?p:(?c-?l)/(.01*?l));
IlrContext context = new IlrContext(ruleset);
}
int nrules = context.fireAllRules();
then {
}
System.out.println("Stock " + ?s.symbol + " % change " + ?p);
}
} };
…
Exemple supplémentaire
„ Agent
nettoyeur
H. Lounis
22
11
Téléchargement