|
EXERCICE 3 - SYSTEME EXPERT
Les listes chaînées (Version Java) |
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).
|
|