Académique Documents
Professionnel Documents
Culture Documents
Logique Floue Basic PDF
Logique Floue Basic PDF
html
Logique Floue
Cet expos a t crit parce que je n'arrivais pas trouver une documentation srieuse sur la logique
floue. Ce n'est pas un ouvrage de rfrence. Voici trois adresses de sites contenant des informations plus
srieuses sur la logique floue, communiques par un aimable lecteur :
http://www.abo.fi/~rfuller/nfs.htmlc
http://perso.club-internet.fr/bmantel
http://perso.wanadoo.fr/lehoux
0. Introduction
1. Un exemple simple : un thermostat
3. Rappel sur la logique classique
4. La logique floue
5. Commentaires
6. Perspectives
Annexe 1 Le noyau de logique floue en BASIC
Annexe 2 Les fonctions et procdures du noyau
Introduction
La logique floue a t formule par A. Zadeh dans le milieu des annes 60. Elle sert pouvoir programmer
un ordinateur pour qu'il contrle une machine un peu comme le ferait un tre humain.
A premire vue, la logique floue est une gnralisation de la logique boolenne classique. Elle ajoute
cependant une fonctionnalit dterminante : la possibilit de calculer un paramtre en disant simplement
dans quelle mesure il doit se trouver dans telle ou telle zone de valeur.
Afin de permettre au lecteur informaticien de s'essayer la logique floue, ce livre propose en annexe un
"noyau" de logique floue en BASIC, et des explications quant son usage.
Le lecteur non-informaticien aura peut-tre intrt ne lire les chapitres 1 et 2 que pour se faire une
impression globale des mcanismes en jeu.
Supposons qu'on veuille utiliser un ordinateur programm en logique floue pour contrler un systme de
chauffage. Le chauffage d'une cuve d'incubation, par exemple.
A quoi pourrait ressembler le programme en logique floue que l'on va faire excuter par l'ordinateur ?
Dtaillons les parties de ce programme, avant de l'crire en entier :
L'ordinateur peut imposer une chose : l'amprage du courant qui passe dans la rsistance chauffant la cuve.
(0,100,60) veut dire que le paramtre temperature est normalement compris entre 0 C et 100 C
(facultatif), et que si on a pas pu mesurer ladite temprature, il faut considrer qu'elle vaut 60 C
(inutilis).
(0,5,0) veut dire que le parametre amperage est normalement compris entre 0 et 5 ampres (facultatif), et
que si l'ordinateur n'a pas pu calculer correctement un amprage, il doit ordonner de sortir 0 ampres
(scurit).
Il faut dfinir des zones de temprature, et des zones d'amprage. Par exemple en ajoutant les lignes
suivantes au programme :
Dans le cas de "tiede", (temperature, 33, 36, 38, 41) veut dire que "tiede" est une zone de temprature,
qu'elle commence 33 C, qu'elle est pleinement ralise entre 36 C et 38 C, et qu'elle cesse partir de
41 C.
Ca, ce n'est pas un problme de logique floue, mais un problme d'lectronique. Si un thermomtre est
connect l'ordinateur par l'intermdiaire d'une carte I/O, et que les routines ncessaires ont t ajoutes
au QBASIC, la ligne de programme servant faire la mesure pourrait tre la suivante :
t = MESUREDETEMPERATURE
Quand il excutera cet ordre, l'ordinateur mettra dans la variable nomme "t" le nombre calcul par la
fonction MESUREDETEMPERATURE. Par exemple le nombre 40, si le thermomtre a mesur 40 C.
C'est dire expliquer l'ordinateur les lois ou rgles qu'il doit suivre. Par exemple avec les lignes
suivantes :
Que fera l'ordinateur lorsqu'il excutera ces trois lignes ? Cela est illustr graphiquement, pour t = 40 C,
dans les figures 3, 4, 5, 6, 7 et 8. Le "rsultat" est montr par la figure 9.
De faon synthtique, on peut dire que la fonction SI sert soupeser dans quelle mesure t se trouve dans
quelles zones de temprature, et l'ordre SORTIR sert imposer dans quelle mesure l'amprage devra se
trouver dans quelles zones d'intensit de courant. (Ou entre quelles zones.)
d'infrence
Calculer le rsultat
Une fois qu'il a pass en revue toutes les rgles d'infrence, on peut demander l'ordinateur de calculer
l'amprage. Par exemple avec la ligne suivante :
a = CALCUL(amperage)
Que fait l'ordinateur lorsqu'il excute la fonction CALCUL ? Graphiquement, cela revient estimer o se
trouve le centre de masse de l'union des zones d'amprage dcapites (fig. 10). Dans notre cas, cela donne
0.38 ampres.
Ainsi, le nombre 0.38 sera mis dans la variable nomme "a". Insistons sur le fait que 0.38 est le rsultat du
fait que la variable t contenait le nombre 40. Pour d'autres valeurs de t, les rgles d'infrence feront
engendrer d'autres valeurs de a (c'est leur rle).
Utiliser le rsultat
De nouveau, ce n'est pas un problme de logique floue, mais d'lectronique. La ligne servant imposer
l'amprage dans la rsistance de chauffe, par l'intermdiaire d'une carte I/O dment implmente, pourrait
tre la suivante :
AMPERAGE a
Comme, dans notre exemple, la mmoire nomme "a" contient le nombre 0.38, l'excution de cet ordre
aura pour rsultat de faire passer un courant de 0.38 A dans la rsistance.
Synthse
DO
t = MESUREDETEMPERATURE
a = CALCUL(amperage)
AMPERAGE a
LOOP
Entre le DO et le LOOP se trouvent les lignes qui doivent tres excutes sans arrt pour que le contrle
de la temprature soit effectu en permanence. Ainsi, l'ordinateur va lire rgulirement la temprature de
la cuve, et dcider de l'amprage injecter dans la rsistance chauffante. Comme dans notre exemple il n'y
a aucune forme d'intgration ou de drivation par rapport au temps, il correspond exactement une valeur
de courant chaque valeur de temprature (fig. 11).
Avoir de nombreux paramtres en entre : pas seulement une simple mesure de temprature, mais
des mesures de vitesse, position, force... Certains paramtres peuvent ne pas tres directement des
mesures de capteurs : l'acclration, par exemple, peut tre un paramtre calcul l'aide des
mesures de vitesse. L'erreur sur la position est un paramtre calcul en soustrayant la position
mesure de la position souhaite.
Avoir de nombreux paramtres en sortie : pas seulement imposer un amprage dans une rsistance
lectrique, mais commander plusieurs moteurs, des lampes, des appareils divers...
Utiliser des paramtres comme rsultats intermdiaires. Ils ne sont ni entre ni sortie, mais sont
calculs pour servir de base aux rgles d'infrence suivantes.
Appliquer des rgles d'infrence diffrentes dans des phases diffrentes. Ou modifier les formes des
zones.
Utiliser des fonctions logiques floues, extensions des fonctions boolennes NOT, AND, OR... (NON,
ET, OU en franais.)
(Il aurait t souhaitable que ce texte contienne au moins un exemple d'application "imposante" de logique
floue : le maintien en quilibre d'un balancier invers, le contrle d'un objet en lvitation magntique
active, l'autoguidage d'un missile...)
La logique classique, ou logique de Boole (mathmaticien britannique), originaire des Anciens Grecs,
domine actuellement l'informatique. Avant de parler logique floue, reparlons brivement de cette logique
boolenne classique.
En logique classique, il y a deux tats logiques : faux et vrai. A quoi servent ils ? En gros, faire le mme
genre de choses qu'on fait avec les nombres. Exemple :
Quelle est le nombre donnant "la hauteur en mtres de la tour Eiffel" ? Rponse : 300
Quel est l'tat logique de l'affirmation "la hauteur de la tour Eiffel est plus grande que la hauteur de
l'Everest" ? Rponse : faux
Les tats logiques nous servent noncer les proprits de ce qui nous entoure. On n'utilise pas
ncessairement toujours les mots "faux" et "vrai". Suivant les circonstances, et l'usage qu'on en fait, on
utilise les expressions "0" et "1", "off" et "on", "ouvert" et "ferm", "non" et "oui"...
Comme les ordinateurs ne travaillent souvent qu'avec des nombres, en informatique on a adopt la
convention d'utiliser 0 et 1 pour dire faux et vrai.
En d'autres termes : Imaginons que je vous dise que j'ai stock, dans la mmoire nomme "memo" d'un
ordinateur, un tat logique disant si vous avez gagn au loto. Si quand vous donnez l'ordinateur l'ordre
suivant :
PRINT memo
(Sur certains systmes informatiques, 0 veut dire faux, et -1 veut dire vrai (QBASIC), ou -1 veut dire faux,
et 1 veut dire vrai, ou encore, 1 veut dire faux, et -1 veut dire vrai. Parfois, dans un mme systme, on
inverse par-ci par-l la valeur de faux et de vrai. Peu importe. Dans notre cas, posons que 0 veut dire faux,
et 1 veut dire vrai.)
(Note sans rapport direct avec le sujet : on peut aussi utiliser des tats logiques pour reprsenter des
nombres. Par exemple :
fauxfauxfauxfaux vaut 0
fauxfauxfauxvrai vaut 1
fauxfauxvraifaux vaut 2
fauxfauxvraivrai vaut 3
fauxvraifauxfaux vaut 4
fauxvraifauxvrai vaut 5
fauxvraivraifaux vaut 6
fauxvraivraivrai vaut 7
vraifauxfauxfaux vaut -8
vraivraivraivrai vaut -1
Diverses choses :
Des capteurs : porte ouverte ou ferme, lampe allume ou teinte, dtecteur d'incendie ayant dtect
ou non de la fume... Par exemple, si "le capteur numro 3" est un dtecteur de fume, l'excution
par l'ordinateur de l'ordre :
e = CAPTEUR(3)
Le contenu de tables de vrit, ou des constantes. Par exemple, si le tableau nomm "sol" indique la
prsence d'objets sur un sol virtuel, alors l'excution de l'ordre :
e = sol(35, 12)
mettra 1 dans la variable e s'il y a un objet l'endroit dont les coordonnes sont 35, 12. Sinon, 0.
Exemples :
4 > 2 vaut 1 parce-qu'il est vrai que 4 est plus grand que 2
1 <= 9 vaut 1 parce-qu'il est vrai que 1 est plus petit ou gal 9
>, <, >=, <=, =, <> (pas gal) sont des oprateurs au mme titre que les quatre oprations +, -, * (fois),
/(divis).
2 + 3 donne 5, et 9 < 3 donne 0. La diffrence, c'est que les quatre oprations fournissent un rsultat qui
est un nombre rel, tandis que les oprateurs de comparaison fournissent un rsultat qui est un tat logique
(0 ou 1).
Les fonctions logiques gnralement disponibles sur les ordinateurs sont ET, OU et NON (AND, OR et
NOT en anglais). Elles fonctionnent comme ceci :
Exemples :
1 ET 1 donne 1
1 ET 0 donne 0
1 OU 0 donne 1
NON 1 donne 0
Les fonctions logiques ont des niveaux de priorit : dans des expressions comme NON a ET b OU c,
l'ordinateur value d'abord le NON, puis le ET, puis le OU. Pour imposer l'ordre des valuations, on peut
utiliser des parenthses, comme pour les oprations arithmtiques : NON(a ET (b OU c)).
Les fonctions ET et OU sont des oprateurs au mme titre que les quatre oprations :
La diffrence est que les fonctions logiques s'appliquent des tats logiques, et fournissent des tats
logiques.
(Comme les tats logiques sont souvent reprsents par des nombres, gnralement 0 et 1, des calculs
hybrides entre fonctions arithmtiques et logiques sont possibles. Du genre de :)
(Les fonctions logiques peuvent aussi souvent s'appliquer des nombres rels, mais le rsultats de ces
calculs est trs variable d'un systme l'autre. 8 ET 3 donne 8 sur un Spectrum, 0 sur un BBC ou en
QBASIC, et 1 avec les compilateurs C ANSI.)
(Ces astuces sont bien entendu fortement dconseilles pour des programmes "srieux". On doit appliquer
les oprateurs logiques uniquement des paramtres logiques, et les oprateurs arithmtiques uniquement
des nombres entiers ou rels. Les tats logiques ne peuvent tres utiliss que par les ordres prvus pour
(IF, WHILE, UNTIL...). Le passage de nombres entiers ou rels vers des tats logiques se fait uniquement
l'aide des fonctions prvues cet effet (<, >, <=, =...).)
Un tat logique peut tre mmoris. Vous pouvez par exemple crire la ligne suivante en BASIC :
e = 9>x
Aprs l'excution de cette ligne, la variable e contiendra 1 si 9>x, et 0 si 9<=x. On peut aussi crire
des choses comme :
e = 1
Un tat logique peut tre impos un objet. L'ordre suivant pourrait par exemple servir mettre en
route un moteur :
ETATDUMOTEUR 1
Celui-ci va l'teindre :
ETATDUMOTEUR 0
ETATDUMOTEUR e
On peut donner l'ordinateur les ordres suivants, bien que ce soit un peu original :
ETATDUMOTEUR 9>x
ETATDUMOTEUR CAPTEUR(3)
Un tat logique peut servir dcider s'il faut faire quelque chose ou non. Nottament avec la structure
IF ... THEN ... (si ... alors ...). Par exemple :
(Si la variable x contient un nombre plus petit que 7, alors calcule combien fait x+5, et met le
rsultat dans la variable y.)
(Si la variable x contient un nombre plus grand ou gal 9, alors affiche OK l'cran.)
(Si e contient 0, ou si x est plus petit ou gal y, alors effectue l'ordre ALLUMERMOTEUR.)
IF x>9 THEN
ETATDUMOTEUR 1
ELSE
ETATDUMOTEUR 0
END IF
x=0
DO
PRINT x
x=x+1
LOOP UNTIL x>9
(Affichera les nombres de 0 9 l'cran. DO veut dire "faire", LOOP veut dire "boucle", et UNTIL
veut dire "jusqu' ce que".) (Note : pour arrter un programme en QBASIC (quand il ne s'arrte pas
tout seul), il faut garder la touche Ctrl enfonce, taper la touche Break/Pause, relacher la touche
Ctrl, et parfois encore taper un coup sur Enter.)
CLS
FOR ligne = 1 TO 22
FOR colonne = 1 TO 80
x = ((colonne - 1) / 79) * 3.1416 * 4
y = ((22 - ligne) / 21) * 3.1416 * 2
IF COS(x) > SIN(y) THEN
LOCATE ligne, colonne
PRINT "X"
END IF
NEXT colonne
NEXT ligne
(Dessinera grossirement le domaine de l'quation cos(x) > sin(y).) Si vous voyez un jour des lignes
comme celles-ci dans un programme, vous pouvez les effacer sans craintes :
4. La logique floue
Remarquant qu'un ordinateur programm "normalement" avait gnralement des ractions moins habiles
que celles d'un tre humain, A. Zadeh a contribu rsoudre ce problme en imaginant une gnralisation
de la logique classique. Ce nouveau langage, la logique floue, est conu pour raliser des programmes
informatiques, ou des circuits lectroniques, ayant un comportement plus proche des rflexes humains.
Un tat logique flou est une "amplitude" entre 0 et 1. En d'autres termes : un nombre rel dans l'interval
[0,1]. Par exemple : 0, 0.1, 0.25, 0.4563, 0.99, 1...
Des capteurs : porte plus ou moins ouverte, lampe plus ou moins allume... Par exemple, si "le
capteur 3" est un dtecteur de fume :
e = CAPTEURFLOU(3)
mettra un nombre entre 0 et 1 dans la variable e, suivant la quantit de fume dtecte. Par exemple
0 quand il n'y a pas de fume, 1 pour toute fume dense, et entre 0 et 1 pour une fume plus ou
moins lgre. (Ou encore : une arctangente de la quantit de fume...)
Le rsultat d'un test si une valeur se trouve dans une zone donne. (Voir fig. 1 et 3.) Par exemple, en
posant qu'au dbut du programme il y ait eu la dfinition de zone suivante :
0 si mesure vaut 22
0 si mesure vaut 31
0.25 si mesure vaut 32
0.5 si mesure vaut 33
0.75 si mesure vaut 34
1 si mesure vaut 35
1 si mesure vaut 36
1 si mesure vaut 37
0.5 si mesure vaut 39
0.3333 si mesure vaut 40
0 si mesure vaut 41
0 si mesure vaut 42
De mme, SIPP(mesure, tiede) donnera une valeur entre 0 et 1, chiffrant dans quelle mesure le
paramtre mesure est Plus Petit que les valeurs de la zone tiede :
1 si mesure vaut 22
1 si mesure vaut 25
1 si mesure vaut 31
0.75 si mesure vaut 32
0.5 si mesure vaut 33
0.25 si mesure vaut 34
0 si mesure vaut 35
0 si mesure vaut 36
0 si mesure vaut 37
0 si mesure vaut 39
0 si mesure vaut 41
0 si mesure vaut 42
Il existe galement SIPG (Plus Grand), SIPPOE (Plus Petit Ou Egal), SIPGOE (Plus Grand Ou Egal)
et SIPE (Pas Egal).
Les fonctions logiques floues sont les mmes que les fonctions classiques : ET, OU et NON. Elles donnent
les rsultats suivants :
Soit a et b des tats logiques flous (des nombres rels dans l'interval [0,1]).
Exemples :
0.67 ET 0 donne 0
Notez que si l'on contraint a et b tre 0 ou 1, on retombe dans la logique boolenne classique.
a ET b devient ET (a, b)
a OU b devient OU (a, b)
(Les lecteurs n'aimant pas le Lisp devront faire preuve d'indulgence. C'tait encore la faon la plus simple,
rapide et universelle de procder. Surtout dans le cas d'une implmentation en C, un prprocesseur pourrait
arranger les choses. L'idal sont les possibilits du C++.)
Exemples :
(Un ami m'a signal une autre faon de raliser les oprations en logique floue :
Cette autre approche a l'inconvnient de ncessiter des capacits de calcul plus importantes et les
immenses avantages d'tre plus fluide et de maintenir l'information au fil des calculs (il est possible de
retrouver exactement a si on connat b et c et qu'on sait que a OU b = c)).
Un tat logique flou peut tre mmoris. Vous pouvez par exemple crire la ligne suivante en
BASIC :
e = SI(t1, froid)
Aprs l'excution de cette ligne, la variable e contiendra un chiffre entre 0 et 1, suivant que t1 se
trouve plus ou moins dans la zone "froid".
Un tat logique peut tre impos un objet. L'ordre suivant pourrait par exemple servir donner
un moteur une vitesse entre l'arrt complet et le maximum, suivant le nombre entre 0 et 1 que
contient e :
ETATDUMOTEUR e
Ou, bien sr :
L'ordre suivant affichera un nombre l'cran, entre 0 et 1, chiffrant dans quelle mesure le contenu
de la variable t1 est plus ou moins dans la zone "froid" :
Un tat logique peut servir dcider s'il faut faire quelque chose ou non. Par exemple :
Un tat logique peut servir dire dans quelle mesure un paramtre doit se trouver dans telle ou telle
zone de valeur. Cela se fait en deux temps :
Primo, avec l'ordre SORTIR, il sert dire dans quelle mesure un paramtre devra se trouver dans
l'une ou l'autre zone de valeurs. (Voir le chapitre 1, et fig. 4, 6, 8 et 9.)
Secundo, la fonction CALCUL fait la synthse de toute l'information donne par les ordres SORTIR.
Il fait en quelque sorte "la moyenne pondre". Il "soupse" dans quelle mesure les ordres SORTIR
ont prconiss que le paramtre soit dans telle ou telle zone de valeur, et dcide quelle valeur finale,
prcise, aura le paramtre. (Voir le chapitre 1, et fig. 10.)
5. Commentaires
D'un cot elle n'offre pas la rigueur mathmatique des systmes de contrle comme les PID (Proportionnel,
Intgral, Driv : mthode gnrale pour la rgulation de moteurs, systmes de positionnement,
haut-parleurs...). Imaginez vous un systme flou intervenant directement sur un signal HI-FI ?
D'un autre cot, quand de toute faon cette rigueur est inutile, voire illusoire, la logique floue offre une
immense souplesse, des possibilits de raffinement extrmes, et une programmation beaucoup plus
instinctive. Imaginons un systme sans arrt ballott par des rafales de vent; a quoi bon faire des calculs
mathmatiques subtils pour essayer de le contrler ?
(Il existe des thories "classiques" qui grent les phnomnes alatoires, ainsi que les imprcisions de
mesure, beaucoup plus srieusement qu'en logique floue. Elles proposent des calculs trs rigoureux.
Suivant les circonstances, cette rigueur sera plus puissante que la logique floue, ou sera une complication
inutile.)
La logique floue a beau avoir une apparence "humaine", son utilisation demandera quand mme un certain
flair, et de l'exprience.
La logique floue n'est pas cantonne l'automatisation. Elle est un formalisme utile pour les systmes
experts, l'informatique en gnral, la modlisation de systmes biologiques et humains... Les OS et les
programmes de bureautique seraient plus souples si leur programmation faisait appel la logique floue.
Un des apports principaux de la logique floue sera peut-tre de permettre aux particuliers de programmer
eux-mme le comportement gnral des objets qui les entourent. Un enfant veill est capable de changer
la programmation en logique floue d'une voiture tlguide.
Un dtail pratique : Dans le cadre du noyau de logique floue en BASIC fourni dans ce livre, on peut
mlanger des oprations en logique classique et des oprations en logique floue: grce aux fonctions de
traduction FUZZY et VRAI (Voir l'Annexe 2). (Avec un systme conu d'origine pour la logique floue,
cette traduction d'un systme l'autre se ferait automatiquement.)
6. Perspectives
On peut broder l'infini autour du concept de logique floue. En matire d'automatisation, quelques voies
sont distinguer :
On peut observer un humain en train de commander une machine, pour en dduire les rgles
d'infrence. Ensuite, on implmente ces rgles dans un ordinateur, en logique floue.
Grce des capteurs, on peut aussi laisser un ordinateur "observer" un humain en train de
commander une machine, pour qu'il en dgage lui-mme les rgles d'infrence. Des rseaux de
neurones flous seraient fort utiles cet effet.
Enfin, On peut mettre un ordinateur aux commandes d'une machine, et le laisser trouver tout seul les
rgles d'infrence. L'ordinateur sait seulement qu'il doit chercher maximiser des paramtres comme
"rendement", et minimiser des paramtres comme "usure". Ici, les rseaux de neurones sont
indispensables. Le principal avantage de cette faon de procder est que si la machine change
ultrieurement de faon de travailler (petite panne, usure, changement d'environnement...)
l'ordinateur pourra s'y adapter tout seul. (Systmes de Brooks, robots prvus pour les missions sur
Mars...)
Annexe 1
Le noyau de logique floue en BASIC
Ce noyau est une "version minimale". Il ne procde pas des vrifications soignes, ne permet pas
"d'effacer" des paramtres et zones aprs les avoir dclars, ne permet pas d'imposer des amplitudes de
zones dans un contexte rcursif, n'alloue pas un nombre illimit de zones et paramtres, est limit dans la
possibilit de consulter ce qui a t dclar, impose que toutes les zones aient un nom diffrent, ne fournit
pas d'oprations mathmatiques sur et entre les zones... Accessoirement, la convention un peu douteuse a
t prise comme-quoi les ordres et fonctions propres la logique floue sont en franais. Le lecteur passant
du noyau donn ici un systme officiel, devra s'attendre des changements de forme.
Le noyau a t crit en QBASIC ( Microsoft). Le QBASIC est livr d'office avec le MS-DOS
( Microsoft), et se trouve donc dans le rpertoire DOS de presque tous les PC. (Il eut t plus propre de
l'crire en C++, mais l'poque l'auteur ne pratiquait pas encore ce langage.)
Pour lancer le QBASIC quand on est sous MS-DOS (le symbole C:\>_ apparat, ou quelque chose qui y
ressemble), il faut taper QBASIC au clavier, et enfoncer la touche Enter. Parfois, sous Windows (
Microsoft), un bouton poussoir QBASIC est disponible dans une des fentres du "Gestionnaire de
programmes". Sinon, cherchez l'icne du QBASIC avec le "Gestionnaire de fichiers", et double-cliquez
dessus, ou larguez-la sur une fentre du gestionnaire de programmes.
Les lecteurs n'ayant aucune connaissance en BASIC ou QBASIC peuvent soit apprendre sur le tas, aux
commandes d'un PC (le fichier d'aide est comprhensible pour un informaticien), soit utiliser les manuels
fournis par l'diteur de MS-DOS, soit acheter dans le commerce (magasins d'informatique, FNAC, librairies
scientifiques...) un des nombreux livres traitant de QBASIC ou de QuickBASIC (version professionnelle,
avec compilateur).
Le QBASIC ayant une faon un peu ennuyeuse d'assimiler les fonctions et procdures, certains lecteurs
prfrerons peut-tre d'abord taper le noyau comme simple texte dans l'diteur EDIT, puis le charger sous
QBASIC.
Afin de diminuer le travail de recopie, signalons que tout le programme peut tre tap en minuscules, et
qu'un grand nombre d'espaces ne doivent pas obligatoirement tres taps: par exemple a = b + 3 peut sans
risque tre entr a=b+3.
Les lignes commenant par DECLARE vont tre ajoutes automatiquement par le QBASIC. Ne pas s'en
inquiter.
Si vous tes en train de lire ce texte sur un cran d'ordinateur, ne recopiez pas le programme la main :
faites un copier-coller vers un diteur texte.
Le listing du noyau contient trs peu de REMarques. En cas d'incomprhension de son mode de
fonctionnement, l'annexe 2 devrait tre d'un certain secours. Ce noyau de logique floue n'a pour ainsi dire
aucune rpercussion sur le systme. Il cre deux tableaux et ajoute quelques fonctions et procdures, mais
il ne fait rien du genre d'accder directement la mmoire, ou utiliser des routines d'interruption.
(Comment s'utilise un noyau : Si vous voulez faire excuter par l'ordinateur un programme utilisant la
logique floue, il faut le taper ou l'insrer l'endroit o se trouve la ligne "REM insrer ici votre
programme".)
Le noyau:
END FUNCTION
FUNCTION et (a, b)
reponse = a
IF b < a THEN reponse = b
et = reponse
END FUNCTION
SUB NETTOYAGEGENERAL
FOR z = 0 TO zolibre - 1
zo(z, 5) = 0
NEXT z
END SUB
FUNCTION ou (a, b)
reponse = a
IF b > a THEN reponse = b
ou = reponse
END FUNCTION
FUNCTION si (valeur, z)
x1 = zo(z, 1)
x2 = zo(z, 2)
x3 = zo(z, 3)
x4 = zo(z, 4)
zocalc = 0
IF valeur >= x2 AND valeur <= x3 THEN
zocalc = 1
ELSE
IF valeur >= x1 AND valeur < x2 THEN
zocalc = (valeur - x1) / (x2 - x1)
ELSE
IF valeur > x3 AND valeur <= x4 THEN
zocalc = 1 - (valeur - x3) / (x4 - x3)
END IF
END IF
END IF
si = zocalc
END FUNCTION
FUNCTION sipe(valeur, z)
sipe = non(si(valeur, z))
END FUNCTION
END IF
sipp = zocalc
END FUNCTION
Annexe 2
Les fonctions et procdures du noyau
AUMOINSUNPEUVRAI(elf)
Le rsultat de l'valuation de cette fonction est un tat logique classique : "vrai" si elf > 0.5, "faux" sinon.
Une fois que toutes les rgles d'infrence permettant de donner une amplitude aux zones d'un paramtre
ont t donnes (avec l'ordre SORTIR), la fonction CALCUL donne le rsultat final.
La fonction CALCUL remet zro l'amplitude de toutes les zones du paramtre calcul. En d'autres
termes: l'effet des ordres SORTIR est annul. (Insistons : uniquement l'effet des ordres SORTIR
concernant les zones dfinies pour le paramtre venant d'tre calcul par CALCUL.)
Si les amplitudes de toutes les zones du paramtre sont zro, et que donc l'ordre CALCUL ne peut rien
dterminer, il prendra la valeur de scurit donne lors de la dclaration du paramtre (fonction
PARAMETRE).
CALCUL ne tient pas compte des limites donnes au paramtre lors de sa dclaration. Voir
CONTRAINTE.
Dans les cas o il faut calculer plusieurs paramtres, les fonctions CALCUL peuvent tout aussi bien tres
places chacune juste aprs ses rgles d'infrence propres (SORTIR), ou regroupes ensemble aprs toutes
les rgles d'infrence donnes en vrac.
La faon dont la fonction CALCUL doit dterminer la valeur d'un paramtre de sortie ne semble pas
dfinie de faon rigoureuse. L'auteur a donc choisi la solution qui lui semblait la plus rapide (voir le listing
du noyau).
CALCULT(np)
Idem que CALCUL, mais ne remet pas zro les amplitudes donnes par SORTIR aux zones.
CONTRAINTE(nr, np)
CONTRAINTE sert remettre nr dans les limites initialement donnes au paramtre numro np. Exemple :
v2 = CONTRAINTE(v1, temperature)
ET(elf1, elf2)
Voir le chapitre 4.
Le rsultat de l'valuation de cette fonction est un tat logique flou : elf1 si elf1<elf2, elf2 sinon. En
d'autres termes : le plus petit d'entre elf1 et elf2. Exemple :
L'ordre suivant ne mettra jamais dans la variable e un tat logique flou suprieur 0.8 :
FUZZY(elc)
Le rsultat de l'valuation de cette fonction est un tat logique flou : 1 si elc vaut "vrai", et 0 si elc vaut
"faux". Exemples :
L'excution de cette procdure permet de changer les donnes d'un paramtre. Elle peut tre utilise
n'importe quand.
Les nouvelles donnes sont : nr1, nr2, nr3. Elles remplacent les donnes initialement transmises avec la
fonction PARAMETRE.
L'excution de cette procdure permet de changer les donnes d'une zone. Elle peut tre utilise n'importe
quand.
Elle fonctionne de la mme faon que l'ordre MODIFIEPARAMETRE, et permet de changer les donnes
np, nr1, nr2, nr3, et nr4 d'une zone dclare avec la fonction ZONE.
On peut modifier n'importe quand les donnes de la zone dont le numro est contenu dans la variable
nomme "vite" :
Cette procdure ne modifie pas la valeur de l'amplitude ventuellement dj donne par un ordre SORTIR.
NETTOYAGE np
L'excution de cette procdure remet zro les amplitudes de toutes les zones du paramtre np.
(Amplitudes donnes avec SORTIR.) Exemple :
NETTOYAGE temperature
NETTOYAGEGENERAL
L'excution de cette procdure remet zro les amplitudes de toutes les zones de tous les paramtres.
(Amplitudes donnes avec SORTIR.)
Ordre normalement inutile, mais permettant d'tre sr. Par exemple dans des programmes htroclites o
on ne donne pas toujours une amplitude toutes les zones d'un paramtre de sortie.
NON(elf)
Voir le chapitre 4.
Le rsultat de l'valuation de cette fonction est un tat logique flou "inverse" de elf : 1-elf.
OU(elf1, elf2)
Voir le chapitre 4.
Le rsultat de l'valuation de cette fonction est un tat logique flou : elf1 si elf1>elf2, sinon : elf2. En bref :
le plus grand des deux.
Cette fonction logique floue donne la plus "favorable" de deux amplitudes elf1 et elf2.
OUEX(elf1, elf2)
Voir le chapitre 4.
Le rsultat de l'valuation de cette fonction donne un tat logique flou. Elle est la transposition de la
fonction boolenne "ou exclusif", soit : (elf1 OU elf2) ET NON (elf1 ET elf2)
OUEX dtermine dans quelle mesure elf1 ou elf2 sont vrai, mais pas les deux la fois.
Voir le chapitre 1.
Le rsultat de l'valuation de cette fonction est un numro de paramtre. Ce numro est destin tre
stock dans une variable, "pour rfrence ultrieure".
Cette fonction dclare un paramtre. Que ce soit une entre, sortie, ou paramtre intermdiaire.
L'usage des trois nombres rels donns est le suivant : nr1 : limite infrieure des valeurs que prendra
probablement le paramtre.
nr3 : scurit
nr3 est la valeur que donnera l'ordre CALCUL s'il n'arrive pas calculer une valeur.
Exemple :
PARAMETRE ne doit tre utilis qu'une seule fois par paramtre, au dbut du programme. Il y a une
limite au nombre de paramtres que l'on peut dclarer. Comme il est, le noyau autorise la dclaration de 32
paramtres. Pour augmenter ce nombre, il suffit de modifier l'ordre DIM pm(0 TO 31, 0 TO 2).
Les donnes d'un paramtre peuvent tres modifies n'importe quand, grce l'ordre
MODIFIEPARAMETRE. On peut aussi jongler avec les numros de paramtre. Soit temperature1 et
temperature2 deux variables contenant des numros de paramtre, on peut les intervertir de la faon
suivante :
temporaire = temperature1
temperature1 = temperature2
temperature2 = temporaire
SECURITE(np)
Le rsultat de l'valuation de cette fonction est la valeur de scurit donne au paramtre lors de sa
dclaration par la fonction PARAMETRE.
acceleration = PARAMETRE(-9, 9, 1)
PRINT SECURITE(acceleration)
SI(nr, nz)
Le rsultat de l'valuation de cette fonction sera un tat logique flou chiffrant dans quelle mesure le
nombre nr se trouve dans la zone nz.
Le rsultat sera 0 si nr est en-dehors de la zone, 1 s'il est tout fait dedans, et entre 0 et 1 s'il est "sur les
bords de la zone".
Exemples :
Il est galement possible, mais de mauvais got, de vrifier si une valeur se trouve dans une zone pour
laquelle elle n'a pas t dfinie. Du genre de :
SIPE(nr, nz)
Le rsultat de l'valuation de cette fonction sera un tat logique flou chiffrant dans quelle mesure le
nombre nr se trouve hors de la zone nz.
SIPG(nr, nz)
Le rsultat de l'valuation de cette fonction sera un tat logique flou chiffrant dans quelle mesure le
nombre nr est plus grand que la zone nz. ("A droite de la zone.")
SIPGOE(nr, nz)
Le rsultat de l'valuation de cette fonction sera un tat logique flou chiffrant dans quelle mesure le
nombre nr est plus grand ou gal la zone nz. ("Dedans, ou droite".)
SIPP(nr, nz)
Le rsultat de l'valuation de cette fonction sera un tat logique flou chiffrant dans quelle mesure le
nombre nr est plus petit que la zone nz. (" gauche de la zone".)
SIPPOE(nr, nz)
Le rsultat de l'valuation de cette fonction sera un tat logique flou chiffrant dans quelle mesure le
nombre nr est plus petit ou gal la zone nz. ("Dedans, ou gauche".)
L'effet de SORTIR est de stocker en mmoire l'information comme quoi la zone est "tronque" une
hauteur donne par elf. Cette information sera utilise lors de l'usage de la fonction CALCUL.
En d'autres termes : SORTIR dit dans quelle mesure le paramtre auquel se rattache la zone, devra tendre
se trouver dans cette zone.
Il est permis d'utiliser SORTIR plusieurs fois de suite pour une mme zone, mais seul le dernier usage en
date compte.
L'ordre NETTOYAGEGENERAL remet zro toutes les amplitudes de toutes les zones, et donc annule
l'effet de tous les ordres SORTIR.
TRESVRAI(elf)
Le rsultat de l'valuation de cette fonction est un tat logique classique : "vrai" pour toute amplitude
logique floue elf plus grande que 0.75, "faux", sinon.
VRAI(elf)
Le rsultat de l'valuation de cette fonction est un tat logique classique : "vrai" pour toute amplitude
logique floue elf plus grande que 0.5, "faux", sinon.
Cette fonction transforme une amplitude logique floue elf en tat boolen classique. C'est ncessaire ds
qu'on veut appliquer des tats flous des fonctions et procdures du QBASIC (IF, WHILE, UNTIL, AND,
OR, NOT...) Permet d'crire des lignes de programme comme :
e = VRAI(SI(t, tropchaud))
IF e THEN ALARM 1
Pour obtenir l'quivalent de "FAUX(elf)", il faut utiliser la fonction boolenne NOT du QBASIC :
Cette fonction sert dclarer une zone, rattache un paramtre. np est le numro de ce paramtre, nr1
est la valeur pour laquelle cette zone commence, nr2 est la valeur pour laquelle cette zone est pleinement
ralise, nr3 est la valeur pour laquelle la zone commence cesser, et nr4 est la valeur partir de laquelle
la zone cesse dfinitivement.
Surtout s'il s'agit d'une zone de sortie, il ne faut pas que sa surface soit nulle. Par contre, on peut avoir
nr2 = nr3, ou nr1 = nr2 et/ou nr3 = nr4. On peut dire que les zones ont deux usages :
- Permettre, grce l'ordre SI, de dterminer dans quelle(s) zone(s) se trouve un paramtre mesur.
- Permettre d'imposer dans quelle(s) zone(s) devra tre un paramtre qu'on veut imposer une machine,
grce l'ordre SORTIR, puis la fonction CALCUL.
ZONE n'est utilis qu'une seule fois pour chaque zone, en dbut de programme. Tel qu'il est, le noyau
autorise la dclaration de 128 zones. Pour augmenter ce nombre, il suffit de modifier l'ordre
DIM zo(0 TO 127, 0 TO 5) (ou utiliser l'ordre REDIM du QBASIC).
A moins d'utiliser des tableaux, deux zones ne peuvent pas avoir le mme nom, mme si elles se rattachent
des paramtres diffrents.
ZONE est une fonction normale, dont le rsultat est un simple nombre entier (le numro de la zone),
destin tre mmoris dans une variable. Elle fonctionne d'une faon analogue PARAMETRE : elle fait
retenir des donnes l'ordinateur, et fournit un numro (le numro de zone), qui est stock dans une
variable "pour rfrence ultrieure".
PRINT plein
Tous les chiffres donns lors des dclarations avec PARAMETRE et ZONE se trouvent dans les deux
tableaux pm et zo.
Alors l'ordre
n = pm(tropchaud, 2)
Remerciements
La mise en page, les dessins et les tests des programmes ont t effectus avec une station de travail Acorn
Archimedes prte par M. Frdric Cloth.
Cet expos bnfici des critiques de MM. Didier Bizzarri et Frdric Cloth.
Renseignements sur l'dition, les codes barres: M. Chinh Dang Vu, Dr. Oosterbosch, le service Dpot
Lgal de la Bibliothque Royale Albert I, l'AFNIL, La Technothque.
Encouragements et conseils: Centre Electronique Ligeois, France Plumer, Roeland Zeh, Dimitri Gathy,
Alexandra Polmans