Corrigé lab3 : Chaînage avant et arrière


Question 1

En chaînage avant, il suffit de lancer le système (fonction interface do-search de votre moteur d'inférence à chaînage avant par exemple) pour trouver tous les faits qui peuvent être établis d'après la base des faits initiaux et les règles. Ensuite on examine le contenu de la base de faits pour voir les faits qui correspondent à notre requête. On peut envisager que l'examen du contenu de la base de faits se fait au moyen d'un mécanisme de "pattern matching".

Pour le chaînage arrière, il suffit de fournir au système le but à satisfaire:

Question 2

Requête: Bonifier(Bourgogne,1992,2004)

Règle 4)

but: Bonifier(Bourgogne,1992,2004)
consequence-regle: Bonifier(Bourgogne,?Année-Vin,?Année-Vin+10)
=>échec
Règle 6)
but: Bonifier(Bourgogne,1992,2004)
sous-buts:
- 2004 > 1900->succès
- 2004 < 2010->succès
- NON Déclasser(Bourgogne,1992,2004)
Règle 2)
but: Déclasser(Bourgogne,1992,2004)
- 2004 - 1992 > 20->échec
=>échec

Règle 5)

but: Déclasser(Bourgogne,1992,2004)
- 2004 < 2010-> succès
- 2004 > 1900-> succès
 
- Déclasser(Bourgogne, 1992, 2003) .. .
regle 5)
- 2003< 2010-> succès
- 2003> 1900-> succès
 
- Déclasser(Bourgogne, 1992, 2002) .. .
..jusqu'1900..
=>échec
->succès
Règle 4)
but:Bonifier(Bourgogne,1992,2003)
sous-buts:
- Stock-Vin(Bourgogne,1992) -> succès
- 2003 - 1991 = 10->échec
=>échec
Règle 6)
but: Bonifier(Bourgogne,1992,2003)
sous-buts:
- 2002 > 1900 -> succès
- 2002 < 2010->succès
- NON Déclasser(Bourgogne,1992,2003)
Règle 2)
but: Déclasser(Bourgogne,1992,2003)
...
=>échec
->succès
- Bonifier(Bourgogne,1992,2002)
Règle 4)
but: Bonifier(Bourgogne,1992,2002)
sous-buts:
- Stock-Vin(Bourgogne,1991) -> succès
- 2002 - 1992 = 10->succès
=>succès
->succès
->succès
=> succès
 

Question 3

Si on enclenche le système en chaînage avant, le mécanisme d'inférence va essayer de déduire tous les faits possibles en unifiant l'ensemble des règles avec les faits de la base (faits initiaux et faits inférés). Dans le cas de notre exemple, le système va surcharger la base de faits avec des informations inutiles, en déduisant pour chaque année tous les vins qui seront bon cette année-là (et ce jusqu'à 2010). Or, si un vin est bon une certaine année, il le restera tant qu'il n'est pas déclassé. Déduire explicitement qu'il sera bon toutes les années suivantes est inutile. Imaginons que le nombre de bons vins soit important, le nombre de faits inférés risque d'être très grand et va considérablement ralentir le fonctionnement de notre système expert. Ces séries d'inférences sont d'autant plus inutiles qu'elles n'ont rien à voir avec la requête qui nous intéresse, i.e., quels sont les vins à éliminer.
 

Question 4

Les règles 1), 2), 5), 7) et 8) permettent de déduire tous les vins à déclasser et à éliminer en utilisant le chaînage avant. Ceci peut-être constaté en partant du fait Eliminer et en regardant quels sont les seuls règles qui peuvent être successeurs de ce type de faits dans un processus de chaînage arrière.
 

Question 5

Dans le cas du chaînage arrière, l'absence de cette condition va faire cycler le système à l'infini pour certaines requêtes: par exemple, si on désire savoir si le Bourgogne 1980 est un bon vin, la règle 4) ne sera jamais satisfaite car il n'y a pas de Bourgogne 1980 en stock et le système va donc récursivement essayer d'appliquer la règle 6) puis la règle 4) sans jamais s'arrêter.
 

Question 6

Si toutes les règles sont appliquées en chaînage arrière, les vins déclassés sont à redéduire à chaque fois que l'on veut savoir si un vin particulier est bon. De plus, on va essayer de satisfaire à plusieurs reprises les mêmes sous-buts, par exemple: Stock-Vin(?Vin,?Année-Vin) qui est impliqué dans les règles 1), 2) 3) et 4). Il est clair que si la satisfaction d'un sous-but est onéreuse, on aimerait éviter de le recalculer plusieurs fois.
 

Question 7

Un bon système expert est un système expert mort!!!

Non, non, en fait ce qu'on veut montrer, c'est qu'un processus de décision est souvent composé de parties en chaînage avant et de parties en chaînage arrière. Le choix du mécanisme d'inférence est souvent lié à la nature des requêtes (certaines requêtes se prêtent mieux au chaînage avant et d'autres au chaînage arrière). En principe, si les règles ont été conçues avec suffisamment de soin pour éviter les problèmes de cycles, on peut indifféremment utiliser l'un ou l'autre type de chaînage pour satisfaire une requête. Cela ne veut pas dire que le coût (en capacité mémoire et en temps) soient les mêmes. C'est pour cela qu'en pratique, les systèmes experts sont souvent hybrides.