EXPERT3 est un moteur d'inférence qui permet de développer rapidement des petits systèmes experts, c'est-à-dire un système d'aide à la décision dans des domaines relativement structurés (dépannage, diagnostic médical simple, ...). Il est d'ordre 0+ et utilise principalement la technique du chaînage arrière. Certaines séquences du travail se font par un procédé apparenté au chaînage avant. Ce logiciel possède de nombreuses possibilités de fenêtrage, de chaînage de bases de connaissance, d' utilisation de données diverses, etc.
Par rapport à EXPERT2, outre le fait qu'il fonctionne sous windows, EXPERT3 possède les particularités suivantes:
A titre d'exemple on réalisera pas à pas un système qui permettra "d'identifier" un ustensile de cuisine !!
ETAPE 1
Dans l'éditeur de COMPEXP on entrera la spécification du problème de la façon suivante:
ACTIONS FIND ustensile DISPLAY "c'est vraisemblablement %" : (ustensile) ;
ASK dent : "l' objet a-t-il des dents ?" ; ASK couper: "l'objet coupe-t-il ? " ;
CHOICES dent, couper : oui, non ;
RULE couteau IF couper = oui THEN ustensile = couteau BECAUSE "un couteau coupe par définition !" ;
RULE cuillère IF dent = non THEN ustensile = cuillère ;
RULE fourchette IF dent = oui THEN ustensile = fourchette ;
ETAPE 2
A l'aide de l'option Compiler du menu Traduire on transformera ce "programme" en une version "compilée" qui sera gardée dans un fichier d'extension .KBS . Les fautes de syntaxes sont signalées. Un fichier .SBL est également créé qui contient l'ensemble des symboles utilisés.
ETAPE 3
Il ne reste plus qu'à utiliser cet exemple à l'aide de EXPERT3.
+---------+
¦TABLE D' ¦
¦INDUCTION¦
¦(.TBL) ¦
+---------+
¦
+--------+ +----------+ +----------------------+
¦ SOURCE ¦ --> ¦ COMPEXP ¦ ¦ BASE DE CONNAISSANCE ¦
¦ ¦ ¦ ¦ --> ¦ ¦
¦ (.TXT) ¦ <-- ¦ ¦ ¦ (.KBS) ¦
+--------+ +----------+ +----------------------+
¦
+--------+ +----------+ --> +-------------------+
¦BASE DE ¦ ¦ ¦ ¦ BASE DE FAITS ¦
¦DONNEES ¦ <---------> ¦ ¦ <-- +-------------------+
¦(.DBF) ¦ ¦ EXPERT3 ¦
¦(.WKS) ¦ ¦ ¦
+--------+ ¦ ¦
+--------+ ¦ ¦
¦FICHIER ¦ <---------> ¦ ¦
+--------+ +----------+
Les faits sont des triplets constitués du nom d'une "variable", d'une valeur et d'un coefficient de certitude. Exemple: problème = batterie CNF 56
Une base de connaissance est subdivisée en plusieurs parties. Chacune débute par une déclaration et se termine par un point-virgule (;).
Les déclarations principales sont les suivantes:
ACTIONS contient une suite de clauses chacune impliquant une action
ASK indique une variable-question
CHOICES indique les valeurs possibles d'une variable
RULE déclaration d'une règle
La partie ACTIONS
La partie ACTIONS est constituée, du point de vue syntaxique, d'une suite de CLAUSES. Chaque CLAUSE implique une action, c'est-à-dire provoque une modification du système. Les trois principales clauses/actions sont:
La syntaxe adoptée pour l'insertion d'un fait, var = val, n'est pas toujours heureuse (confusion avec les conditions). EXPERT3 admet également la clause suivante qui est équivalente: INSERT var val
Les déclarations ASK et CHOICES
La déclaration ASK permet de déclarer une variable-question. La question associée sera posée à l'utilisateur dès que le système en aura besoin. Il ne peut y avoir qu'une seule question par variable!
CHOICES permet de préciser les réponses possibles à une question. Celles-ci seront proposées à l'utilisateur dans un menu.
Les règles (RULE)
Les règles satisfont à la forme générale IF prémisse THEN conclusion.
La prémisse est constituée d'une suite de conditions séparées par OR ou AND. OR est prioritaire par rapport à AND. Chaque condition est de la forme:
<nom d'une variable> <comparateur> <valeur>, par exemple: nombre_d_enfants > 10
La conclusion tout, comme la partie ACTIONS, est constituée d'une suite de clauses.
Le moteur est enclenché par une clause FIND .
Si la variable évoquée est une variable-question, la question est posée à l'utilisateur. Sinon, le système sélectionne les règles qui contiennent la variable dans leur conclusion. Les actions de la première règle sélectionnée dont la prémisse est satisfaite sont déclenchées. Dans le cas des variables multiples (voir plus loin) toutes les règles sélectionnées sont utilisées. Finalement, si aucune valeur ne peut être associée à la variable, celle-ci est considérée comme inconnue (UNKNOWN). En mode "trace", une demande de confirmation est demandée à l'utilisateur.
De façon schématique on a:
Enclenchement du moteur par:
Cycle:
EXPERT3 est donc un moteur fonctionnant "en arrière", des conclusions vers les prémisses.
Toutes les variables peuvent prendre une valeur particulière: UNKNOWN. Ainsi EXPERT3 permet d'introduire l'"inconnu" entre le "vrai" et le "faux". La valeur UNKNOWN est attribuée à:
Si le fait var = UNKNOWN existe, la clause FIND var n'a aucun effet. Par contre la condition var = UNKNOWN provoque la mise en marche du moteur si la variable n'existait pas préalablement.
Exemple! loi d'Ohm ! ACTIONS CLS DISPLAY "répondez par une valeur ou ESC si inconnu !" FIND valeur_ok ; ASK i : "valeur du courant ?" ; ASK u : "valeur de la tension ?" ; ASK r : "valeur de la résistance ?" ; RULE tension IF r >= 0 AND i >= 0 THEN u = (r)*(i) DISPLAY "tension: %" :(u) ; RULE courant IF r > 0 AND u >= 0 THEN i = (u)/(r) DISPLAY "courant: %" :(i) ; RULE résistance IF i >= 0 AND u >= 0 THEN r = (u)/(i) DISPLAY "résistance: %" :(r) ; RULE erreur IF u = UNKNOWN OR r = UNKNOWN OR i = UNKNOWN THEN valeur_ok = nil DISPLAY "erreur ou données insuffisantes" ;
Manipulations 1
1) Décrire la façon dont une valeur sera attribuée à chacune des variables v1, v2, v3.
ACTIONS FIND v1 FIND v2 FIND v3 ;
ASK v1 :"quelle est la valeur de v1'" ; ASK a : "valeur de a ?" ;
RULE r1 IF a = oui THEN v2 = non ;
2) Ecrire un système qui demande le nom de l'utilisateur et qui lui dise bonjour !
3) Ecrire un système qui détermine le type d'un véhicule (auto, camion, vélo,...) à partir de caractéristiques diverses (silencieux/bruyant, ...).
4) Ecrire un système complet (but, questions, règles) qui, pour un problème de démarreur, diagnostique une des cinq causes: problème de batterie, problème de court-circuit, problème de bobine, problème de pignon, autre problème.
5) Voici une règle:
IF etat_démarreur = ralenti AND
grands_phares = ok AND
manip_bobine = ok
THEN diagnostic = connu
probleme = bobine
a) Quelle est la prémisse de la règle.
b) De combien de conditions cette prémisse est-elle constituée
?
c) Indiquer une action apparaissant dans la règle.
d) Ces expressions apparaissant dans la règle n'ont pas le même
statut: manip_bobine = ok probleme = bobine. Expliquer la différence
(nom, effet).
6) On donne la base de connaisance suivante:
ACTIONS FIND volume DISPLAY volume ; ASK largeur : "Quelle est la largeur ?" ; ASK longueur : "Quelle est la longueur ?" ; ASK hauteur : "Quelle est la hauteur ?" ; CHOICES largeur, longueur, hauteur : petite, moyenne, grande ; RULE r1 IF largeur= grande AND longueur = grande THEN surface = grande ; RULE r2 IF largeur = grande AND longueur <> grande THEN surface = moyenne ; RULE r3 IF longueur = moyenne THEN diagonale = moyenne ; RULE r4 IF largeur = petite diagonale = moyenne THEN surface = petite ; RULE r5 IF surface = petite THEN volume = petit ; RULE r6 IF surface <> petite AND hauteur <> petite THEN volume = grand ;
a) Quelles sont les règles sélectionnées par la clause
FIND surface ?
b) Quelles sont les règles sélectionnées par la clause
FIND volume ?
c) Dans ce cas, quelle sera la première question posée à
l'utilisateur ?
d) Si l'utilisateur donne les réponses: largeur = petite et longueur
= moyenne, quelle sera la réaction du système (réponse,
information manquante...) ? Détaillez la façon de parvenir à
ce résultat.
e) On veut ajouter la règle:
RULE nouvelle IF surface = petite AND hauteur = grande THEN volume = moyen ;
Où la placez-vous ? Justifiez.
Moyennant la déclaration PLURAL, les variables peuvent admettre plusieurs valeurs. On peut alors les considérer comme des "piles" ou des "listes" ! Voici quelques caractéristiques de ces variables:
| Nom | Exemple | Représentation dans la base |
| Déclaration | PLURAL couleur ; | couleur = gris couleur = jaune |
| Insertion | couleur = bleu INSERT couleur bleu |
couleur = bleu couleur = gris couleur = jaune |
| Condition | couleur = jaune | |
| Extraction | POP couleur dessus | couleur = gris couleur = jaune dessus = bleu |
En cas de recherche d'une variable multiple, toutes les règles sélectionnées sont filtrées.
Il est possible de trier les faits liés à une variable multiple par ordre décroissant des coefficients de certitude. Exemple: SORT couleur
ACTIONS FIND x DISPLAY x ;
ASK a : "valeur de a?" ;
RULE r1 IF a = 1 THEN b=1 x= 2 ;
RULE r2 IF b = 1 THEN x = 1 ;
Utiliser l'exemple précédent tel quel, en inversant l'ordre des règles, puis en ajoutant la déclaration PLURAL : x ;
1) Retour sur une valeur
ACTIONS CLS ! pour effacer les fenêtres de dialogue ! FIND resultat DISPLAY "" DISPLAY resultat ;
ASK help : "help (o/n)?" ;
RULE non ! si l'aide n'est pas requise ! IF help = n THEN resultat = connu ;
RULE oui ! si l'aide est demandée !
IF help = o
THEN DISPLAY "voici une petite aide ..."
resultat = inconnu
RESET resultat ! pour permettre la recherche suivante !
RESET help ! on pourrait aussi mettre INSERT help n !
FIND resultat ;
2) Boucle utilisant la clause WHILEKNOWN
ACTIONS nombre = 1 WHILEKNOWN cont RESET cont FIND cont DISPLAY nombre nombre = (nombre)+1 END DISPLAY " Nombre = " DISPLAY nombre ;
RULE r1 IF nombre < 16 THEN cont = oui ;
Le même exemple peut être traité en incrémentant n dans la règle r1:
ACTIONS nombre = 1 WHILEKNOWN cont RESET cont FIND cont END DISPLAY "Nombre = %" : (nombre) ;
RULE r1
IF nombre < 16
THEN cont = oui
nombre = (nombre)+1
DISPLAY nombre ;
3) Utilisation d'une variable multiple
RULE r1
IF plat = agneau AND
plat = omelette
THEN couleur_vin = rouge ;
PLURAL : plat ;
4) Une autre variable multiple
ACTIONS DISPLAY "tapez le nom de vos couleurs favorites suivi d'un coefficient (ESC pour finir)" WHILEKNOWN couleur RESET couleur FIND couleur couleurs_favorites = (couleur) END SORT couleurs_favorites CLS DISPLAY "Voici vos couleurs favorites classées par ordre de préférence " DISPLAY couleurs_favorites ;
PLURAL : couleurs_favorites ;
ASK couleur : "Entrez une couleur (ESC pour finir)" ;
Plusieurs méthodes existent qui permettent de transmettre des informations à l'utilisateur.
1) Dans une séquence d'action la clause VISUALIZE "phares.hlp" provoque l'affichage du fichier PHARES.HLP.
2) La déclaration: INFO grands_phares : "phares.hlp" ; associe le fichier PHARES.HLP à la variable grands_phares. Lorsque la valeur de grands_phares est demandée à l'utilisateur, la pression de F2 provoque l'affichage de PHARES.HLP.
3) L'information peut être prise en compte dans les règles. Ainsi une des règles ci-dessus peut être complétée ainsi:
RULE bobine
IF etat_démarreur = ralenti AND
info_gr_phares = ok AND
grands_phares = ok AND
manip_bobine = ok
THEN diagnostic = connu
probleme = bobine ;
RULE info_gr_phares_oui
IF veut_info = oui
THEN info_gr_phares = ok
VISUALIZE "phares.hlp" ;
RULE info_gr_phares_non IF veut_info = non THEN info_gr_phares = ok ;
E t a p e 1 : Préparation de la table d'induction
Préparer un fichier (canton.TBL) contenant le nom des modalités avec les diverses valeurs possibles en colonne. Le trait (-) marque l'indifférence.La dernière colonne contient la variable but. Si d'autres variables figurent systématiquement dans les conclusions des règles elles sont séparées des variables de la prémisse par /.
couleur couleur couleur particularité canton vert blanc rouge croix_blanche neuchâtel vert blanc - écriture vaud vert blanc jaune écriture vaud jaune rouge - ours berne jaune rouge noir ours berne noir blanc - - fribourg rouge blanc - - soleure rouge blanc - étoiles valais
E t a p e 2: Induction
canton.tbl est à charger "dans" COMPEXP. Puis on utilise l'option Induire du menu Traduire. Le fichier canton.src est produit. Si l'option 'contrôle' pour le compilateur a été activée, un fichier canton.msg est produit. Il peut être consulté avec l'éditeur.
messages:
la règle 3 paraît inerte, à voir avec 2
la règle 5 paraît inerte, à voir avec 4
la règle 8 paraît inerte, à voir avec 7
contrôle de cohérence effectué
E t a p e 3 : Correction de la table
Deux lignes s'avèrent inutiles, deux autres sont à permuter.
couleur couleur couleur particularité canton vert blanc rouge croix_blanche neuchâtel vert blanc - écriture vaud jaune rouge - ours berne noir blanc - - fribourg rouge blanc - - soleure rouge blanc - étoiles valais
E t a p e 4 : Retouche de la base de connaissance
La variable couleur peut prendre plusieurs valeurs simultanément, elle est de type multiple. Elle sera déclarée automatiquement comme telle à l'aide de PLURAL. Par contre, le cas échéant la déclaration concernant 'canton' est à la charge de l'utilisateur. On peut également améliorer l'énoncé des questions.
ACTIONS FIND canton DISPLAY canton ;
ASK couleur : "Quelle est la valeur de couleur" ; ASK particularité : "Quelle est la valeur de particularité" ;
CHOICES couleur : vert, blanc, rouge, jaune, noir ; CHOICES particularité : croix_blanche, écriture, ours, étoiles ;
PLURAL : couleur ;
RULE r1
IF couleur = vert AND
couleur = blanc AND
couleur = rouge AND
particularité = croix_blanche
THEN canton = neuchâtel ;
RULE r2
IF couleur = vert AND
couleur = blanc AND
particularité = écriture
THEN canton = vaud ;
RULE r3
IF couleur = jaune AND
couleur = rouge AND
particularité = ours
THEN canton = berne ;
RULE r4
IF couleur = noir AND
couleur = blanc
THEN canton = fribourg ;
RULE r5
IF couleur = rouge AND
couleur = blanc AND
particularité = étoiles
THEN canton = valais ;
RULE r6
IF couleur = rouge AND
couleur = blanc
THEN canton = soleure ;
E t a p e 5 : La base est prête pour la compilation (rubrique Compiler du menu Traduire).
Le formalisme utilisé dans les tables de décisions (TD) et celui
des systèmes à base de règles de production sont très
voisins. Voici brièvement quelques similitudes et quelques divergences.
| TD prêt | R1 | R2 | R3 | R4 | R5 |
| C1 Salaire mensuel | <1000 | >=1000 | >=1000 | >=2000 | >=2000 |
| C2 Remboursement mensuel maximum | - | 100 | 200 | 200 | 300 |
| A1 Prêt: 2000 | X | ||||
| A2 Prêt: 3000 | X | X | |||
| A3 Prêt: 4000 | X | ||||
| A4 Frais: 1.5% | X | ||||
| A5 Frais: 1.3% | X | X | |||
| A6 Frais: 1.1% | X |
On constate que chacune des règles (Ri) se traduit facilement en une règle d'un système de production, par exemple:
RULE R5
IF salaire_mensuel >= 2000 AND
remboursement = 300
THEN prêt = 4000
frais = 0.011
;
On retrouve les termes condition (Ci) et action (A1).
Cette ressemblance appelle quelques remarques.
| TD exf | R1 | R2 | R3 | R4 |
| C1 | O | N | N | N |
| C2 | - | O | O | N |
| C3 | - | - | O | N |
| A1 | X | |||
| A2 | X | |||
| A3 | X | |||
| A4 | X |
En définitive on retiendra la grande similitude des notions utilisées
dans chacun des domaines: tables de décision et systèmes à
règles de production. On appréciera les apports que chacun des
domaines peut avoir pour l'autre.
Tables de décision et tables d'induction
La table de décision peut se mettre sous la forme d'une table d'induction (extrait):
| salaire_mensuel | remboursement | prêt |
| sup_a_2000 | 300 | 4000 |
| sup_a_2000 | 200 | 3000 |
Chaque colonne représente une modalité (variable) qui peut prendre
diverses valeurs. Une telle table s'appelle table d'induction. Elle peut être
organisée de telle sorte que les contradictions ou redondances soient
mises en évidence. L'option Induire du menu traduire de fabrique des
règles de façon automatique à partir d'une telle table.
En option, le système délivre des indications (dans un fichier
d'extension .MSG) concernant contradiction et redondance des règles.
Sa traduction en code source à l'aide de l'option Induire du menu Traduire donne une fois retouchée la base de connaissance suivante:
ACTIONS
FIND duree
DISPLAY "le durée de remboursement est de % mois" :(duree) ;
ASK salaire : "Quel est le salaire mensuel ? " ;
ASK remboursement : "Quel remboursement mensuel maximum ?" ;
CHOICES remboursement : 100, 200, 300 ;
RULE principale
IF but = atteint
THEN duree = ((prêt) + ((prêt) * (frais))/(remboursement)
! ou tout autre calcul qui permet de calculer la durée ! ;
RULE r5
IF salaire >= 2000 AND
remboursement = 300
THEN prêt = 4000
frais = 0.011
but = atteint ;
RULE r4
IF salaire >= 2000 AND
remboursement = 200
THEN prêt = 3000
frais = 0.013
but = atteint ;
RULE r4bis
IF salaire >= 2000
THEN but = non_atteint
DISPLAY "le prêt est impossible, remboursement insuffisant" ;
RULE r3
IF salaire >= 1000 AND
remboursement = 200
THEN prêt = 3000 frais = 0.013 but = atteint ;
RULE r2
IF salaire >= 1000 AND
remboursement = 100
THEN prêt = 2000 frais = 0.015 but = atteint ;
RULE autre
IF salaire < 1000
THEN prêt = 0
DISPLAY "le prêt n'est pas possible, salaire insuffisant" ;
Exercices
Sur la base de la situation (fictive ?) décrite cidessous, écrivez
un système qui va permette de décider à quelle course va
participer une personne. Observez la méthode suivante:
Le club alpin, pour sa sortie annuelle, prévoit cinq courses. La répartition des participants à cette journée se fera comme suit:
- Les hommes, membres du club et possèdant un équipement complet, participeront à la course numéro 3 s'ils sont agés de plus de 25 ans et débutants, ou s'ils n'ont pas plus de 25 ans.
- Les hommes agés de plus de 25 ans qui ne sont pas membres du club participeront à la course numéro 5, de même que les hommes qui sont débutants et qui n'ont pas un équipement complet.
- Les hommes qui ne sont pas débutants participeront à la course numéro 3 s'ils ont plus de 25 ans, un équipement complet et sont membres du club. Ils participeront à la course numéro 2 s'ils ne sont pas débutants, n'ont pas plus de 25 ans et n'ont pas un équipement complet.
- Pour les dames débutantes qui ne possèdent pas un équipement complet, c'est la course numéro 1 qui est prévue.
- Les dames possèdant un équipement complet et membre du club iront à la course numéro 3.
- Pour les dames non débutantes qui ne sont pas membres du club, c'est la course numéro 4 qui conviendra, tandis que pour celles qui sont débutantes et membres du club, elles pourront s'inscrire à la course numéro 1 si elles n'ont pas plus de 25 ans et n'ont pas un équipement complet.
- Finalement, les membres du club ayant plus de 25 ans, s'ils sont expérimentés
et n'ont qu'un équipement sommaire, s'inscriront à la course numéro
2, ainsi que les non membres s'ils n'ont pas plus de 25 ans, sont débutants
et possèdent un équipement complet !
Un certain nombre de contrôles peuvent être effectués. En particulier:
A noter toutefois que ces indications sont toujours données sous forme d'avertissement et que des conditions particulières (variables multiples, type de navigation, etc.).
En particulier, l'exemple des manipulation 2 pourrait être considéré comme contradictoire. Toutefois, on peut toujours imaginé que les règles sont incomplètes et sous entendent d'autres conditions non exprimées. De plus x pourrait être multiple.En principe, un tel cas ne sera pas signalé lors du contrôle.
Par contre l'exemple suivant a de plus fortes chances de faire boucler le système.
ACTIONS FIND x DISPLAY x ;
ASK b : "Valeur de b?" ;
RULE r1 IF c = 1 THEN a = 1 ;
RULE r2
IF a = 1 AND
b = 1
THEN x = connu
c = 1 ;
Il est possible de connaître et réutiliser la valeur d'une variable. Ainsi, si la valeur "jean" a été attribuée à la variable personne, l'expression: (personne) représentera "jean".
De même, les expressions suivantes sont autorisées: (chose), (n)+3 , (n)+(m) ,etc. n et m sont des variables à valeur numérique.
Si une variable n'est pas encore connue du système, son évaluation déclenchera le moteur. Ainsi, les deux programmes suivants donnent le même résultat:
| FIND couleur couleurs_favorites = (couleur) |
couleurs_favorites = (couleur) |
L'utilisation de l'évaluation permet de résoudre certains des problèmes de la logique d'ordre 1. D'où la dénomination ordre 0+ pour EXPERT3.
Manipulation 3
Utiliser la règle suivante dans un système qui permet de traiter le syllogisme classique:
RULE mortalité IF homme = (personne) THEN mortel = (personne) ;
Plutôt que de travailler avec les valeurs extrêmes vrai et faux, EXPERT3 permet d'introduire des coefficients de certitude. Chaque fait aura donc un degré de certitude variant de 0 à 100. Ces coefficients peuvent être combinés selon diverses méthodes [ERCEVILLE]:
Si A et B sont deux propositions dont les coefficients de certitude sont respectivement a et b. La certitude commune de "A et B" et la certitude confirmative de "A ou B" sont donnée par les formules suivantes:
| A et B | A ou B | |
| Théorie des probabilité | produit: a*b/100 | somme: a+b - a*b/100 |
| Théorie des possibilités | minimum: min(a,b) | maximum: max(a,b) |
| Formule de la moyenne | (minimun + produit) /2 | (maximum + somme)/2 |
| Formule de la balance | produit * (2 - maximum/100) | maximum + produit * (1 - maximum/100) |
Le fonctionnement du moteur implique que seules certaines règles sont sélectionnées à chaque recherche. Il peut parfois être utile de préselectionner une partie des règles. Pour cela, on utilise souvent une variable adéquate introduite en prémisse. EXPERT3 offre un dispositif permettant de struturer les règles par domaines. Le nom du domaine dont fait partie la règle est indiqué après le nom de la règle.
RULE règle1
DOMAIN "identification"
IF ....
Par défaut les règles appartiennent au domaine de nom "base".
Les clauses qui permettent d'activer et de désactiver un paquet de règles sont ACTIVE et DESACTIVE. Les règles du dernier domaine "activé" sont prioritaires. De façon générale, la priorité des règles suit l'ordre inverse de l'activation de leur domaine respectif.
Attention, les clauses ACTIVE et DESACTIVE ne doivent figurer en principe que dans la partie ACTIONS ou dans la conclusion de règles d'aiguillage. Si en principe, elles peuvent apparaître dans la conclusion de n'importe quelle règle, il faut garder en mémoire le fonctionnement arrière du moteur. Ainsi, sans précaution, une règle pourrait amener à sélectionner une autre règle qui lors de son enclenchement ultérieur désactivera la règle qui a provoqué sa sélection ! Lors du lancement d'une recherche, toutes les règles menant au but devraient faire partie de l'un des domaines activés.
A la fin de la règle peut encore figurer le mot-clé BECAUSE suivi d'un texte. Ce texte contient en principe des indications qui permettent d'éclairer l'utilisateur sur le "pourquoi" de la règle.
Lorsque la règle est utilisée, la touche F3 permet à l'utilisateur d'avoir accès à ce texte.
Ce sont des procédures "réflexes" mises en oeuvre lors de certaines actions. EXPERT3 compte quatre types de démons, les démons à l'assignation, ceux à la recherche, ceux à l'insertion et ceux au nettoyage. Ils sont associés à une variable au moyen de la déclaration:
DEMON mot-clé var : liste de clauses ;
Le mot-clé pouvant être ATTRIB, FIND, INSERT ou RESET
Exemple: DEMON FIND déduction_enfants : FIND nombres_enfants ; indique au système que la recherche de la valeur de 'déduction_enfants' doit être précédée de celle de 'nombre_enfants'.
Les règles peuvent être sélectionnées selon diverses méthodes:
Il est possible de déclarer qu'une variable est du même type qu'une autre variable. Ainsi, en cas d'absence de règles permettant de déterminer la variable spécifique, celles où intervient la variable plus globale sont mises en oeuvre. Déclaration:
IS_A liste de variables : variable ;
Exemple
! hiérarchie ! ! Dans cet exemple si les variables a, b, c, ou d n'arrivent pas à être déduites par le système, leur valeur sera la même que 'variable', c'est à dire 'inconnue' ! ACTIONS vrai = 1 FIND ... ; IS_A a, b, c, d : variable ; ... RULE défaut IF vrai = 1 THEN variable = inconnue ;
F2 : aide sur la variable (WHAT?)
F3 : indication sur le pourquoi d'une règle (WHY?)
F4 : comment la recherche est menée (HOW?) (en développement,
lié à la préparation des chemins et à une option
sur la stratégie de recherche à adopter)
F5 - F8 : information permanente
Lorsqu'une expertise est terminée il est possible de modifier la valeur d'une variable (à l'aide du menu) et de relancer le moteur pour voir d'autres solutions possibles (WHATIF?).
Les objets suivants sont utilisés:
| Nom | Exemples | Abréviation |
| Chaîne de caractères | "Ceci est une chaîne ! " | str |
| Symbole | a1 ; moins_de_20 ; "1 ou 2" | sym |
| Nombre | 45 ; 1.66 | n |
| Coefficient | 90 | cnf |
| Expression | "abc" ; 2 ; (n) ; (n)+3 | exp |
| Variable | v1 ; etat_moteur ; calcul_ia | var |
| Fichier | "SAUVETAGE" ; "NEW.FTS" | fic |
| Image | Un symbole | img |
var = exp [cnf] insertion d'un nouveau fait
INSERT var val [cnf]
DISPLAY str affichage d'un texte
DISPLAY var affichage de la valeur d'une variable
DISPLAY str : (var,[var ...]) affichage d'un texte en y incluant les variables
de la liste aux endroits désignés par le signe %
CLS effacement des fenêtres de dialogue
WAIT attends un RET
FIND var recherche de la valeur d'une variable
RESET var supression des faits liés à var
RESETALL supression de tous les faits (sauf les faits systèmes)
WHILEKNOWN var répétition d'une séquence "tant
que" la variable var est connue
liste de clauses
END (test en sortie de boucle)
VISUALIZE [PICTURE] fic affichage d'un fichier texte [image] [n n [n
n]] .
CLOSE PICTURE | EDITOR
LOADFACTS fic chargement d'une base de faits
SAVEFACTS fic sauvetage de la base de faits
SHIP fic var sauvetage d'un fait dans un fichier
RECEIVE fic var récupération d'un fait dans une fichier
CHAIN fic chaînage d'une base de connaissance
OPENREAD fic ouverture d'un canal de lecture
OPENAPPEND fic ouverture d'un canal d'écriture
CREATE fic création d'un fichier
CLOSE fermeture des fichiers ouverts
READ var lecture dans un fichier
FILE_A / FILE_R e/o sur les fichiers ouverts
CALL appel d'un programme extérieur
SORT var tri des valeurs d'une variable multiple par ordre croissant
des coefficients de vraissemblance.
POP pvar var la valeur du dessus d'une variable multiple est supprimée
et attribuée à une autre variable. var = (pvar) effectue
également cette attribution sans suppression.
TRUTHTRESH cnf modification du seuil de vérité
ACTIVE str active un paquet de règles. Par défaut, les
règles font partie du paquet "base".
DESACTIVE str désactive un paquet de règles
HARAKIRI comme son nom l'indique
Une variable est prédéfinie: read_ok Elle est connue dès qu'un fichier est ouvert en lecture et tant qu'on n'est pas à la fin de ce fichier.
Une condition est du type: "var comparateur exp" ou est constituée d'une suite de telles expressions séparées par OR.
ACTIONS partie des actions liste de clauses ;
RULE sym règle [DOMAIN str] IF liste de conditions séparées par AND THEN liste de clauses [BECAUSE str] ;
CHOICES var [, var ...] : sym [, sym ...] ; valeurs possibles d'une
variable
CHOICES var, [ var ...] ; le système établit lui-même
les choix à partir des règles
ASK var : str ; énoncé de la question d'une variable-question
ASK var : str : (var,[var ...]) ; énoncé d'une question en
y incluant les variables de la liste aux endroits désignés
par le signe %
EXECUTE ; execution immédiate
PLURAL : var [,var ...] ; variable multiple
INFO var : fic ; information liée à une variable (F2)
INFO int : fic ; information permanente liée à la touche
Fint (int = 5-8)
DEMON INSERT var : liste de clauses ; démon à l'attribution
DEMON FIND var : liste de clauses ; démon à la recherche
DEMON ATTRIB var : liste de clauses ; démon à l'attribution
DEMON RESET var : liste de clauses ; démon au nettoyage
IS_A var [, var, ...] : var ; déclaration d'une hiérarchie (héritage)
REQUIRE fic insertion d'une base de connaissance
PICTURE fic img ; association d'un nom de fichier à un nom d'image
ASSOC var val img RECT n n n n | CIRCLE n n n ;
, séparateur dans des listes d'éléments
+ addition de deux expressions
- soustraction de deux expressions
* multiplication de deux expressions
/ division de deux expressions
() indicateur d'évaluation
: séparateur
; terminateur d'une déclaration
! marque un commentaire (début et fin)
= comparateur et marque d'assignation
autres comparateurs
< plus petit que
<= =< plus petit ou égal
> plus grand que
>= => plus grand ou égal
<> >< ~= différent
# parse (la valeur de la chaîne est "filtrée" par
le modèle): ? représente un caractère * représente
une suite de caractère
~# ne parse pas
DOMAIN IF THEN AND OR BECAUSE entrent dans la syntaxe d'une règle
PICTURE EDITOR RECT CIRCLE
Les mots-clés peuvent être introduits en français:
INSERE MONTRE EE ATTENDS CHERCHE NETTOIE NETTOIETOUT TANTQUECONNU FIN
VISUALISE RECOIS ENVOIE SAUVEFAITS CHARGEFAITS CHAINE OUVRELECT OUVREECR CREE FICHIERECR FICHIERLECT FERME CLAVIER ECRAN APPELLE LIS
TRI PIQUE
SEUIL
ACTIVE DESACTIVE
ACTIONS CHOIX DEMANDE MULTIPLE EXECUTE
REGLE DOMAINE SI ALORS ET OU PARCEQUE REGLE

![]() |
Consulter: chargement d'une base de connaissance
Fermer: effacer en mémoire la base de connaissance Sauver: après une compilation. Attention, ne pas sauver la base après une utilisation ! Sauver et Charger base de faits: pour conserver un état du système Nouvel éditeur, Ouvrir, Sauver sous, Imprimer: utilisation d'un éditeur |
| Editeur | Les commandes de l'éditeur sont classiques |
![]() |
Go: mise en marche de l'expertise
Ajouter, Supprimer un fait: en période de test. Effacer une variable:
efface de la base de faits tous les faits liés à une variable
donnée. Cette action, combinée avec la suivante (Ajouter
un fait), permet de refaire une recherche en modifiant simplement la valeur
d'une variable. C'est la procédure "que se passe-t-il si"
(WHATIF). Visualiser la base de faits: afficher l'ensemble de la base de faits Effacer la base de faits: avant de recommencer une nouvelle expertise Harakiri: arrêt du moteur |
![]() |
F2 : aide sur la variable (WHAT?) F3 : indication sur le pourquoi d'une règle (WHY?) F4 : comment la recherche est menée (HOW?) (en développement, lié à la préparation des chemins et à une option sur la stratégie de recherche à adopter) F5 - F8 : information permanente |
| Traduction | Avec les rubriques: Compilation (passage d'un fichier source TXT à un fichier structuré KBS), Induction (passage d'une table TBL à un fichier source TXT), Contrôle et Initialisation (lorsque l'on veut tester l'expert après compilation). |
| Options |
Avec les rubriques: Expert, Compilateur et Ouvrir fenêtre de messages. La première est la plus intéressante:
Calcul de CNF (coefficient de certitude): différentes manières
de combiner les coefficients de certitude sont possibles. Il n'y a qu'une option pour le compilateur: avec ou sans contrôle. Quant à la troisième rubrique elle est utile en cas de fermeture accidentelle de la fenêtre des messages. |