Travaillant dans une société de développement doutils pour lIntelligence Artificielle, vous êtes sur un nouveau projet de création dun moteur dinférence dordre 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 dinférence afin quil 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 dIA en particulier.
Écrire un micro moteur dinférences dordre 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 sil est très simple, peut servir de base à la plupart des raisonnement possibles sur un moteur dordre 0+. Il est par exemple possible :
décrire des meta-règles
de gérer lhéritage au niveau des faits (se contenter dun 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
SinonChoisir 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 sils sont demandables et/ou affichables
Deux jeux de tests sont à prévoir.
Un premier jeu pour le moteur dordre 0, un second pour le moteur dordre 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 sil 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 sil 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