Theses slides describe the principles of semantic networks (or triples) as a general and flexible representation format. We introduce the notion of deduction rules / inferences on semantic networks / triples. The detailed design of an inference engine -forward chaining- is introduced. It uses the so-called "delta driven computing" to optimise inference. The gereralization to forward chaining is provided, using the "Alexander Method". Principles of the implementation in Java are introduced, with appropriate methods on matrix operations, inparticular relational Join operations. FInally, we show how we can implement "Complex Event processing" and trigger mechanisms.
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
Semantic networks, business rules, inference engines, and complex event processing
1. REGLES, MOTEURs D’INFERENCE
ET ARCHITECTURES REACTIVES
(Version Etendue)
Cours de 5 ème année ESILV Option Informatique
Jean Rohmer
J. ROHMER ESILV S09 2010-2011
2. Cette présentation traite de:
-- comment faire un moteur d’inférence en chaînage avant pour
des règles de production avec variables: moteur Delta-Driven
-- comment transformer des problèmes de chaînage arrière en
chaînage avant: Méthode d’Alexandre
-- comment construire une architecture réactive avec un
moteur Delta-Driven et la Méthode d’Alexandre
J. ROHMER ESILV S09 2010-2011
3. On se place dans un monde de « triplets:
TRT / fait partie de / THALES
THALES / a un effectif de / 62000
PIERRE / travaille pour / TRT
TRT France / fait partie de / TRT
TRT France / est situé à / PALAISEAU
THALES / est une / ORGANISATION
ORGANISATION / est une / CATEGORIE
Est situé à / est une / RELATION
J. ROHMER ESILV S09 2010-2011
4. « TOUT » peut être représenté par des triplets
•Des tables relationnelles
•Des tableaux Excel
•Des objets JAVA
•Du XML
•Des arbres d’analyse syntaxique de langage naturel
J. ROHMER ESILV S09 2010-2011
5. Exemples de représentations par triplets
•Frames
•Réseaux sémantiques
•Graphes conceptuels
•RDF
•C’est très ancien: années 60 (ou Aristote …)
•Voir un réseau sémantique du 16 ème siècle:
http://www.serialmapper.com/archive/2008/01/08/r
eseau-semantique-du-16eme-siecle.html
•Papier sur l’histoire des réseaux sémantiques :
http://www.jfsowa.com/pubs/semnet.htm
J. ROHMER ESILV S09 2010-2011
6. Un simple tableau à 3 colonnes
TRT Fait THALES
partie de
THALES A un 62000
effectif
de
PIERRE Travaille TRT
pour
TRT Fait TRT
France partie de
TRT Est situé Palaiseau
France à J. ROHMER ESILV S09 2010-2011
7. TRT Fait partie de THALES
Ca se dessine … THALES A un effectif 62000
de
PIERRE Travaille TRT
pour
THALES TRT France Fait partie de TRT
PIERRE dirige TRT France
PIERRE TRT France Est situé à Palaiseau
Fait partie de
Travaille pour
A un effectif de
dirige
TRT
62000
Fait partie de
TRT France Est situé à
PALAISEAU
J. ROHMER ESILV S09 2010-2011
8. REGLES …
« LES AMIS DE MES AMIS SONT MES AMIS »
X / AMI / Y
et
Y / AMI / Z
=>
X / AMI / Z
J. ROHMER ESILV S09 2010-2011
9. APPLIQUER UNE REGLE
PIERRE / AMI / PAUL
PAUL / AMI / JACQUES
X / AMI / Y et Y / AMI / Z => X / AMI / Z
Tout ceci implique:
PIERRE / AMI / JACQUES
J. ROHMER ESILV S09 2010-2011
10. MOTEUR DE REGLES / MOTEUR D’INFERENCE
UN ENSEMBLE DE TRIPLETS
+
UN ENSEMBLE DE REGLES
DE NOUVEAUX TRIPLETS
J. ROHMER ESILV S09 2010-2011
11. MOTEUR D’INFERENCE / APPROCHE NAIVE
APPLIQUER TOUTES LES REGLES
AJOUTER LEURS CONCLUSIONS A LA BASE
RECOMMENCER SI LA BASE A GROSSI
(Méthode de « saturation »)
J. ROHMER ESILV S09 2010-2011
12. APPLIQUER UNE REGLE
X / AMI / Y Y / AMI / Z -> X / AMI / Z
AA ami BB AA ami BB
AA ami CC AA ami CC
BB ami CC BB ami CC
BB ami DD BB ami DD
CC ami EE CC ami EE
EE ami GG FF ami GG
Tous les triplets Tous ROHMER ESILV S09 2010-2011
J. les triplets
13. APPLIQUER UNE REGLE = opération de JOINTURE
X / AMI / Y Y / AMI / Z -> X / AMI / Z
AA ami CC
Ancien !
AA ami DD
Nouveau !
AA ami EE
Nouveau !
BB ami EE
Nouveau !
Tous les triplets TousROHMER ESILV S09 2010-2011
J. les triplets
14. UN MOTEUR, CA TOURNE …
UNE REGLE QUI S’APPLIQUE CREE DE NOUVEAUX
TRIPLETS
CES NOUVEAUX TRIPLETS PEUVENT PERMETTRE A
D’AUTRES REGLES DE S’APPLIQUER
QUAND PLUS AUCUNE REGLE NE PRODUIT DE
NOUVEAUX TRIPLETS, C’EST FINI
CA S’ARRETE TOUJOURS
CAR ???
J. ROHMER ESILV S09 2010-2011
15. LORS D’ UN TOUR SUIVANT …
X / AMI / Y Y / AMI / Z -> X / AMI / Z
AA ami CC
ANCIEN!
AA ami DD
ANCIEN!
AA ami EE
ANCIEN!
BB ami EE
ANCIEN!
AA ami GG
Nouveau !
AA ami EE
J. ROHMER ESILV S09 2010-2011
16. RELATIONS INVERSES
RELATIONS SYMETRIQUES
Traité par des règles supplémentaires
X / travaille pour / Y => Y / emploie / X
X /emploie / Y => Y /travaille pour / X
X / ami / Y => Y / ami / X
Ou mécanisme assuré par la base de données: solution
Idéliance
J. ROHMER ESILV S09 2010-2011
18. Syntaxe des Règles
Un fichier .txt de la forme:
R1,IF,?X,ami de,?Y
R1,IF,?X, est un,Personne
R1,IF,?Y,ami de,?Z
R1,THEN,?X,ami de,?Z
Convention: une variable commence par un ?
Sinon c’est une constante
J. ROHMER ESILV S09 2010-2011
19. Syntaxe de la base de faits
Un fichier .txt de la forme:
Pierre,est un,Personne
Pierre,ami de,Paul
Paul,ami de,Louis
J. ROHMER ESILV S09 2010-2011
20. Premier programme
• Lire un fichier de faits
• Lire un fichier de règles
• Faire toutes les déductions possibles
• Lister toutes les déductions nouvelles
J. ROHMER ESILV S09 2010-2011
21. Structure du programme (1)
• Lire les faits
– Vérifier que syntaxiquement correct
– Ignorer les faits incorrects
– Lister les faits incorrects
• Lire un fichier de règles
– Vérifier que syntaxiquement correct
– Ignorer les règles incorrectes
– Lister les lignes des règles incorrectes
• Lancer le moteur
– Faire toutes les déductions possibles
– Lister toutes les déductions nouvelles
J. ROHMER ESILV S09 2010-2011
22. Structure du programme (2)
• Choix simples d’implémentation
• Tous les symboles sont codés dans un dictionnaire
• La base de faits est une matrice à 3 colonnes
contenant les codes des symboles des faits
• La base de règle est une matrice à 5 colonnes
contenant les codes des symboles des règles
J. ROHMER ESILV S09 2010-2011
23. Structure des données (1)
R1,IF,?X,ami de,?Y
0 Pierre
Pierre,est un,Personne R1,IF,?X, est un,Personne
1 est un Pierre,ami de,Paul R1,IF,?Y,ami de,?Z
2 Personne Paul,ami de,Louis R1,THEN,?X,ami de,?Z
3 ami de
4 Paul 0 1 2 6 7 8 3 9
5 Louis
6 7 8 1 2
6 R1 0 3 4
6 7 9 3 10
7 IF
6 11 8 3 10
8 ?X 4 3 5
9 ?Y
10 ?Z
11 THEN
J. ROHMER ESILV S09 2010-2011
24. Structure des données (2)
• Donc on va essentiellement manipuler des matrices de codes dictionnaire
• => Classe Java: M
• Et des vecteurs de codes dictionnaire
• => Classe Java: V
• Et on a besoin d’un dictionnaire
• => Classe Java: D
J. ROHMER ESILV S09 2010-2011
25. Classe Java Vecteur « V » (suggestions et exemples)
V: un ArrayList de Integer
V ( ) /** créé un vecteur vide
V (int n,Integer Val) /** créé un vecteur de N fois Val
V(Integer I) /** créé un vecteur de 1 élément
Méthodes sur V
Int membre (Integer I) /** rend 0 si I n’est pas dans V, 1 sinon
Void Indicer (V indice) /** undice le vecteur par un vecteur d’indices
Void ajout_integer (INteger I) /** ajoute un élément à un vecteur
Void concat(V V2)b /**Concatene un vecteur à un vecteur
Integer Get (Int i) /** rend le ième élément
Void Set (Int i, Integer Val) /** affectation élément i
V Union () /** rend l’ensemble des éléments d’un vecteur
Void lister (D d) /*µ liste les symboles d’un vecteur décodés avec le dictionnaire
J. ROHMER ESILV S09 2010-2011
26. Classe Java Matrice « M » (suggestions et exemples)
M est un ArrayList de V (vecteur) /** un Arraylist de vecteurs qui sont les colonnes de la
matrice
M(String s,D d) /** matrice 1 ligne 1 colonne contenant le code de s dans D
M(Integer i) /** matrice 1 ligne 1 colonne contenant i
Void Add_Vect_C (V c) /** ajoute un vecteur à une matrice en dernière colonne
Void Add_Vect_L (V c) /** ajoute un vecteur à une matrice en dernière ligne
Void Add_Mat_C(M m) /** ajoute une matrice à droite
Void Add_Mat_L(M m) /** ajoute une matrice en bas
V getcol(int i) /** rend un vecteur égal à la i ème colonne
Void setcol (int i,V) /** remplace la ième colonne par un vecteur
Etc, etc …
J. ROHMER ESILV S09 2010-2011
27. Classe Java Dictionnaire « D » (suggestions et exemples)
D est un ArrayList de String
Méthodes
Int code(String s) /** donne le code de la chaîne s dans le dictionnaire, la rajoute si absente
String decode(int i) /** rend la chaine d’un code
V code(String[] s) /** le vecteur des codes d’un tableau de chaînes
Etc …
J. ROHMER ESILV S09 2010-2011
28. Opération clé: la jointure
• Programmation de la jointure en Java
• Une jointure va être une CLASSE Java
• JMM( M A,int iA,M B,int iB)
• Jointure entre A et B selon colonnes iA, iB
• JMM( M A,int iA,M B,int iB). get() va
rendre le résultat
J. ROHMER ESILV S09 2010-2011
29. APPLIQUER UNE REGLE = opération de JOINTURE
X / AMI / Y Y / AMI / Z -> X / AMI / Z
AA ami CC
Ancien !
AA ami DD
Nouveau !
AA ami EE
Nouveau !
BB ami EE
Nouveau !
Tous les triplets TousROHMER ESILV S09 2010-2011
J. les triplets
30. Principe de la Jointure
• Soit un élément commun E entre les deux
colonnes de la jointure
• Si il est présent nA fois dans une colonne et
nB fois dans l’autre, ceci va générer nA*nB
lignes dans le résultat
J. ROHMER ESILV S09 2010-2011
31. Exemple
LA1 AA AA LB1
AA : 2 * 1 = 2
LA2 AA BB LB2
BB : 3 * 2 = 6
LA3 BB BB LB3
CC : 1 * 1 = 1
LA4 BB EE LB4
LA5 BB CC LB5 Donc le résultat aura 9 lignes
LA6 CC FF LB6
LA7 DD GG LB7
J. ROHMER ESILV S09 2010-2011
32. Exemple
LA1 AA
AA LB1 LA1 AA AA LB1
BB LB2 LA2 AA AA LB1
LA2 AA
BB LB3 LA3 BB BB LB2
LA3 BB EE LB4 LA3 BB BB LB3
CC LB5 LA4 BB BB LB2
LA4 BB FF LB6 LA4 BB BB LB3
GG LB7 LA5 BB BB LB2
LA5 BB
LA5 BB BB LB3
LA6 CC CC LB5
LA6 CC
LA7 DD
J. ROHMER ESILV S09 2010-2011
33. LA1 AA AA LB1 LA1 AA AA LB1
BB LB2 LA2 AA AA LB1
LA2 AA
BB LB3 LA3 BB BB LB2
LA3 BB EE LB4 LA3 BB BB LB3
CC LB5 LA4 BB BB LB2
LA4 BB FF LB6 LA4 BB BB LB3
GG LB7 LA5 BB BB LB2
LA5 BB LA5 BB BB LB3
LA6 CC CC LB5
LA6 CC
LA7 DD
Il suffit de calculer les indices des lignes présentes dans le résultat:
Depuis M1: 1, 2, 3, 3, 4, 4, 5, 5, 6
Depuis M2: 1, 1, 2, 3, 2, 3, 2, 3, 5
J. ROHMER ESILV S09 2010-2011
34. Une opération intermédiaire: apparier deux vecteurs
1 1
AA AA 2 1
AA BB 3 2
BB BB 3 3
BB + EE = 4 + 2
BB CC 4 3
CC FF 5 2
DD GG 5 3
6 5
J. ROHMER ESILV S09 2010-2011
35. Classe Apparier
Apparier (V va,V vb)
Apparier(va,vb).get_ia: donne le vecteur
d’indices pour va
Apparier(va,vb).get_ib: donne le vecteur
d’indices pour vb
Bien voir: l’opération va et vb -> ia et ib
est une instance de la classe Apparier
Les résultats sont construits comme attributs
internes à l’instance
J. ROHMER ESILV S09 2010-2011
36. Lecture des fichiers de règles
et faits
Traduire un fichier en une matrice
Et codage dans un dictionnaire
Via une méthode sur une matrice de classe M
M.Lire_fichier(File F, D d)
J. ROHMER ESILV S09 2010-2011
38. Représentation d’une règle
La matrice des règles a 5 colonnes : M_regles
Calcul de l’ensemble des noms des règles:
V M_regles.getcol(0).union()
Retrouver les lignes d’une règle de nom R
m = matrice 1 ligne 1 colonne qui contient R
M_lignes_regle = Jointure(M_regles,0,m,0)
Séparer les hypothèses et les conclusions
mh = matrice 1 ligne 1 colonne qui contient le code de ‘IF’
mc=matrice 1 ligne 1 colonne qui contient le code de ‘THEN’
M_hypos_regle = Jointure(M_lignes_regle,1,mh,0)
M_concl_regle = Jointure(M_lignes_regle,1,mc,0)
J. ROHMER ESILV S09 2010-2011
39. Exécution d’une règle
X / AMI / Y Y / AMI / Z -> X / AMI / Z
A la fin des hypothèses, il faut l’ensemble de toutes
les combinaisons des variables:
(X,Y,Z, …)
⇒Construction d’une table des N-uplets
⇒C’est la matrice « M_XYZT »
⇒Où chaque colonne correspond à une variable
J. ROHMER ESILV S09 2010-2011
40. La matrice « M_XYZT »
Toutes les combinaisons des variables (comme en Prolog)
X ami Y et Y ami Z => X ami Z
=> Tableau à 3 colonnes: X,Y,Z
J. ROHMER ESILV S09 2010-2011
41. M_XYZT
X ami Y et Y ami Z => X ami Z
X Y Z
AA BB CC
AA BB DD
AA CC EE
BB CC EE
J. ROHMER ESILV S09 2010-2011
42. En fait:
Un Vecteur V_XYZT
Une Matrice M_XYZT
X Y Z
AA BB CC
AA BB DD
AA CC EE
BB CC EE
J. ROHMER ESILV S09 2010-2011
43. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
X travaille à T
X Y Z
AA BB CC
AA BB DD
AA CC EE
BB CC EE
J. ROHMER ESILV S09 2010-2011
44. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
X chef de Y
X Y Z
AA BB CC
AA BB DD
AA CC EE
BB CC EE
J. ROHMER ESILV S09 2010-2011
45. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
T habite à U
X Y Z
AA BB CC
AA BB DD
AA CC EE
BB CC EE
J. ROHMER ESILV S09 2010-2011
46. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
T habite à U
On va interdire ce cas:
X Y Z
Cela ferait un produit cartésien
Entre toutes les valeurs de
AA BB CC (X,Y,Z) d’une part et de (T,U)
AA BB DD d’autre part.
Une hypothèse –sauf la première-
AA CC EE doit avoir au moins une variable
commune avec les précédentes
BB CC EE
J. ROHMER ESILV S09 2010-2011
47. Importance de l’ordre des hypothèses
Au lieu de: Il faut écrire:
Si Si
?X ami ?Y ?X ami ?Y
?Z ami ?T ?X père ?Z
?X père ?Z ?Y père ?T
?Y père ?T ?Z ami ?Y
Alors … Alors …
J. ROHMER ESILV S09 2010-2011
48. Restriction
Pour l’instant, on se limite à des hypothèses
ne comportant que des variables, et pas des
constantes:
?X ami ?Y est permis
?X ami Paul est interdit
(sera étendu dans un second temps)
J. ROHMER ESILV S09 2010-2011
49. Exécution d’une Règle
Une règle est représentée par deux M:
M_H : matrice 3 colonnes de ses hypothèses
M_C : matrice 3 colonnes de ses conclusions
Programme:
Exécuter la première hypothèse
Exécuter les hypothèses suivantes
Exécuter chaque conclusion
J. ROHMER ESILV S09 2010-2011
50. Cœur du Moteur
C_delta_global = M vide
C_delta_un_tour = M contenant une valeur bidon (non vide)
Tant que C_delta_un_tour non vide Faire
C_delta_un_tour = vide
Pour chaque règle
Exécuter la règle sur la base de faits
Soient C_delta_une_regle les conclusions
C_delta_une_regle = C_delta_une_regle moins Base_de_Faits
Si C_delta_une_regle non vide:
Ajouter C_delta_une_regle à Base_de _Faits
Ajouter C_delta_une_regle à C_delta_un_tour
Ajouter C_delta_une_regle à C_delta_global
J. ROHMER ESILV S09 2010-2011
51. Exécution de la première hypothèse d’une règle
Exemple: X ami Y
Cela consiste à initialiser
V_XYZT
M_XYZT
Mettre les variables X et Y dans V_XYZT
Mettre dans M_XYZT tous les X et Y tels que X R Y
Cas particulier à traiter plus tard:
Une hypothèse peut très bien être de la forme X R X
Exemple: X est l’employeur de X
J. ROHMER ESILV S09 2010-2011
52. Exécution des Hypothèses Suivantes
D’une règle
V_XYZT et M_XYZT ont déjà des valeurs
Que l’on va modifier avec la nouvelle
hypothèse
J. ROHMER ESILV S09 2010-2011
53. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
Y travaille à T
X Y Z Déterminer la position de Y et T dans
V_XYZT
Pos_Y = 1
AA BB CC
Pos_T = Hors (convention)
AA BB DD Donc méthode sur vecteur:
Int Get_position (Int)
AA CC EE
Il faut retrouver dans la base de faits
BB CC EE les Y déjà présents dans M_XYZT qui
travaillent pour des T …
J. ROHMER ESILV S09 2010-2011
54. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
Y travaille à T
Calculer un extrait de la base de faits
X Y Z BB travaille DD1
CC travaille DD2
AA BB CC CC travaille DD3
AA BB DD HH travaille DD4
AA CC EE
BB CC EE
J. ROHMER ESILV S09 2010-2011
55. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …Y travaille à T
Faire la jointure entre M_xyzt et
l’extrait de la bdf:
BB travaille DD1
X Y Z CC travaille DD2
CC travaille DD3
AA BB CC HH travaille DD4
AA BB DD
AA CC EE C’est-à-dire:
JMM (M_XYZT, 1, M_Extrait, 0)
BB CC EE
J. ROHMER ESILV S09 2010-2011
56. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …Y travaille à T
BB travaille DD1
X Y Z CC travaille DD2
CC travaille DD3
AA BB CC HH travaille DD4
AA BB DD
AA CC EE C’est-à-dire:
JMM (M_XYZT, 1, M_Extrait, 0)
BB CC EE
J. ROHMER ESILV S09 2010-2011
57. Ce qui donne un nouveau M_XYZT …
AA BB CC DD1
BB BB DD DD1
AA CC EE DD2
BB CC EE DD2
AA CC EE DD3
BB CC EE DD3
… et un nouveau V_XYZT X Y Z T
en rajoutant T
J. ROHMER ESILV S09 2010-2011
58. Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
X chef de Y
X Y Z Déterminer la position de X et Y dans
V_XYZT
Pos_X= 0
AA BB CC
Pos_Y = 1
AA BB DD
Il faut retrouver dans la base de faits
AA CC EE les X et Y déjà présents dans
M_XYZT tels que X travaille pour Y
BB CC EE
J. ROHMER ESILV S09 2010-2011
59. Exécution des Conclusions d’une
Règle
On a exécuté toutes les hypothèses d’une règle
On a V_xyzt et M_xyzt qui nous donnent toutes les
combinaisons de variables qui satisfont toutes les
hypothèses.
Important: M_xyzt peut être vide: aucune ligne, il n’y a
aucune solution !
(On peut arrêter l’exécution d’une règle dès qu’une
hypothèse a rendu M_xyzt vide)
Si M_xyzt n’est pas vide, on va générer chacune des
conclusions J. ROHMER ESILV S09 2010-2011
60. Si une nouvelle hypothèse arrive
Si X ami Y et Y ami Z alors X ami Z
Rechercher les positions de X et Z dans
V_xyzt: 0 et 2
Construire la matrice de 2 colonnes avec
X Y Z les colonnes 0 et 2 de M_xyzt et ajouter
« ami » au milieu
AA BB CC AA ami CC
AA BB DD AA ami DD
AA CC DD AA ami DD
BB CC EE BB ami EE
Et dédoublonnez les lignes présentes plusieurs fois (union)
J. ROHMER ESILV S09 2010-2011
61. Génération d’une Conclusion (suite)
Les conclusions sont ajoutées au
C_delta_une_regle si elles ne sont pas déjà
présentes dans la base de faits
J. ROHMER ESILV S09 2010-2011
62. Autres Méthodes Utiles
Dédoublonnage d’une matrice: supprimer les
doublons de lignes de M1
Intersection de deux matrices M1 et M2 : les lignes
qui sont présentes dans les deux
M1 moins M2: ne garder de M1 que les lignes qui ne
sont pas présentes dans M2
Implémentation possible de ces opérations: rendre le
vecteur des indices des lignes de M1 à conserver
(comme dans le cas de la méthodes Apparier)
J. ROHMER ESILV S09 2010-2011
63. Note d’implémentation
Les fonctions Apparier, Dédoublonnage, Intersection,
Moins peuvent s’implémenter:
-- de manière naïve avec des boucles imbriquées
-- optimisées avec des tris
-- optimisées avec du h-code
J. ROHMER ESILV S09 2010-2011
64. Mieux que la saturation naïve:
La méthode « DELTA DRIVEN »
(J. Rohmer 1982)
J. ROHMER ESILV S09 2010-2011
65. LA METHODE NAIVE DE SATURATION: A CHAQUE
FOIS ON REFAIT LES MEMES CALCULS …
POUR OPTIMISER:
1) IL FAUT RELANCER LE MOTEUR SEULEMENT
AVEC LES NOUVEAUX TRIPLETS
2) IL FAUT ALLER CHERCHER LES REGLES QUE LES
NOUVEAUX VA EXCITER
C’EST L’ALGORITHME:
« DELTA DRIVEN » (JR 1982)
J. ROHMER ESILV S09 2010-2011
66. Algorithme DELTA-DRIVEN
Principe: intégrer les dérivées des règles
P Q => R
se transforme en ∆PQ ∪ ∆QP => ∆R
Exemple:
X / ami / Y et Y / ami / Z => X / ami / Z
se transforme en deux règles différentes:
X / ∆ami / Y et Y / ami / Z => X / ∆ami / Z
Y / ∆ami / Z et XROHMER ESILVY 2010-2011X / ∆ami / Z
J. / ami / S09 =>
67. X / ∆ami / Y et Y / ami / Z => X / ∆ami / Z
« les nouveaux amis de mes amis sont mes
nouveaux amis » !
Distinction entre la base des triplets et la base des
« DELTA TRIPLETS »
J. ROHMER ESILV S09 2010-2011
68. X / ∆ami / Y et Y / ami / Z => X / ∆ami / Z
AA ami BB AA ami CC
BB ami CC
DELTA de DELTA de
DEPART ARRIVEE
J. ROHMER ESILV S09 2010-2011
69. ECORCHE FINAL DU MOTEUR
REGLES
H1 H2 => C1
D’ORIGINE
H3 H4 H5 => C2 C3
BASE de Triplets CUMUL des Delta
∆
∆H1 H2 => ∆C1
New
∆H2 H1 => ∆C1
DELTA Only
∆H3 H4 H5 => ∆C2 ∆C3
REGLES !
∆H4 H3 H5 => ∆C2 ∆C3
∆H5 H3 H4 => ∆C2 ∆C3
∆ J. ROHMER ESILV S09 2010-2011
70. Points Importants:
Réordonner les hypothèses des règles
Y compris pour les Delta-Règles
Opérations de base sur des tables
-- sélection
-- jointure
Donc:
Pour travail en mémoire (par exemple en Java): créer des objets de
type table, et des opérateurs de sélection et jointure sur table
Pour travail sur de gros volumes, ce moteur peut être interprété et
même compilé en SQL
J. ROHMER ESILV S09 2010-2011
71. EVALUATION DES HYPOTHESES D’UNE REGLE:
Construire le produit cartésien des variables:
X / habite à Z / et Y / habite à T / et X / ami de Y /
et T / situé en / France et Y / est né à / Z
X Z Y T
J. ROHMER ESILV S09 2010-2011
72. CECI C’ETAIT LE
CHAINAGE AVANT: « on cherche tout sans but »
MAIS ON VEUT SOUVENT FAIRE
DU CHAINAGE ARRIERE: « on a un but »
« Quels sont les Amis de Pierre » ?
« Est-ce que Pierre et Paul sont Amis » ?
C’est plus délicat …
PROLOG fait du chaînage arrière, mais il peut boucler
METHODE D’ALEXANDRE (Rohmer, Lescoeur, Kérisit 1985)
Transforme le chaînage arrière en chaînage avant par
transformation des règles selon les 2010-2011
J. ROHMER ESILV S09
buts, sans boucler
73. PRINCIPE DE LA METHODE D’ALEXANDRE (Très simplifié)
Soit la règle P Q => R
Elle se transforme en trois règles:
Si j’ai le problème de trouver R
Bien sûr les règles concluant sur P et
Alors j’ai le problème de trouver P Q seront transformées de la même
Et je dois continuer après P manière
Si j’ai la solution à P
Et que je dois continuer après P
Baptisée d’après Alexandre le Grand
Alors j’ai le problème de trouver Q
qui trancha le nœud gordien: ici on
Et je dois continuer après Q coupe aussi un prédicat en 3 faits:
•Un problème
Si j’ai la solution à Q
Et que dois continuer après Q
•Une continuation
Alors j’ai la solution à R •Une solution
J. ROHMER ESILV S09 2010-2011
74. LE CELEBRE PROBLEME DES ANCETRES
X Parent Y => X Anc Y
(X Parent Y) (Y Anc Z) => X Anc Z
On transforme les règles en introduisant les Problèmes, Continuations et Solutions:
(Pb_Anc_10 On X) (X Parent Y) => X Sol_Anc_10 Y
(Pb_Anc_10 On X) (X Parent Y) => (Pb_Anc_10 On Y) (X Cont_Anc_10 Y)
(Y Sol_Anc_10 Z) (X Cont_Anc_10 Y) => X Sol_Anc_10 Z
J. ROHMER ESILV S09 2010-2011
76. APPLICATIONS AUX RESEAUX SOCIAUX
« SOCIAL COGNITIVE RULES »
We can formulate several theories about Trust:
I trust people trusted by people I trust:
(X trusts Y) (Y trusts Z) => X trusts Z (transitive closure).
Another theory is:
I trust people who trust the same people as me:
(X trusts Y) (Z trusts Y) => X trusts Z
(which is quite different from a S09 2010-2011 closure)
J. ROHMER ESILV
transitive
77. (X trusts Y) (Z trusts Y) => X trusts Z
Se transforme via la Méthode d’Alexandre en:
R1: (Pb_Trust_10 On X) (X Trust Y) => (Pb_Trust_01 On Y) (Y
Cont_Trust_10 X)
R2: (X Cont_Trust_10 Y) (Z Trust Y) => X Sol_Trust_10 Z
R3 : (X Cont_Trust_10 Y) (Z Sol_Trust_10 Y) => X Sol_Trust_10 Z
R4: (Pb_Trust_10 On X) (X Sol_Trust_10 Y) => (Pb_Trust_01 On Y) (X
Cont_Trust_10 Y)
R5: (Pb_Trust_01 On Z) (Z Trust Y) => (Pb_Trust_01 On Y) (Z
Cont_Trust_01 Y)
R6: (Pb_Trust_01 On Z) (Z Sol_Trust_01 Y) => (Pb_Trust_01 On Y) (Z
Cont_Trust_01 Y)
R7: (X Sol_Trust_01 Y) (Z Cont_Trust_01 Y) => X Sol_Trust_01 Z
R8: (X Trust Y) (Z Cont_Trust_01 Y) => X Sol_Trust_01 Z
J. ROHMER ESILV S09 2010-2011
78. PASSER DU MOTEUR D’INFERENCE DELTA-DRIVEN
A UNE ARCHITECTURE DE SYSTEME REACTIVE
(parfois appelée aussi EVENT- DRIVEN)
PRINCIPE:
Quand des éléments d’information nouveaux arrivent de
l’extérieur (messages, importations de fichiers, saisie manuelle)
On va faire comme si c’étaient des conclusions de règles, on les
prend comme des Delta ∆
Et on lance les Delta-Règles avec
Qui vont relancer tout le moteur
J. ROHMER ESILV S09 2010-2011
80. ARCHITECTURE DELTA-DRIVEN
+ METHODE D’ ALEXANDRE
= RAFRAICHISSEMENT AUTOMATIQUE
DES ALERTES
DES CONSIGNES DE RECHERCHE
DES CONSIGNES DE SURVEILLANCE
PERMANENTES
EN MODE « DATA STREAM »
J. ROHMER ESILV S09 2010-2011
81. On veut surveiller « Qui sont les amis de Paul ?»
Premiers résultats:
Installation des delta
Les amis actuels de Paul
règles d’Alexandre
qui concluent sur
« amis de quelqu’un » 1 3
Injection du problème
2
« je cherche les amis de
Paul » comme nouvelle 5
information
Déduction permanente de
nouveaux amis de Paul, via
Arrivée permanente de
nouvelles infos ‘lointaines’:
4 le jeu des règles d’Alexandre
avec les
« Max ami de Leo » Problèmes
« Henri ennemi de Fred » Continuations
J. ROHMER ESILV S09 2010-2011
Solutions