Le but de ce projet est de programmer un moteur d'inférence en LISP et ainsi comprendre et implémenter les fondements du raisonnement déductif dans les SBC : « systèmes à base de connaissances ».
[...] (defun chainage_arrière La fonction chainage_arrière demandera à l'utilisateur de taper la proposition à inférer, puis ensuite lancera la fonction problème définit dans l'annexe. Fonction pour la stratégie (defun nbProp?_regle Cette fonction renvoie le nombre de proposition de la règle (pour notre stratégie de contrôle). (defun nbProp_regle Cette fonction compte le nombre de propositions et le met dans l'attribut nbProp du nom de la règle. Cette méthode est appelé dans le corps de la fonction initialiser afin d'initialiser notre attribut nbProp que nous avons rajouté. [...]
[...] Chaînage Avant Choisissons désormais de faire un chaînage avant sur la base de Winston. Une fois le choix du chaînage effectué, il faut désormais saisir la base de fait initial. Nous choisirons : a-des-poils, a-une-couleur-fauve, est-un- carnivore puis est-un-ruminant. Les règles concernées par ces différents faits seront : (R1 si (a-des-poils) alors (est-un-mammifere)) (R8 si (est-un-mammifere est-un-ruminant) alors (est-ongule)) (R9 si (est-un-mammifere a-une-couleur-fauve est-un-carnivore) alors (est-un-guepard)) Si tout se passe bien alors le programme devrait d'abord faire R1, on aura alors déterminé est-un-mamifere. [...]
[...] Stratégie de contrôle Dans l'annexe présente, le programme prend la première proposition rencontrée. Il n'y a donc pas de stratégie de contrôle. Afin d'y remédier, nous avons rajouté une méthode classer qui s'occupe de classer l'ordre des règles à exécuter par rapport aux nombres de propositions que contient la règle. (defun classer (regles) (sort regles (lambda (nbProp?_regle (nbProp?_regle ;on trie par rapport aux nombre de propositions par règles ) Comme le montre le code ci-dessus, nous avons décidé de trier nos règles par le nombre de propositions qu'elles contiennent. [...]
[...] Comme R9 possède plus de propositions que R8, elle devrait être lancé en deuxième. On peut donc remarquer que tout c'est passé correctement. Le programme a d'abord lancé R9 puis ensuite R8. Notre stratégie de contrôle fonctionne donc correctement car le programme a opté pour la règle ayant le plus de propositions et non la première rencontrée. Chaînage Arrière Choisissons désormais de faire un chaînage arrière sur la base de Winston. Nous choisirons comme proposition à inférer est-un-mammifere. [...]
[...] Erreur dans l'annexe Lors du recopiage des différentes fonctions, nous avons remarqué deux problèmes qui faisaient que le programme bloqué lors du chargement ce celui- ci dans clips. Le premier problème était les méthodes composées d'un : dans leur définition. Afin de vous le montrer clairement, nous avons reproduit l'erreur en recopiant le code ci-dessous : (defun partie_gauche:regle (caddr Comme vous pouvez le remarquer dans le screen ci-dessus, la présence des : dans le nom de la fonction a déclenché une erreur. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture