Moteur 0+

1 - Contexte

Travaillant dans une société de développement d’outils pour l’Intelligence Artificielle, vous êtes sur un nouveau projet de création d’un moteur d’inférence d’ordre 0+ en chaînage avant. Votre longue expérience vous fait tout de suite choisir un langage de programmation utilisé en IA permettant le prototypage rapide de ce type d'applications. Dans une seconde version (en ß seulement) vous essayerez de modifier votre moteur d’inférence afin qu’il intègre des connaissances issues de la logique des prédicats du premier ordre. Il semble clair que si vous travaillez dans une société de développement de logiciels, vous avez un goût prononcé pour la programmation en général et pour les langages d’IA en particulier.

2 - Sujet

Écrire un micro moteur d’inférences d’ordre 0+ fonctionnant en chaînage avant.

Idée 1 : Simple

Les règles sont de la forme :

SI (egal age-jean ‘18)
ALORS (affecter vote-possible-jean ())

Déclaration de faits :

(affecter age-jean 15)

Implémentation des règles au choix. Cependant, une liste de liste de propriétés semble être le choix le plus judicieux :

(affecter BR ‘(R1 R2 R3 .... Rn))
(declarer R1 ‘premisse ‘(egal age-jean ‘18))
(declarer R1 ‘conclusion ‘(affecter ....))
(declarer R1 ‘etat ‘en-attente)

Idée 2 (amélioration)

Les faits aussi sont représentés par une liste de Plists.

(affecter BF '(jean marie ...))
(declarer jean 'age '18)
(declarer jean 'vote-possible '())

Ce moteur, même s’il est très simple, peut servir de base à la plupart des raisonnement possibles sur un moteur d’ordre 0+. Il est par exemple possible :
• d’écrire des meta-règles
• de gérer l’héritage au niveau des faits (se contenter d’un héritage de valeur)

Utiliser l'algorithme de chaînage avant suivant.

Algorithme de chaînage-avant (ordre 0)

Ch-av (BF, BR)
Si BR = 0 Alors Afficher "BF Saturée", Fin
Sinon un-cycle (BF, BR)

Un-cycle (BF1, BR1)
Si BR1 = 0 Alors Afficher "Tout ce qui pouvait être déduit l'a été", Fin
Sinon

Choisir une règle R de BR1,
Si R a ses prémisses vérifiées par BF1
Alors Afficher ses conclusions
ch-av (BF1 + Conclusion (R) , BR - R)
Sinon un-cycle (BF1, BR1 - R)


Appel : ch-av (uneBaseDeFaits, uneBaseDeRègles)

Prévoir un fonctionnement monotone, faits monovalués.

Idée 3 (accélération...)

Il est possible de ne pas utiliser de liste de propriétés (usage de 'declarer') mais directement les valeurs des symboles.

Questions 'Bonus'

(facile) Il existe une manière astucieuse de transformer l'algorithme afin qu'il fonctionne PRESQUE comme un algorithme de moteur d'inférence d'ordre 1. Indiquer ces modifications et les implémenter.

(difficile) Implémenter un algorithme simple de chaînage arrière et ajouter des propriétés aux faits pour savoir s’ils sont demandables et/ou affichables

3 - Tests

Deux jeux de tests sont à prévoir.

Un premier jeu pour le moteur d’ordre 0, un second pour le moteur d’ordre 0+.

Il est possible de puiser dans les bases de connaissances représentées par les autres sujets de TPs (volcans, appartements, calculs d'impôts) et/ou de se servir de la base ci-dessous. Mais dans tous les cas, il est impératif de tester le moteur sur deux bases différentes.

R1 : Si Jean est né entre 1945 et 1952, alors il est babyboomer
R2 : Si Jean est artiste, alors il aime la musique
R3 : Si Jean est sportif, alors il aime le ski
R4 : Si Jean est babyboomer et s’il aime la musique, alors il adore les Pink Floyds
R5 : Si Marie est artiste, alors elle aime la musique et adore la peinture
R6 : Si Jean est né avant 1945 et s’il aime la musique, alors il adore Charles Trenet
R7 : Si Marie adore la peinture et si Jean adore Charles Trenet, alors leur amour sera romantique
R8 : Si Marie adore la peinture et Jean aime le ski, alors leur amour sera impossible
R9 : Si Marie aime la musique et Jean aime les Pink Floyds, alors leur amour sera un amour passion
MR1 : Si Jean est XX alors bloquer toutes les règles ayant des prémisses de la forme “Si Jean est YY” avec YY différent de XX.

Exemple de BF :

Jean et Marie sont des artistes, Jean est né en 48.


ICAM Toulouse - Last update: 21-FÈv-2011