Expert3


Version 1.0 beta

But du système

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:

  • COMPEXP et EXPERT sont réunis sous la même interface
  • Visualisation d'images comme ressource d'information
  • Utilisation d'images pour acquérir des données
  • Une option minimale est proposée comme méthode de recherche

Un exemple simple pour entrer en matière

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.

L'environnement d'expert3

                    +---------+
                    ¦TABLE D' ¦
                    ¦INDUCTION¦
                    ¦(.TBL)   ¦
                    +---------+
                         ¦
    +--------+     +----------+     +----------------------+
    ¦ SOURCE ¦ --> ¦ COMPEXP  ¦     ¦ BASE DE CONNAISSANCE ¦
    ¦        ¦     ¦          ¦ --> ¦                      ¦
    ¦ (.TXT) ¦ <-- ¦          ¦     ¦  (.KBS)              ¦
    +--------+     +----------+     +----------------------+
                                          ¦                                          
    +--------+                      +----------+ --> +-------------------+
    ¦BASE DE ¦                      ¦          ¦     ¦   BASE DE FAITS   ¦    
    ¦DONNEES ¦      <--------->     ¦          ¦ <-- +-------------------+
    ¦(.DBF)  ¦                      ¦ EXPERT3  ¦
    ¦(.WKS)  ¦                      ¦          ¦
    +--------+                      ¦          ¦
    +--------+                      ¦          ¦ 
    ¦FICHIER ¦      <--------->     ¦          ¦
    +--------+                      +----------+  

Base de faits

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

Structure d'une base de connaissance

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 formulation d'un but, exemple: FIND ustensile
  • l'insertion d'un fait, exemple: ustensile = fourchette
  • l'affichage, exemple: DISPLAY "c'est vraisemblablement %" : (ustensile)

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.

Fonctionnement du moteur

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:

  1. clause: FIND var
  2. condition: var = expression
  3. évaluation: (var)

Cycle:

  1. La variable est dans la base de fait: arrêt du moteur même si la variable a pour valeur UNKNOWN.
  2. La variable est une variable question (ASK): la question est posée à l'utilisateur. Si l'utilisateur répond par ESC, le cycle se poursuit. Sinon arrêt.
  3. La variable apparaît dans la conclusion de règles:
    1. les règles correspondantes sont sélectionnées
    2. dans l'ordre les prémisses des règles sélectionnées sont "filtrées". Si une prémisse est vérifiée, les actions de la conclusion sont déclenchées. Puis arrêt si la variable est simple. Sinon toutes les règles sélectionnées sont examinées.
  4. La valeur UNKNOWN est attribuée à var. En mode trace un avertissement précède cette attribution.

EXPERT3 est donc un moteur fonctionnant "en arrière", des conclusions vers les prémisses.

Le faux et l'inconnu

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 à:

  1. une variable question si l'utilisateur répond par ESC.
  2. une variable but si aucune prémisse des règles sélectionnées lors d'une recherche n'a pu être vérifiée
  3. une variable par insertion directe: INSERT var UNKNOWN

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.

Les variables multiples

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

Manipulations 2

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 ;

Quelques exemples techniques

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)" ;

Traitement de l'information

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 ; 

Préparation d'une base de connaissance avec l'inducteur: mode d'emploi

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).

Traitement des tables de décision

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.

  1. Un projet qui peut être décrit par des tables de décision et qui ne demande pas de traitement algorithmique complexe se code facilement à l'aide d'une système à base de règles de production. Il faut encore que les conditions et les actions aient une structure adéquate.
  2. Lors de la réalisation d'un système à base de règles de production, la méthodologie des tables de décision permet: ­ de construire un premier noyau de règles (toutefois cette opération est souvent automatisée), ­ de vérifier la cohérence de certaines parties du système, ­ de simplifier le système.
  3. Les tables de décisions servent à analyser une situation, les règles de production sont parties intégrantes d'un système informatique. En particulier les règles de productions sont déclenchées, ou non, leur ordre peut être modifié, etc. Ainsi l'inclusion, par exemple, peut prendre divers aspects.
    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
    Dans ce cas, si R2 précède R3, cette dernière ne sera jamais activée. Dans l'ordre inverse, R3 précède R2, R2 ne sera activée qu'en cas de négation de C3.
  4. Lorsqu'il s'agit de construire un système expert, les différentes variables ne sont pas données directement. Il s'agit souvent de les construire (avec l'aide d'un expert). Ce travail est spécifique aux systèmes d'IA.
  5. Dans un système expert on s'en tient aux règles utilisées par l'expert. La recherche exhaustive des cas possibles n'est pas à effectuer. Par contre, un système expert est apte à évoluer par ajout de nouvelles règles sans modifications majeures.
  6. La notion du coefficient de certitude est propre aux systèmes à base de règles de production.


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 ci­dessous, écrivez un système qui va permette de décider à quelle course va participer une personne. Observez la méthode suivante:

  1. Faites la liste des modalités rencontrées (sexe, débutant, ...).
  2. Recensez les valeurs possibles de chaque modalité.
  3. Etablissez une "table d'induction". Ordonnez les lignes de cette table par ordre des valeurs des modalités (d'abord tous les hommes, etc).
  4. Examinez les aspects simples de redondance et de cohérence.
  5. Ecrivez les règles correspondantes.

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 !

Contrôle de cohérence

Un certain nombre de contrôles peuvent être effectués. En particulier:

  • Risque de "bouclage"
  • Détection des règles inertes
  • Détection des règles contradictoires
  • Impossibilité de solutions

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 ;

L'évaluation des expressions

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) 
;

Les coefficients de certitude

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)

Structuration des règles

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.

Les démons

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'.

Méthodes de "sélection"

Les règles peuvent être sélectionnées selon diverses méthodes:

  • A vue: toutes les règles contiennent la variable recherchée dans leur conclusion sont sélectionnées.
  • Sélection stricte: seules les règles contenant le fait recherché (une variable et une valeur particulière) sont sélectionnées.
  • Les règles sont sélectionnées par ordre croissant de la longueur du chemin menant à une conclusion.

Hiérarchie

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 
; 

Commandes du système

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?).

Syntaxe de EXPERT3

Types d'objets

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

Clauses

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.

Conditions

Une condition est du type: "var comparateur exp" ou est constituée d'une suite de telles expressions séparées par OR.

Déclarations

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 ;

Symboles

, 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

Autres mots réservés

DOMAIN IF THEN AND OR BECAUSE entrent dans la syntaxe d'une règle
PICTURE EDITOR RECT CIRCLE

Version française

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

Interface

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).
- Voir une règle: affiche une règle.
- éPonge: efface les contenu des fenêtres.

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.
Trace: lorsque la trace est active, le système visualise tous les appels et déclenchements de règles. A l'enclenchement, cette option est inactive.
Seuil de vérité: indique à partir de quelle valeur de certitude un fait est pris en compte.
Navigation: optimise de diverses manières la recherche.

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.


(c) ABORD, 1989-2013