Le but de ce projet est de programmer un moteur d'inférence en LISP et ainsi de comprendre et implémenter les fondements du raisonnement déductif dans les systèmes à base de connaissances (SBC). Pour mener à bien ce projet, nous avons commencé notre travail en recopiant les différentes fonctions données en annexe, au fur et à mesure nous avons remarqué un bug récurrent qui s'était glissé dans l'annexe et que nous avons bien entendu corrigé. Une fois l'annexe recopiée sans erreur, nous avons alors eu la fonction qui devra être lancée lors du chargement du fichier.
Lors du recopiage des différentes fonctions, nous avons remarqué deux problèmes qui faisaient que le programme bloquait lors du chargement de celui-ci dans clips.
[...] si oui ne fait rien (let (etablir_partie_gauche_pg (partie_gauche_regle (cond ((null nil) ;lapartie gauche est fausse? la regle echoue sinon les propositions de la partie droite sont marquées vraies (applique_partie_droite_pd (partie_droite_regle ) (marquer_appliquee_regle ; la règle ne peut plus être réutilisée ) ) ) ) ; bloc f (defun etablir_partie_gauche_pg (liste_de_prop) (cond ((some 'faux?_prop liste_de_prop)nil) ; y a-t-il une prop deja connu fausse? si oui on s'arrête là et on rend nil (etablir_pg1_pg liste_de_prop)) ) ) (defun etablir_pg1_pg (liste_de_prop) (cond ((null liste_de_prop) ((null (etablir_prop (car liste_de_prop))) nil) (etablir_pg1_pg (cdr liste_de_prop))) ) ) ; bloc g (defun applique_partie_droite_pd ;lp une liste de propositions (mapc 'marquer_vraie_prop lp) ;on les marque toutes a vrai (mapc 'montre_deduction_prop lp) ;éventuellement on montre ce que l'on fait ) ; bloc h (defun montre_deduction_prop (cond ((and (boundp md) ;l'atome md a-t-il déjà une valeur et est-elle vraie? [...]
[...] Comme R9 possède plus de propositions que R8, elle devrait être lancée en deuxième. On peut donc remarquer que tout s'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. [...]
[...] Afin de l'éliminer, nous avons donc remplacé tous les : présents dans l'annexe par des _ . Le second problème que nous avons du corrigé est la fonction somme. En effet le mot somme est sans aucun doute un mot clé de LISP. C'est-à-dire une fonction déjà présente. Afin de vous le montrer là aussi, nous avons reproduit l'erreur afin d'en faire le screen ci-dessous. Afin de corriger ce problème, nous avons renommé la fonction somme par somme dans notre programme. [...]
[...] Ensuite dans la base de fait, nous avons rajouté une proposition inconnue beep et cela n'a pas gêné également. Chaînage Arrière Avant de conclure, voici un chaînage arrière sur notre base personnelle. Nous choisirons comme fait paris. Notre programme redescend et doit demander si ville est vrai, car si ville est vrai alors paris l'est. [...]
[...] Nous répondons oui, et le programme peut conclure car il a trouvé un chemin correct. Base personnelle Travaillons désormais sur notre base personnelle que nous avons créée spécialement pour ce projet. Chaînage Avant Notre base personnelle est plutôt simple, nous choisirons comme base de fait un seul élément parisien et nous mettrons en avant le contrôle des erreurs dans ce jeu d'essai. Comme on peut le voir, on a mis sdsd lors de la demande de chaînage avant ou arrière et le programme a redemandé la saisie du choix. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture