This document explains how to build a deductive inference engine for rule-based systems, business rules. It leads to a useful architecure for Complex Event Processing and Data streams
1. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
REGLES, MOTEURs D’INFERENCE
ET ARCHITECTURES REACTIVES
(Version Etendue)
Cours de 4 ème année ESILV Option Informatique
Jean Rohmer
1
2. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
2
3. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
3
4. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
« 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
4
5. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
5
6. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
Un simple tableau à 3 colonnes
6
7. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
TRT Fait partie de THALES
THALES A un effectif
de
62000
PIERRE Travaille
pour
TRT
TRT France Fait partie de TRT
PIERRE dirige TRT France
TRT France Est situé à Palaiseau
Ca se dessine …
THALES
Fait partie de
TRT
A un effectif de
62000
PIERRE
Travaille pour
TRT France
Fait partie de
Est situé à
PALAISEAU
dirige
7
8. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
MODELE SVCI: 4 éléments
10
20
30
40
50
8
9. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
TRT Fait partie de THALES
THALES A un effectif de 62000
PIERRE Travaille pour TRT France
TRT France Fait partie de TRT
TRT France Est situé à Palaiseau
MODELE SVCI: 4 éléments
10
20
30
40
50
10 depuis 2002
20 En 2012
30 Parce que 50
Paul Dit que 99
101 à l’occasion de Anniversaire
de Marie
77
88
99
101
110
9
10. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Ca se dessine …
THALES
Fait partie de
TRT
A un effectif de
62000
PIERRE
Travaille pour
TRT France
Fait partie de
Est situé à
PALAISEAU
dirige
2002
depuis
2012
Parce que
PAUL
Dit que
à l’occasion de
Anniversaire
Marie
10
11. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
REGLES …
« LES AMIS DE MES AMIS SONT MES AMIS »
X / AMI / Y
et
Y / AMI / Z
=>
X / AMI / Z
11
12. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
EN GENERAL PLUSIEURS REGLES …
« LES AMIS DE MES ENNEMIS SONT MES ENNEMIS »
« LES ENNEMIS DE MES AMIS SONT MES ENNEMIS »
« LES ENNEMIS DE MES ENNEMIS SONT MES AMIS »
« LES ANCETRES DE MES ANCETRES SONT MES
ANCETRES »
« MES PARENTS SONR MES ANCETRES »
« MES ANCETRES SONT MES AMIS »
Etc ….
NB: on ne s’occupe pas ici de savoir si ces règles ont du sens
ou non, si elles sont contradictoires …On se contente de les
exécuter
12
13. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
13
14. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
MOTEUR DE REGLES / MOTEUR D’INFERENCE
UN ENSEMBLE DE TRIPLETS
+
UN ENSEMBLE DE REGLES
DE NOUVEAUX TRIPLETS
14
15. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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 »)
15
16. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
APPLIQUER UNE REGLE
X / AMI / Y Y / AMI / Z -> X / AMI / Z
AA ami BB
AA ami CC
BB ami CC
BB ami DD
CC ami EE
EE ami GG
AA ami BB
AA ami CC
BB ami CC
BB ami DD
CC ami EE
FF ami GG
Tous les triplets Tous les triplets 16
17. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
APPLIQUER UNE REGLE = opération de JOINTURE
X / AMI / Y Y / AMI / Z -> X / AMI / Z
AA ami CC
AA ami DD
AA ami EE
BB ami EE
Ancien !
Nouveau !
Nouveau !
Nouveau !
Tous les triplets Tous les triplets 17
18. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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 ??? (je vous laisse trouver)
18
19. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
LORS D’ UN TOUR SUIVANT …
X / AMI / Y Y / AMI / Z -> X / AMI / Z
AA ami CC
AA ami DD
AA ami EE
BB ami EE
AA ami GG
AA ami EE
Nouveau !
ANCIEN!
ANCIEN!
ANCIEN!
ANCIEN!
19
20. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
20
21. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Implémentation Naïve de la
Saturation
21
22. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
R2,IF,?X,ennemi,?Y
R2,IF,?Y,ami,?Z
R2,THEN,?X,ennemi,?Z
Convention: une variable commence par un « ? » sinon c’est
une constante 22
23. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Syntaxe de la base de faits
Un fichier .txt de la forme:
Pierre,est un,Personne
Pierre,ami de,Paul
Paul,ami de,Louis
Max,ennemi,Pierre
23
24. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
24
25. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
25
26. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
26
27. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Structure des données (1)
Pierre,est un,Personne
Pierre,ami de,Paul
Paul,ami de,Louis
0 Pierre
1 est un
2 Personne
3 ami de
4 Paul
5 Louis
6 R1
7 IF
8 ?X
9 ?Y
10 ?Z
11 THEN
R1,IF,?X,ami de,?Y
R1,IF,?X, est un,Personne
R1,IF,?Y,ami de,?Z
R1,THEN,?X,ami de,?Z
0 1 2
0 3 4
4 3 5
6 7 8 3 9
6 7 8 1 2
6 7 9 3 10
6 11 8 3 10
27
28. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
28
29. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
29
30. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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 …
30
31. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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 …
31
32. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
32
33. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
APPLIQUER UNE REGLE = opération de JOINTURE
X / AMI / Y Y / AMI / Z -> X / AMI / Z
AA ami CC
AA ami DD
AA ami EE
BB ami EE
Ancien !
Nouveau !
Nouveau !
Nouveau !
Tous les triplets Tous les triplets 33
34. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
34
35. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Exemple
LA1 AA
LA2 AA
LA3 BB
LA4 BB
LA5 BB
LA6 CC
LA7 DD
AA LB1
BB LB2
BB LB3
EE LB4
CC LB5
FF LB6
GG LB7
AA : 2 * 1 = 2
BB : 3 * 2 = 6
CC : 1 * 1 = 1
Donc le résultat aura 9 lignes
35
36. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Exemple
LA1 AA
LA2 AA
LA3 BB
LA4 BB
LA5 BB
LA6 CC
LA7 DD
AA LB1
BB LB2
BB LB3
EE LB4
CC LB5
FF LB6
GG LB7
LA1 AA AA LB1
LA2 AA AA LB1
LA3 BB BB LB2
LA3 BB BB LB3
LA4 BB BB LB2
LA4 BB BB LB3
LA5 BB BB LB2
LA5 BB BB LB3
LA6 CC CC LB5
36
37. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
LA1 AA
LA2 AA
LA3 BB
LA4 BB
LA5 BB
LA6 CC
LA7 DD
AA LB1
BB LB2
BB LB3
EE LB4
CC LB5
FF LB6
GG LB7
LA1 AA AA LB1
LA2 AA AA LB1
LA3 BB BB LB2
LA3 BB BB LB3
LA4 BB BB LB2
LA4 BB BB LB3
LA5 BB BB LB2
LA5 BB BB LB3
LA6 CC CC LB5
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
37
38. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Une opération intermédiaire: apparier deux vecteurs
AA
BB
BB
EE
CC
FF
GG
AA
AA
BB
BB
BB
CC
DD
1
2
3
3
4
4
5
5
6
+ =
1
1
2
3
2
3
2
3
5
+
38
39. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
39
40. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Principes du Moteur d’Inférence en
Saturation Naïve
• On part d’un fichier de faits, traduit en une matrice de 3
colonnes M_Faits
• Et d’un fichier de règles, traduit en une matrice de 5
colonnes M_Regles
• On fait tourner le moteur jusqu’à ce qu’il ne produise plus
de nouvelles conclusions
• A chaque tour du moteur, on exécute toutes les règles, qui
vont produire des conclusions. On ajoute les conclusions
nouvelles à la base de faits
• Exécution d’une règle:
– Exécuter toutes les hypothèses (c’est le cœur de
l’algorithme)
– Exécuter toutes les conclusions
• A la fin, on sort le fichier des conclusions nouvelles
40
41. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Données Principales
• Dictionnaire
• M_Faits
• M_Regles
• M_Delta_Global: la totalité des nouveaux faits
accumulée
• M_Delta_Un_Tour: les nouveaux faits produits
par un tour du moteur
• M_Delta_Une_Regle: les nouveaux faits produits
par l’exécution d’une règle
41
42. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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)
42
43. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
REPRESENTATION ET
EXECUTION D’UNE REGLE
43
44. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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)
44
45. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
NOTES DE PROGRAMMATION
Il est utile de faire un constructeur de matrice qui créé une
matrice constituée du code d’une unique chaîne de
caractères:
M(‘IF’) M(‘THEN’)
Utilisable par exemple dans
JMM(M_regles,1,M(‘IF’)).
On pourrait aussi encapsuler ça dans une méthode qui filtre
une matrice
M.filtre(1, ’IF’) sur une colonne donnée
45
46. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Exécution d’une règle
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
X / AMI / Y Y / AMI / Z -> X / AMI / Z
46
47. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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 Attention!:
Autant de colonnes
que de variables (4)
et non qu’autant
d’hypothèses (5)!
C’est comme trouver
toutes les solutions
d’une équation en
X,Y,Z,T
47
48. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
48
49. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
49
50. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Donc:
Un Vecteur V_XYZT qui nomme les colonnes par un nom de variable
Une Matrice M_XYZT
AA BB CC
AA BB DD
AA CC EE
BB CC EE
X Y Z
On représente toutes les
combinaisons possibles
des variables qui satisfont
les conditions en
hypothèses
50
51. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
T habite à U
AA BB CC
AA BB DD
AA CC EE
BB CC EE
X Y Z
On va interdire ce cas:
Cela ferait un produit cartésien
Entre toutes les valeurs de
(X,Y,Z) d’une part et de (T,U)
d’autre part.
Une hypothèse –sauf la
première- doit avoir au moins
une variable commune avec les
précédentes
NB: on peut aussi l’autoriser; il suffit de
construire le produit cartésien …
51
52. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Ce qui revient à dire: Importance de l’ordre des
hypothèses
Au lieu de:
Si
?X ami ?Y
?Z ami ?T
?X père ?Z
?Y père ?T
Alors …
Il faut écrire:
Si
?X ami ?Y
?X père ?Z
?Y père ?T
?Z ami ?T
Alors …
CF Optimisation des requêtes SQL
52
53. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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)
53
54. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
54
55. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Exécution de la première hypothèse d’une règle (1)
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
55
56. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Exécution de la première hypothèse d’une règle (2)
Exemple: X ami Y
Cela consiste à initialiser
V_XYZT
M_XYZT
En faisant
Mettre les variables X et Y dans V_XYZT
Mettre dans M_XYZT tous les X et Y tels que X R Y
Pour cela, il suffit de faire une jointure entre la base de faits et la matrice mr =
1 ligne 1 colonne constituée du seul élément R
mr = new M(‘R’)
JMM(Base de Faits,1,mr,0)
Et d’initialiser M_XYZT avec les colonnes contenant les sujets et les
compléments de la jointure.
56
57. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
AA ami CC
AA ami BB
AA ami EE
BB ami EE
X Y
Si la première hypothèse est X ami Y
1) On recherche tous les faits « ami »
2) On initialise V_XYZT et M_XYZT
AA CC
AA BB
AA EE
BB EE
V_XYZT :
M_XYZT :
57
58. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
58
59. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
Y travaille à T
AA BB CC
AA BB DD
AA CC EE
BB CC EE
X Y Z Déterminer la position de Y et T dans
V_XYZT
Pos_Y = 1
Pos_T = Hors (convention)
Donc méthode sur vecteur:
Int Get_position (Int)
Il faut retrouver dans la base de faits
les Y déjà présents dans M_XYZT qui
travaillent pour des T …
59
60. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
Y travaille à T
AA BB CC
AA BB DD
AA CC EE
BB CC EE
X Y Z
Calculer un extrait de la base de faits
BB travaille DD1
CC travaille DD2
CC travaille DD3
HH travaille DD4
60
61. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …Y travaille à T
AA BB CC
AA BB DD
AA CC EE
BB CC EE
X Y Z
Faire la jointure entre M_xyzt et
l’extrait de la bdf:
BB travaille DD1
CC travaille DD2
CC travaille DD3
HH travaille DD4
C’est-à-dire:
JMM (M_XYZT, 1, M_Extrait, 0)
61
62. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …Y travaille à T
AA BB CC
AA BB DD
AA CC EE
BB CC EE
X Y Z
BB travaille DD1
CC travaille DD2
CC travaille DD3
HH travaille DD4
C’est-à-dire:
JMM (M_XYZT, 1, M_Extrait, 0)
62
63. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
en rajoutant T
X Y Z T
63
64. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Si une nouvelle hypothèse arrive
X ami Y et Y ami Z et …
X chef de Y
AA BB CC
AA BB DD
AA CC EE
BB CC EE
X Y Z
Déterminer la position de X et Y dans
V_XYZT
Pos_X= 0
Pos_Y = 1
Il faut retrouver dans la base de faits les X et
Y déjà présents dans M_XYZT tels que X
travaille pour Y
64
Ici, on n’ajoute pas de nouvelle colonne, car
pas de nouvelle variable. On filtre: on garde
seulement les lignes dont le couple X, Y
vérifie X chef de Y, donc est présent dans une
ligne de l’extrait
65. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
IMPORTANT
Pour les hypothèses suivantes (après la première) il y
a trois cas à traiter
?Z R ?T
?Z est une ancienne variable et ?T est une nouvelle variable
?Z est une nouvelle variable et ?T est une ancienne variable
?Z est une ancienne variable et ?T est une ancienne variable
Rappel: le cas nouvelle / nouvelle est interdit (sauf à construire le produit
cartésien)
Dans chacun des trois cas, il y a des jointures différentes à faire entre
M_xyzt et la base de faits
65
66. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
66
67. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Si X ami Y et Y ami Z alors X ami Z
AA ami CC
AA ami DD
AA ami DD
BB ami EE
X Y Z
Rechercher les positions de X et Z dans
V_xyzt: 0 et 2
Construire la matrice de 2 colonnes avec
les colonnes 0 et 2 de M_xyzt et ajouter
« ami » au milieu
AA BB CC
AA BB DD
AA CC DD
BB CC EE
Et dédoublonnez les lignes présentes plusieurs fois (union)
67
68. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Génération d’une Conclusion (suite)
Les conclusions sont ajoutées au
M_delta_une_regle si elles ne sont pas déjà
présentes dans la base de faits
68
69. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Cœur du Moteur
M_delta_global = M vide
M_delta_un_tour = M contenant une valeur bidon (non vide)
Tant que M_delta_un_tour non vide Faire
M_delta_un_tour = vide
Pour chaque règle
Exécuter la règle sur la base de faits
Soient M_delta_une_regle les conclusions
M_delta_une_regle = M_delta_une_regle moins Base_de_Faits
Si M_delta_une_regle non vide:
Ajouter M_delta_une_regle à M_Faits
Ajouter M_delta_une_regle à M_delta_un_tour
Ajouter M_delta_une_regle à M_delta_global
69
70. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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)
70
71. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
71
72. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Mieux que la saturation naïve:
La méthode « DELTA DRIVEN »
(J. Rohmer 1982)
72
73. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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 VONT EXCITER
C’EST L’ALGORITHME:
« DELTA DRIVEN » (JR 1982)
73
74. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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 X / ami / Y => X / ∆ami / Z 74
75. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
Y / ∆ami / Z et X / ami / Y => X / ∆ami / Z
« les amis de mes nouveaux amis sont mes
nouveaux amis » !
Distinction entre base des triplets et base des « DELTA TRIPLETS »
X / ∆ami / Y et Y / ami / Z => X / ∆ami / Z
« les nouveaux amis de mes amis sont mes
nouveaux amis » !
Mais aussi !:
75
76. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
X / ∆ami / Y et Y / ami / Z => X / ∆ami / Z
AA ami BB
BB ami CC
AA ami CC
DELTA de
DEPART
DELTA de
ARRIVEE
76
77. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
ECORCHE FINAL DU MOTEUR
REGLES
D’ORIGINE
H1 H2
H3 H4 H5
=> C1
=> C2 C3
BASE de Triplets CUMUL des Delta
H2
H1
H4 H5
H3 H5
H3 H4
=> ∆∆∆∆C1
=> ∆∆∆∆C1
=> ∆∆∆∆C2 ∆∆∆∆C3
=> ∆∆∆∆C2 ∆∆∆∆C3
=> ∆∆∆∆C2 ∆∆∆∆C3
∆∆∆∆
∆∆∆∆
∆∆∆∆H1
∆∆∆∆H2
∆∆∆∆H3
∆∆∆∆H4
∆∆∆∆H5
DELTA
REGLES
New
Only
!
77
78. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
78
79. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
LA 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 buts, sans boucler
Cette méthode fut la première à implémenter efficacement le
DATALOG, (http://en.wikipedia.org/wiki/Datalog)
79
80. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
Alors j’ai le problème de trouver P
Et je dois continuer après P
Si j’ai la solution à P
Et que je dois continuer après P
Alors j’ai le problème de trouver Q
Et je dois continuer après Q
Si j’ai la solution à Q
Et que dois continuer après Q
Alors j’ai la solution à R
Bien sûr les règles concluant sur P et
Q seront transformées de la même
manière
Baptisée d’après Alexandre le Grand
qui trancha le nœud gordien: ici on
coupe aussi un prédicat en 3 faits:
•Un problème
•Une continuation
•Une solution
80
81. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
LE CELEBRE PROBLEME DES ANCETRES
81
83. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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 transitive closure) 83
84. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
(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
84
85. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
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
85
86. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
NOUVELLE
INFORMATION
ARCHITECTURE REACTIVE: DELTA-DRIVEN
Relance du moteur
Mise à jour
de la base
86
87. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
ARCHITECTURE DELTA-DRIVEN
+ METHODE D’ALEXANDRE
= RAFRAICHISSEMENT AUTOMATIQUE
DES ALERTES
DES CONSIGNES DE RECHERCHE
DES CONSIGNES DE SURVEILLANCE
PERMANENTES
EN MODE « DATA STREAM »
87
88. J. ROHMER ESILV S08 2012-2013
INTELLIGENCE ARTIFICIELLE
On veut surveiller « Qui sont les amis de Paul ?»
Installation des delta
règles d’Alexandre
qui concluent sur
« amis de quelqu’un »
Injection du problème
« je cherche les amis de
Paul » comme nouvelle
information
Premiers résultats:
Les amis actuels de Paul
Arrivée permanente de
nouvelles infos ‘lointaines’:
« Max ami de Leo »
« Henri ennemi de Fred »
Déduction permanente de
nouveaux amis de Paul, via
le jeu des règles d’Alexandre
avec les
Problèmes
Continuations
Solutions
1
2
3
4
5
88