SlideShare uma empresa Scribd logo
1 de 81
Baixar para ler offline
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
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
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
« 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
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
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
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
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
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
MOTEUR DE REGLES / MOTEUR D’INFERENCE


UN ENSEMBLE DE TRIPLETS


+
UN ENSEMBLE DE REGLES




DE NOUVEAUX TRIPLETS



              J. ROHMER ESILV S09 2010-2011
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
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
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
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
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
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
Implémentation Naïve de la
       Saturation




       J. ROHMER ESILV S09 2010-2011
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
REPRESENTATION ET
EXECUTION D’UNE REGLE




      J. ROHMER ESILV S09 2010-2011
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Mieux que la saturation naïve:
La méthode « DELTA DRIVEN »
       (J. Rohmer 1982)




          J. ROHMER ESILV S09 2010-2011
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
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 =>
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
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
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
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
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
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
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
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
J. ROHMER ESILV S09 2010-2011
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
(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
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
ARCHITECTURE REACTIVE: DELTA-DRIVEN

Mise à jour
de la base




NOUVELLE
                       Relance du moteur
INFORMATION

                J. ROHMER ESILV S09 2010-2011
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
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

Mais conteúdo relacionado

Mais de Jean Rohmer

Pub microsoft et health data hub
Pub microsoft et health data hubPub microsoft et health data hub
Pub microsoft et health data hubJean Rohmer
 
De la pub microsoft dans les articles sur le health data hub
De la pub microsoft dans les articles sur le health data hubDe la pub microsoft dans les articles sur le health data hub
De la pub microsoft dans les articles sur le health data hubJean Rohmer
 
Les 40 ans de l'Institut Fredrik Bull avec liens video: 40 ans d'informatique...
Les 40 ans de l'Institut Fredrik Bull avec liens video: 40 ans d'informatique...Les 40 ans de l'Institut Fredrik Bull avec liens video: 40 ans d'informatique...
Les 40 ans de l'Institut Fredrik Bull avec liens video: 40 ans d'informatique...Jean Rohmer
 
Compter les triangles en PROLOG
Compter les triangles en PROLOGCompter les triangles en PROLOG
Compter les triangles en PROLOGJean Rohmer
 
Ideliance mental reseau semantique
Ideliance mental reseau semantiqueIdeliance mental reseau semantique
Ideliance mental reseau semantiqueJean Rohmer
 
Arithmetics with symbolic Artificial Intelligence and Prolog: it's a child's...
Arithmetics with symbolic Artificial Intelligence  and Prolog: it's a child's...Arithmetics with symbolic Artificial Intelligence  and Prolog: it's a child's...
Arithmetics with symbolic Artificial Intelligence and Prolog: it's a child's...Jean Rohmer
 
Semantic architectures for Artificial Intelligence
Semantic architectures for Artificial IntelligenceSemantic architectures for Artificial Intelligence
Semantic architectures for Artificial IntelligenceJean Rohmer
 
L'informatique n'est pas l'amie des données
L'informatique n'est pas l'amie des donnéesL'informatique n'est pas l'amie des données
L'informatique n'est pas l'amie des donnéesJean Rohmer
 
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!Jean Rohmer
 
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...Jean Rohmer
 

Mais de Jean Rohmer (10)

Pub microsoft et health data hub
Pub microsoft et health data hubPub microsoft et health data hub
Pub microsoft et health data hub
 
De la pub microsoft dans les articles sur le health data hub
De la pub microsoft dans les articles sur le health data hubDe la pub microsoft dans les articles sur le health data hub
De la pub microsoft dans les articles sur le health data hub
 
Les 40 ans de l'Institut Fredrik Bull avec liens video: 40 ans d'informatique...
Les 40 ans de l'Institut Fredrik Bull avec liens video: 40 ans d'informatique...Les 40 ans de l'Institut Fredrik Bull avec liens video: 40 ans d'informatique...
Les 40 ans de l'Institut Fredrik Bull avec liens video: 40 ans d'informatique...
 
Compter les triangles en PROLOG
Compter les triangles en PROLOGCompter les triangles en PROLOG
Compter les triangles en PROLOG
 
Ideliance mental reseau semantique
Ideliance mental reseau semantiqueIdeliance mental reseau semantique
Ideliance mental reseau semantique
 
Arithmetics with symbolic Artificial Intelligence and Prolog: it's a child's...
Arithmetics with symbolic Artificial Intelligence  and Prolog: it's a child's...Arithmetics with symbolic Artificial Intelligence  and Prolog: it's a child's...
Arithmetics with symbolic Artificial Intelligence and Prolog: it's a child's...
 
Semantic architectures for Artificial Intelligence
Semantic architectures for Artificial IntelligenceSemantic architectures for Artificial Intelligence
Semantic architectures for Artificial Intelligence
 
L'informatique n'est pas l'amie des données
L'informatique n'est pas l'amie des donnéesL'informatique n'est pas l'amie des données
L'informatique n'est pas l'amie des données
 
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
 
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
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
  • 17. Implémentation Naïve de la Saturation 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
  • 37. REPRESENTATION ET EXECUTION D’UNE REGLE 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
  • 75. 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
  • 79. ARCHITECTURE REACTIVE: DELTA-DRIVEN Mise à jour de la base NOUVELLE Relance du moteur INFORMATION 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