EXERCICE 3 - SYSTEME EXPERT
Les listes chaînées (Version Java)
 
 
ENONCE
 

Le but de cet exercice est d'écrire ce que l'on appelle un système expert. Il s'agit d'un mécanisme qui, à partir d'un certain nombre de faits, permet de tirer des conclusions en s'appuyant sur des règles. Ici, on considérera l'exemple suivant.

Base de faits:

F1:   a trois côtés
F2:   a deux côtés égaux
F3:   a un angle droit
F4:   a trois angles égaux
F5:   triangle
F6:   triangle isocèle
F7:   triangle équilatéral
F8:   triangle rectangle
F9:   a plus de trois côtés
F10:   a moins de trois côtés
F11:   est impossible
F12:   est un polygone

Base de règles:

R1:   F12 et F1  F5
R2:   F5 et F2  F6
R3:   F5 et F3  F8
R4:   F5 et F4  F7
R5:   F10  F11
R6:   F9  F12
R7:   F1  F12
R8:   F7 et F8  F11

Par exemple, si on a les faits F5 et F4 ("triangle", "a trois angles égaux"), on peut en déduire F7 ("triangle équilatéral"). La base de faits et la base de règles seront stockées dans des fichiers. Le programme consistera donc à lire ces bases, à demander à l'utilisateur une liste de faits et à en tirer toutes les conclusions possibles.

Question 1: Ecrire la classe BaseFait qui stocke les intitulés des faits dans un tableau. Vous devrez implémenter les méthodes suivantes.

  • lire qui lit une base de faits dans un fichier et stocke les intitulés dans le tableau,

  • afficher qui affiche la base de faits.

Question 2: Ecrire la classe ListeFait qui représente une liste de faits avec les méthodes suivantes.

  • ajouter qui ajoute un fait en tête dans la liste de faits,

  • saisir qui permet la saisie de la liste de faits,

  • afficher qui affiche la liste de faits.

Les cellules d'une liste de faits seront représentées par la classe Fait suivante.

classe Fait:
 ENTIER id;
 Fait   suivant;
fin classe;

Question 3: Ecrire la classe ListeRegle qui représente une liste de règles. Comme pour la liste de faits, il faudra définir une classe Regle pour représenter les cellules de la liste. Vous devrez écrire les méthodes suivantes.

  • ListeRegle.ajouter qui ajoute une règle en tête dans la liste de règles,

  • Regle.lire qui lit une règle dans un fichier,

  • ListeRegle.lire qui lit une base de règles dans un fichier,

  • ListeRegle.afficher qui affiche la liste de règles.

La classe Regle contiendra les attributs suivants.

classe Regle:
 ENTIER    id;
 ListeFait hypotheses;
 ListeFait conclusions;
 Regle     suivant;
fin classe;

Question 4: Ecrire les méthodes nécessaires pour trouver les conclusions à partir de la liste de faits saisie par l'utilisateur.

  • ListeFait.present qui vérifie qu'un fait est bien dans la liste,

  • ListeFait.appliquer qui applique une règle si la liste de faits le permet, les nouveaux faits trouvés sont alors ajoutés à la liste de faits,

  • ListeRegle.supprimer qui supprime une règle de la liste de règles (en effet, une fois appliquée une règle devient inutile),

  • ListeRegle.conclure qui trouve toutes les conclusions déductibles à partir d'une liste de faits,

  • ListeFait.afficher2 qui affiche toutes les conclusions trouvées (sous une forme claire).

 
CORRECTION