Sunteți pe pagina 1din 26

IASE 1/26 Cap. 7.

Logica Fuzzy

7. Logica Fuzzy
7.1. Funcţia de apartenenţă
În vederea introducerii în teoria mulţimilor şi a logicii fuzzy, să ne oprim, pentru
început, asupra funcţiei de apartenenţă. În acest scop, să notăm cu X mulţimea totală, denumită
setul universal, relativ la care toate celelalte mulţimi sunt submulţimi ale mulţimii X (∀ A,
avem A⊆X). În această ipoteză, orice mulţime A poate fi reprezentată prin funcţia sa de
apartenenţă, numită altfel funcţie de adevăr, sau funcţie caracteristică. Funcţia de apartenenţă
uA(x) a mulţimii A relativă la setul universal X este definită prin
⎧1 dacă x ∈ A
u A (x) = ⎨
⎩0 dacă x ∉ A
În consecinţă, orice submulţime A⊆X poate fi reprezentată sub forma A={x/uA(x),
x∈A}. Altfel spus, fiecărui element x din X i se ataşează valoarea funcţiei sale de apartenenţă.
Dacă X este finită, orice mulţime poate fi reprezentată ca o listă a tuturor elementelor lui X,
fiecare element fiind urmat de un slash, după care apare valoarea 1 sau 0, după cum elementul
respectiv aparţine sau nu aparţine mulţimii. Altfel spus, fiecărui simbol x din X i se asociază un
"flag" indicând apartenenţă sau neapartenenţa acestuia la mulţime.
Exemplu. Considerând setul universal X={1,2,3,4}, dacă A={2,4} utilizarea funcţiei de
apartenenţă va conduce la reprezentarea A={1/0,2/1,3/0,4/1}.
Să discutăm în continuare cum putem caracteriza operaţiile cu mulţimi cu ajutorul
funcţiei de apartenenţă. Fie, pentru aceasta, A şi B două submulţimi ale lui X.
Reuniunea acestora, A∪B, conţine elementele ce aparţin fie lui A fie lui B. Utilizând
funcţia de apartenenţă, reuniunea se reprezintă A ∪ B = { x⏐ua∪B(x), unde uA∪B =
max(uA(x),uB(x)}. De exemplu, cu X şi A din exemplul precedent şi B={1/1, 2/1, 3/0, 4/1}
={1,2,4} se obţine
A ∪ B = {1/1,2/1,3/0,4/1} = {1,2,4}.
Intersecţia dintre mulţimile A şi B, A∩B, conţine elementele care aparţin atât lui A cât
şi lui B, adică
A ∩ B = {x⏐uA∩B(x)=min(uA(x),uB(x)}.
Diferenţa dintre A şi B se va reprezenta similar
A-B=(x⏐uA-B(x)=min(uA(x),1-uB(x)}.
În particular, dacă A este egal cu X, diferenţa reprezintă complementul lui B, notat BC, şi
BC = X-B = {x⏐uBC(x)=1-uB(x)},
deoarece
min(uX(x),1-uB(x)) = min(1,1-uB(x)) = 1 - uB(x).
Având în vedere că operaţiile de intersecţie şi reuniune sunt comutative şi asociative,
proprietăţile de mai sus pot fi generalizate pentru orice secvenţă finită de submulţimi ale setului
universal.
De asemenea, legile lui De Morgen
A∪ B= A∩ B
A ∩ B = A ∪B
se pot transcrie în termenii funcţiilor de apartenenţă
1 - max(uA(x),uB(x)) = min(1-uA(x),1-uB(x))
1 - min(uA(x),uB(x)) = max(1-uA(x),1-uB(x))
IASE 2/26 Cap. 7. Logica Fuzzy

7.2. Submulţimi fuzzy

În teoria mulţimilor ordinare, un element oarecare aparţine, sau nu, unei anumite
mulţimi. De exemplu, dacă X este mulţimea tuturor poligoanelor, atunci mulţimea triunghiurilor
poate fi definită prin
A = {x : x are trei laturi}
Evident, pentru orice element particular x∈X, există două posibilităţi mutual exclusive: (1)
x∈A, caz în care uA(x)=1, sau (2) x∉A, caz în care uA(x)=0.
Dar excluderea mutuală nu poate fi aplicată la orice tip de raţionament. De exemplu, fie
X mulţimea tuturor animalelor şi să presupunem că se doreşte să se caracterizeze diferitele
specii în termenii efectului dăunător pe care acestea îl au. Astfel, vom considera mulţimea B a
animalelor dăunătoare
B = {x ⏐ x este un animal dăunător }
Evident, există o deosebire de nuanţă între definiţiile celor două mulţimi A şi B.
Procedând intuitiv, pentru ca o mulţime oarecare A să fie construită ca submulţime a
setului universal, trebuie să se răspundă la întrebări de tipul "Este x un element al lui A?",
pentru toate valorile posibile ale lui x în X. În general, dacă A este definită printr-o formulare cu
predicate
A = {x ⏐ x este ... } = {x ⏐ p(x) }
este obligatoriu ca predicatul p() să fie corect definit, în sensul ca acesta să fie neambiguu, adică
determinist.
Se pune însă întrebarea: un predicat din afara domeniului matematic poate fi întotdeauna
determinist? Răspunsul este desigur negativ. Revenind la exemplul cu animalele, într-o anumită
specie s-ar putea ca unele animale să fie dăunătoare, iar altele nu. Altfel spus, predicatul care
defineşte dacă o specie este sau nu dăunătoare este nedeterminist.
Modelul nedeterminist a fost introdus de Z. A. Zadeh, care a definit noţiunea de
submulţime fuzzy a unei mulţimi universale X. O astfel de submulţime este definită prin
A = { x ⏐uA(x) },
unde funcţia de apartenenţă uA, relativă la mulţimea A, ia valori în intervalul [0,1], adică pentru
orice x∈X, avem 0≤uA(x)≤1.
Faţă de situaţia clasică unde apartenenţă sau neapartenenţa la o mulţime este
reprezentată prin valorile binare 0 sau 1, în cazul submulţimilor fuzzy aceasta este reprezentată
printr-o valoare reală din intervalul [0,1].
Revenind la exemplul cu animalele, construcţia mulţimii B a animalelor dăunătoare
presupune să asociem fiecărui element x din X o valoare uB(x)∈[0,1], unde uB(x) este o măsură
a gradului în care specia x este dăunătoare. Din acest punct de vedere, specia x este "mai
dăunătoare" decât specia y, dacă şi numai dacă uB(x)>uA(x). În acest context, funcţia de
apartenenţă este o caracterizare cantitativă a calităţii.
Exemplu. Se consideră mulţimea X a tuturor roboţilor aparţinând diferitelor companii.
Dorim să caracterizăm submulţimea A a "roboţilor inteligenţi". Într-o manieră tranşantă se
poate spune că robotul a aparţine clasei dacă acesta se consideră inteligent, sau nu aparţine
clasei dacă acesta este complet neinteligent. Utilizarea submulţimilor fuzzy permite "gradarea"
inteligenţei prin intermediul funcţiilor de apartenenţă. De exemplu, se poate considera
A = {a/0.2, b/0.9, c/0.4}.
Apartenenţa elementelor la o mulţime este caracterizată de funcţia de apartenenţă după
cum urmează:
- dacă uA(x)=1, atunci x este în mod sigur în A şi vom scrie, ca în cazul mulţimilor
ordinare, x∈A;
- dacă uA(x)=0, atunci sigur x nu aparţine lui A, x∉A;
- dacă 0<uA(x)=λ<1, putem afirma cu certitudinea λ, că x aparţine lui A, scriind x∈λ A.
Ca şi în cazul mulţimilor ordinare, putem afirma că A⊆B, dacă şi numai dacă uA(x)≤uB(x),
pentru orice element x din X. Similar, A=B, dacă şi numai dacă uA(x)=uB(x), ∀ x∈X.
IASE 3/26 Cap. 7. Logica Fuzzy

Relaţiile referitoare la funcţia de apartenenţă corespunzătoare reuniunii, intersecţiei,


diferenţei şi complementarei rămân în continuare valabile:
uA∪B(x)=max(uA(x),uB(x))
uA_B(x)=min(uA(x),uB(x))
uA-B(x)=max(uA(x),1-uB(x))
uBC =1-uB.
Trebuie precizat că, în acest caz, legea de complementaritate din teoria mulţimilor
A ∩ AC = Φ, A ∪ AC = X, ∀ A _ X,
nu mai rămâne valabilă.
Contraxemplu. Fie X={u,v,w,z} setul universal şi A={u/0.5,v=0.3}. Atunci
AC={u/0.5,v/0.7,w/1,z/1} şi prin urmare
A ∪ AC = {u/0.5,v/0.7,w/1,z/1} ≠ X, iar
A ∩ AC = {u/0.5,v/0.3} ≠ Φ.

7.3. Latice. Logica fuzzy


Pentru a face o scurtă introducere în logica fuzzy va trebui să zăbovim în prealabil
asupra noţiunii de latice.
O latice este o structură care implică noţiunea de ordine. Fie L o mulţime nevidă şi
R⊆L×L o relaţie peste această mulţime. Relaţia R este o relaţie de ordine peste L dacă este
- reflexivă: (a,a)∈R, ∀a∈L;
- antisimetrică: dacă (a,b)∈R şi (b,a)∈R, atunci a=b;
- tranzitivă: dacă (a,b)∈R şi (b,c)∈R, atunci (a,c)∈R.
Cum relaţia ≤ este o relaţie de ordine, vom nota în cele ce urmează prin acest simbol
relaţia R, fără a face nici o precizare asupra semnificaţiei acestei relaţii.
Dacă, în plus, este îndepliniţă şi condiţia
∀ a,b∈R, avem fie a≤b, fie b≤a,
atunci relaţia ≤ este o relaţie de ordine totală.
Prin mulţime parţial ordonată se înţelege o mulţime înzestrată cu o relaţie de ordine.
Dacă relaţia de ordine este totală, atunci mulţimea se numeşte total ordonată.
O modalitate practică de reprezentare a mulţimilor ordonate o reprezintă diagramele
Hasse. Astfel, elementele mulţimii reprezintă nodurile unui graf, ale cărui arce, orientate sau
neorientate, indică relaţia de ordine dintre elementele corespunzătoare nodurilor adiacente. Dacă
arcul este neorientat, nodul "mai mare" se va reprezenta mai sus.
Exemplu. Fie L={1,2,3,4,6,8,12,16} şi relaţia ≤ definită după cum urmează:
a ≤ b dacă şi numai dacă a este un divizor al lui b.
Evident, relaţia astfel definită este o relaţie de ordine, dar nu este o ordine totală pe L. Diagrama
Hasse este cea ilustrată mai jos.
Fie L o mulţime şi R⊆L o submulţime a sa. Un element u∈L este o margine superioară
a lui R, dacă r≤u pentru orice r∈R. Analog, l este o margine inferioară, dacă l≤r pentru orice
r∈R.
16

8 12
Diagrama Hasse
a laticei (L, ≤)
4 6

2 3

1
IASE 4/26 Cap. 7. Logica Fuzzy

Vom nota cu sup(R) cea mai mică margine superioară (LUB), iar cu inf(R) cea mai mare
margine inferioară a lui R (GLB).
Definiţie. O mulţime L înzestrată cu o relaţie de ordine ≤ este o latice, dacă pentru orice
submulţime {x,y}⊆L formată din două elemente, L conţine cea mai mică margine superioară şi
cea mai mare margine inferioară a submulţimii respective.
Vom nota prin x∨y cea mai mică margine superioară (LUB), iar prin x∧y cea mai mare
margine inferioară (GLB). În general, orice mulţime total ordonată este o latice, deoarece x∨y
este fie x, fie y şi x∧y este fie x, fie y, după cum x≤y sau y≤x.
Propoziţie. O mulţime L înzestrată cu două relaţii binare ∨ şi ∧ satisfăcând următoarele
patru proprietăţi
1. Comutativitate: x ∨ y = y ∨ x, x ∧ y = y ∧ x, ∀ x,y∈L,
2. Asociativitate: x∨(y ∨ z) = (x ∨ y)∨z, (x ∧ y)∧z =(x ∧ y)∧z, ∀ x,y,z∈L,
3. Idempotenţă: x ∨ x =x, x ∧ x =x, ∀ x,y∈L,
4. Absorbţie: x∨(y ∧ x) = x, x∧(y ∨ x) =x, ∀ x,y,z∈L,
este o latice, cu relaţia de ordine "≤" definită prin
a ≤ b dacă şi numai dacă a ∨ b = b (sau echivalent a ∧ b = a).
Prin definiţie, o latice este distributivă dacă operaţiile ∨ şi ∧ sunt distributive între ele
5. x∧(y ∨ z) = (x ∧ y)∨(x ∧ z),
x∨(y ∧ z) = (x ∨ y)∧(x ∨ z), ∀ x,y,z∈L.
Definiţie. O latice este mărginită dacă conţine două elemente, notate cu "0" şi "1", care
sunt cel mai mic, respectiv cel mai mare, elemente din laticea considerată. O astfel de latice este
o cvadruplă de forma (L,∨,∧,0,1).
Definiţie. O latice este complementată dacă pentru orice element x din L, există un
element x'∈L, denumit complementul lui x, astfel incât x∨x'=1 şi x∧x'=0.
Definiţie. O latice distributivă, mărginită şi complementată este o algebră Boole sau
algebră booleană. O algebră booleană este reprezentată printr-o sextuplă de forma
(L,∨,∧,⎤,0,1)
cu operaţiile binare ∨ şi ∧ şi operatorul unar ⎤.
Definiţie. O Heiting algebră este o sextuplă
(L,∨,∧,→,0,1)
în care (L,∧,∨,0,1) este o latice distributivă şi mărginită, iar "→" este o operaţie binară pe L,
denumită implicaţie, satisfăcând următoarele cinci proprietăţi:
H1. x→x=1
H2. (x → y)∧y = y
H3. x ∧ (x → y) = x ∧ y
H4. x → (y ∧ z) = (x → y)∧(x → z)
H5. (x ∨ y) → z = (x → z) ∧ (y → z).

Propoziţie. Dacă (L,∨,∧,⎤,0,1) este o algebră booleană şi opaeraţia a → b este definită


prin ⎤a ∨ b, atunci (L,∨,∧,→,0,1) este o Heyting algebră.

Definiţie. O latice este denumită completă, dacă fiecare sub-mulţime R a sa conţine un


supremum sau, echivalent, fiecare submulţime a sa conţine un infimum.
Logica booleană şi logica fuzzy se caracterizează şi se deosebesc prin spaţiile în care
iau valori funcţiile corespunzătoare de adevăr, mulţimea {0,1}, respectiv intervalul [o,1]. Fiind
total ordonate, ambele spaţii sunt latici distributive şi mărginite în raport cu relaţia de ordine
naturală, {0,1} fiind, în plus, şi algebră booleană.
Deşi teoretic în logica fuzzy funcţia de adevăr ia valori în intervalul [0,1], Zadeh a luat
în considerare numai un număr cel mult numărabil de valori de adevăr. O astfel de mulţime de
valori de adevăr ar putea fi de forma VA = {adevărat, foarte probabil, incert, probabil
neadevărat, fals}.
IASE 5/26 Cap. 7. Logica Fuzzy

Înainte de a defini logica fuzzy, să trecem în revistă şi logica cu trei valori a lui Kleene.
În acest sistem, spaţiul valorilor de adevăr constă în mulţimea {0, 1/2, 1}, ordinea fiind cea
naturală. Notând cu T funcţia de adevăr, vom spune că T(a)=1, T(a)=0 sau T(a)=1/2, după cum
fromula a este adevărată, falsă sau nu putem decide asupra veridicităţii acesteia. În logica cu trei
valori Kleene, evaluarea valorilor de adevăr corespunzătoare negaţiei, disjuncţiei, conjuncţiei şi
implicaţiei se calculează în conformitate cu relaţiile cunoscute
T(⎤a) = 1 - T(a) (1.3-1)
T(a ∨ b) = max(T(a),T(b)) (1.3-2)
T(a ∧ b) = min(T(a),T(b)) (1.3-3)
T(a → b) = max(1-T(a),T(b)) (1.3-4)
Calculul valorilor de adevăr ale unei formule în funcţie de valorile de adevăr ale
componentelor sale se realizează, ca şi în cazul logicii booleene, cu ajutorul tabelelor de adevăr.
Un astfel de tabel de adevăr va conţine de această dată 3n linii, n fiind numărul de componente
implicate.
a b a∧b a∨b a→b a↔b
1 1 1 1 1 1
1 0 0 1 0 0
1 1/2 1/2 1 1/2 1/2
0 1 0 1 1 0
0 0 0 0 1 1
0 1/2 0 1/2 1 1/2
1/2 1 1/2 1 1 1/2
1/2 0 0 1/2 1/2 1/2
1/2 1/2 1/2 1/2 1/2 1/2
Exerciţiu. Se consideră propoziţiile a, b şi c definite prin:
"Roby vede obiectul" (a)
"Roby are un controller AI-07S" (b)
"Roby va prehensa obiectul" (c)
Să se analizeze valoarea de adevăr a propoziţiei (a ∧ b) → c.
Ca şi în sistemul logic cu trei valori a lui Kleene, şi în logica fuzzy valorile de adevăr ale
expresiilor ⎤a, a∨b sau a∧b se calculează conform relaţiilor (1.3-1)-(1.3-3).
Să considerăm o formulă oarecare bine formată din n propoziţii atomice. Evaluarea
valorii de adevăr implica construcţia unor tabele de adevăr conţinând 2n linii în cazul logicii
booleene sau 3n linii în cazul logicii Kleene. La o primă privire, s-ar părea că numărul liniilor
din tabelele de adevăr este nenumărabil în cazul logicii fuzzy. În realitate lucrurile nu stau aşa.
Vom demonstra în continuare că sunt suficiente doar 2nn! linii pentru întocmirea tabelelor de
adevăr. Este evident, că valoarea de adevăr T a unei formule oarecare, depinzând de
componentele a1,...,an, depinde de ordinea de dispunere a valorilor
T(a1),...,T(an),T(⎤a1),...,T(⎤an). Dar 2nn! este tocmai numărul total de posibilităţi în care aceste
valori pot fi dispuse. Demonstraţia se poate face prin inducţie.
Dacă n=1, avem de a face cu o propoziţie elementară a, caz în care avem fie T(a)≤T(⎤a),
fie T(⎤a)≤T(a), deci 211!=1 cazuri posibile.
În cazul în care formula invocă două propoziţii a şi b, vor exista 222!=8 posibilităţ. Să
verificăm acest lucru. Dacă T(a)≤T(b) atunci -T(b)≤-T(a) ce va implica 1-T(b) ≤ 1 - T(a)
de unde se va deduce că T(⎤b) ≤ T(⎤a).
În concluzie, în ipoteza T(a)≤T(b) avem şi T(⎤b)≤T(⎤a), valorile de adevăr ale
propoziţiilor implicate se pot situa intr-una din următoare ordine
a ⏐ b ⏐⎤b ⏐⎤a
a ⏐⎤b ⏐ b ⏐⎤a
⎤b ⏐ a ⏐⎤a ⏐ b
⎤b ⏐⎤a ⏐ a ⏐ b
IASE 6/26 Cap. 7. Logica Fuzzy

Celelalte 4 posibilităţi decurg din cealaltă alternativă posibilă T(b)≤T(a).


Modul de evaluare al valorilor de adevăr ale unei formule, ilustrat pe cazul regulii lui De
Morgen
T(a ∧ b) = T(⎤(⎤a ∨ ⎤b))
este prezentat în tabelul de mai jos.

222!=8 posibilităţi a∨b ⎤a ∧ ⎤b ⎤(⎤a ∧ ⎤b)

a b ⎤a ⎤b b ⎤b b
⎤b ⎤a a b b ⎤b b
⎤a b ⎤b a a ⎤a a
⎤b a ⎤a b b ⎤b b
a ⎤b b ⎤a b ⎤b b
b ⎤a a ⎤b a ⎤a a
a a
⎤a ⎤b b a ⎤a
a a
b a ⎤a ⎤b ⎤a

După cum se poate constata din tabelul de mai sus, coloanele corespunzătoare lui a∨b şi
⎤(⎤a∨⎤b) sunt identice, în consecinţă legea lui De Morgen rămâne adevărată şi în logica fuzzy.
Deşi foarte simplă, metoda tabelelor de adevăr devine impracticabilă atunci când n
creşte, datorită numărului mare de linii ale tabelului de adevăr. De exemplu, dacă formula
conţine 3 propoziţii a, b şi c, tabelul de adevăr conţine va 233!=48 de linii.
O modalitate, pentru evitarea exploziei exponenţiale a numărului de linii al tabelelor de
adevăr, constă "transferul" calculelor, din domeniul calculului propoziţional în cel numeric al
valorilor de adevăr.
Astfel, aceeaşi regulă a lui De Morgen
a ∨ b = ⎤ (⎤a ∧ ⎤b),
poate fi demonstrată mult mai simplu. Să notăm, pentru aceasta, cu x şi y valorile de adevăr ale
celor două propoziţii. Atunci
T( ⎤ ( ⎤ a ∧ ⎤b)) = 1 - T( ⎤ a ∧ ⎤b) = 1 - min(1 - x,1 - y) =
⎡ (1 - x) + (1 - y) (1 - x) - (1 - y) ⎤ x + y x - y
1− ⎢ + ⎥= + = max(x, y ) = T (a ∨ b ) .
⎣ 2 2 ⎦ 2 2
Dar cum cele două expresii au aceeaşi valoare de adevăr, în mod evident, acestea sunt
echivalente.
Pentru includerea implicaţiei ca o conectivă a logicii fuzzy, se pot utiliza mai multe
definiţii de introducere a acesteia. În mod natural, deoarece a → b este ⎤a ∨ b, se poate
considera T(a → b) = max(1-T(a),T(b))
Evident, dacă T(a) şi T(b) iau valori în {0,1} picăm peste definiţia uzuală a implicaţiei. Trebuie
observat însă că pentru
T(a) > T(b) = 0,
T(a → b) ar trebui să fie egală cu 0, cerinţă ce nu este îndeplinită. De aceea, unele sisteme fuzzy
utilizează următoarea definiţie a implicaţiei
⎧T(b), dacă T(a) > T(b)
T (a → b ) = ⎨
⎩1, în caz contrar
Desigur, şi această definiţie este consistentă cu calculul propoziţional. Ceea ce i se
reproşează însă acestei definiţii este lipsa de continuitate. Pentru T(b)=0, dacă T(a)=0.1 atunci
T(a → b)=1, iar dacă T(a)=0 atunci T(a → b)=0.
IASE 7/26 Cap. 7. Logica Fuzzy

7.4. FLINT–modul de programare în logică fuzzy


Logica fuzzy este o tehnologie care permite modele complexe realistice a lumii reale,
definite cu ajutorul variabilelor fuzzy şi a regulilor fuzzy. Modulul FLINT, produs LPA , pune la
dispoziţia utilizatorului instrumentele necesare pentru utilizarea logicii fuzzy direct în limbajele
Prolog sau KSL.
Sistemele expert trebuie să asigure reprezentarea unor cunoştinţe venite din lumea reală.
Deseori, însă, înţelegerea noastră privind funcţionarea acestor elemente ale lumii sunt reale este
imprecisă. Logica fuzzy furnizează o metodologie matematică de manevrare a impreciziilor. Un
sistem expert tradiţional acţionează conform valorilor de prag explicitate în condiţiile regulilor
aplicate, ca de exemplu "dacă temperatura este mai mare ca 120 de grade". Aceasta conduce
adesea la un salt exagerat al mărimilor de ieşire la valori apropiate ale parametrilor de intrare, la
depăşirea valorii de prag. Logica fuzzy "netezeşte" aceste salturi prin utilizarea unor descrieri
calitative în partea condiţională a regulilor utilizate, ca de exemplu "dacă temperatura este la
nivel fierbinte", unde fierbinte nu referă o valoare precisă, ci un interval de valori care poate fi
descris prin atributul fierbinte. Aceasta conduce la reguli având o influenţă tot mai mare, după
cum condiţiile sale devin tot mai mult adevărate.
Într-un sistem expert, calificativul de high poate să se refere la toate valorile cuprinse
între 50 şi 100, iar low pentru valori cuprinse între 0 şi 50. În acest sistem, dacă cineva obţine
scorul 100, atunci este considerat definitiv bun, iar dacă are scorul 0, este catalogat definitiv slab.
Problema apare în vecinătatea valorii de prag: dacă cineva are scorul 49, atunci va fi desemnat ca
slab, în timp ce altcineva, cu scorul de 50, este bun. Deci, apare un salt foarte mare la ieşire
pentru o schimbare a scorului numai cu 1 punct.
În contrast, într-un sistem expert fuzzy, calificativul high poate fi definit astfel încât
valoarea 0 corespunde ca not high, iar 100 ca high, iar valorile intermediare sunt considerate
gradual tot mai mult high cu cât se apropie mai mult de 100. Acelaşi raţionament, dar inversând
valorile extreme, se aplică şi pentru atributul low. Avantajul acestui tip de raţionament este
evident pentru valori aflate în apropierea valorii 50. Dacă cinema are scorul 49, atunci el este
doar uşor mai slab decât bun. Pentru scorul 50, el este jumătate slab şi jumătate bun.
Această particularitate a logicii fuzzy este utilizată frecvent în controlere bazate pe
sisteme expert, unde schimbări bruşte ale comportamentului pot fi neadecvate. un exemplu îl
constituie sistemul fuzzy logic utilizat în controlul trenurilor la metroul din Tokyo, pentru o
oprire silenţioasă în staţii, indiferent de condiţii.
Altă proprietate importantă a logicii fuzzy se referă al robusteţe şi toleranţă la defecte. În
sistemele expert tradiţionale este utilizată o singură regulă la un moment dat, ceea ce înseamnă
că fiecare regulă aplicată va avea o influenţă majoră asupra rezultatului. De aceea, este foarte
important să ne asigurăm că fiecare regulă este corectă. În sistemele expert cu logică fuzzy, toate
regulile sunt utilizate, dar în diferite cantităţi. Fiecare regulă va influenţa rezultatul în raport cu
gradul de adevăr al condiţiei sale. Astfel, se asigură o slabă dependenţă relativ la corectitudinea
unei reguli oarecare, ceea ce face acest tip de sistem expert mai puţin fragil decât cele
tradiţionale.
Logica fuzzy este un mijloc eficient pentru a exploata toleranţa la imprecizii, incertitudini
şi adevăruri parţiale pentru a obţine maleabilitate, robusteţe şi soluţii de cost minim.

7.4.1. Terminologia Fuzzy Logic


Un program fuzzy logic conţine două componente principale: variabile fuzzy şi reguli
fuzzy.
Variabilele fuzzy reprezintă un domeniu de valori numerice, care poate fi divizat în
câteva subdomenii prin definirea unor calificative (cuantificatori) ai variabilei fuzzy. Aceste
calificative constau din identificatori literali (nume), cunoscuţi sub denumirea de calificative
lingvistice, şi o funcţie de apartenenţă, care arată gradul de apartenenţă al fiecărei valori posibile
a variabilei fuzzy la setul fuzzy.
IASE 8/26 Cap. 7. Logica Fuzzy

Când o valoare este asignată unei variabile fuzzy, aceasta este convertită într-un grad de
apartenenţă pentru fiecare calificativ lingvistic, utilizând funcţia de apartenenţă asociată. Când
este cerută valoarea unei variabile fuzzy, pentru a fi utilizată în afara sistemului expert, se
utilizează o expresie de de-fuzzyficare, bazată pe gradul de apartenenţă ale calificativelor
asociate variabilei fuzzy.
Gradul de apartenenţă al unui calificativ poate fi afectat de o limitare lingvistică.
Aceasta poate avea ca efect concentrarea sau diluarea importanţei fuzzy a calificativului.
O regulă fuzzy este o regulă care apelează, în partea sa if, unul sau mai multe calificative
ale variabilei fuzzy şi un singur calificativ al variabilei fuzzy în partea sa de concluzii (then).
Regulile sunt aplicate variabilelor fuzzy printr-un procedeu denumit propagare. La aplicarea
unei regului, mai întâi se identifică gradul de apartenenţă al calificativelor specificate în partea
condiţională şi calculează noul grad de apartenenţă al calificativului menţionat în partea de
concluzii. Regulile fuzzy pot forma o matrice fuzzy, cunoscută şi ca memorie asociativă fuzzy.

7.4.2. Structura unui program Fuzzy Logic


Un program fuzzy logic conţine trei faze principale:
1. Fuzzyficarea – etapă în care valorile de intrare sunt asignate unor variabile fuzzy
corespunzătoare. O valoare de intrare este convertită într-un grad de apartenenţă
pentru fiecare calificativ al variabilei fuzzy asociată acesteia.
2. Propagarea – proces prin care regulile fuzzy sunt aplicate variabilelor fuzzy şi
calificativelor acestora. La aplicarea unei astfel de reguli, gradele de apartenenţă
al calificativelor, menţionate în partea condiţională, sunt propagate către
calificativele din partea de concluzii.
3. De-fuzzyficarea – gradul de apartenenţă rezultant al calificativelor unei variabile
fuzzy este convertit înapoi într-o valoare.
În figura 7.1 este prezentată o diagramă cu cele 3 etape ale unui program fuzzy logic
aplicat pentru o turbină cu aburi. Valorile de intrare în program sunt: temperatura = 200°C,
presiune=15KPa. În prima etapă, cele două variabile sunt fuzzyficate în grade de apartenenţă ale
calificativelor variabilelor temperatura şi presiune. Cel mai mare grad de apartenenţă, pentru
variabila temperatură, îl are calificativul normal, urmat de cool. Calificativul variabilei presiune
cu grad maxim este weak, urmat de low. În etapa a doua se generează, prin aplicarea regulilor
fuzzy, gradul rezultant de apartenenţă al fiecărui calificativ aparţinând variabilei fuzzy throttle
(ajutaj); calificativul cu cel mai mare scor este positive_large, urmat de positive_medium. În
final este calculată valoarea de ieşire (valoarea 35) în funcţie de toate gradele de apartenenţă
ale calificativelor asociate variabilei throttle. Această valoare de ieşire va fi utilizată în reglarea
turbinei cu aburi.

Fig. 7.1
IASE 9/26 Cap. 7. Logica Fuzzy

7.4.3. Componentele Fuzzy


Componentele unui program fuzzy pot fi grupate în patru categorii:
1. Variabile fuzzy
2. Restricţii lingvistice
3. Reguli fuzzy
4. Matrice fuzzy

Definirea variabilelor fuzzy


Variabilele fuzzy şi calificativele lor constituie baza unui program fuzzy logic. O
variabilă fuzzy se defineşte prin: nume, domeniu, calificative şi expresie de de-fuzzyficare.
Anatomia unei variabile fuzzy, în sintaxa PROLOG, este prezentată în fig. 7.2, iar în
sintaxa KSL, în fig. 7.3.

Nume variabilă Puncte


fuzzy calificativ

fuzzy_variable (speed) :-
Domeniul
[0, 200] ;
variabilei
slow, \, curved(2), [0, 30] ;
Calificative medium, /\, linear, [10, 30, 50] ;
fast, /, curved(0.5), [40, 70] ;
Nume peak.
calificativ

Metodă de Formă Curbură


De-Fuzzyficare calificativ calificativ

Fig. 7.2

Domeniul Nume variabilă Puncte


variabilei fuzzy calificativ

fuzzy_variable speed
range is [0, 200] ;
qualifier slow is \ shaped and curved(2) at 0, 30 ;
Calificative qualifier medium is /\ shaped and linear at 10, 30, 50 ;
qualifier fast is / shaped and curved(0.5) at 40, 70 ;
Nume peak.
calificativ

Metodă de Formă Curbură


De-Fuzzyficare calificativ calificativ

Fig. 7.3

Numele unei variabile fuzzy este un atom, care descrie uzual cantitatea referită, şi este
utilizat oriunde este apelată variabila. De exemplu, variabila fuzzy temperatura este definită
astfel:
fuzzy_variable( temperatura) :-
IASE 10/26 Cap. 7. Logica Fuzzy

Setarea limitelor inferioară şi superioară a unei variabile fuzzy, care definesc


intervalul valorilor posibile pe care variabila le poate lua, este opţională şi se poate obţine
astfel:
fuzzy_variable( temperatura) :-
[-100, 150];
În cazul în care aceste limite nu sunt specificate explicit, sistemul va deduce aceste
limite din modul de definire a calificativelor asociate variabilei, preluând valorile extreme
utilizate în definirea acestora.
Definirea calificativelor variabilei fuzzy. Aceste calificative constau din nume şi
funcţii de apartenenţă care să transforme o valoare de intrare într-un grad de apartenenţă al
acestei al calificativul respectiv. Există mai multe variante de definire a funcţiei de
apartenenţă: prin forma exactă, prin curbură, prin puncte relevante. Această funcţie este
reprezentată printr-un grafic, în care pe axa Y se află gradul de apartenenţă a setului de valori,
iar pe axa X se plasează valorile de intrare ale variabilei fuzzy. Gradul de apartenenţă poate fi
specificat între valorile limită 0 şi 1. Valoarea 1 desemnează apartenenţa completă a valorii de
intrare la setul fuzzy al calificativului respectiv. Un grad de apartenenţă 0 arată că valoarea de
intrare nu este (definitiv) membru al setului respectiv. Valori intermediare determină diverse
grade de apartenenţă.
Modulul FLINT pune la dispoziţia utilizatorului 7 forme distincte de funcţii: pantă
crescătoare, pantă descrescătoare, triunghi cu vârful în sus, triunghi cu vârful în jos, trapez
cu baza mică în sus, trapez cu baza mică în jos şi formă liberă. În tabelul 7.1 sunt prezentate
simbolurile şi punctele necesare la definirea fiecărei funcţii în parte.
Tabelul 7.1
Simbol Puncte Descriere
/ [A, B] pantă crescătoare
\ [A, B] pantă descrescătoare
/\ [A, B, C] triunghi cu vârful în sus
\/ [A, B, C] triunghi cu vârful în jos
/-\ [A, B, C, D] trapez cu baza mică în sus
\-/ [A, B, C, D] trapez cu baza mică în jos
? [V1/M1, V2/M2… Vk/Mk] formă liberă

În figura 7.4 sunt prezentate graficele funcţiilor de apartenenţă pentru fiecare tip
predefinit. Simbolurile au rolul de a defini forma funcţiei, iar puncte indică numărul de puncte
necesare la definirea funcţiei. Prin notaţiile LB şi UB se desemnează limitele inferioară (LB –
Lower Bounds) şi superioară (UP – Upper Bounds) ale variabilei fuzzy.

a
IASE 11/26 Cap. 7. Logica Fuzzy

f
IASE 12/26 Cap. 7. Logica Fuzzy

g
Fig. 7.4,a,b,c,d,e,f,g
Exemple:
Să considerăm o variabilă fuzzy denumită directie, cu valori posibile între 0 şi 180.
Pentru această variabilă se poate un calificativ denumit stanga, pentru care valorile mai mici
de 60 reprezintă definitiv stânga, iar cele peste 90 – definitiv non stanga:
stanga, \, linear, [60, 90];
Cuvântul rezervat linear determină sistemul să unească cele două puncte printr-un
segment de dreaptă.
În mod similar, pentru valori cuprinse între 90 şi 120 se defineşte un calificativ
dreapta.
dreapta, /, linear, [90, 120];
Forma triunghiulară cu vârful în sus se utilizează normal pentru calificative care
acoperă un domeniu centrat în jurul unei valori. De exemplu, calificativul centrat este
definitiv centrat pentru valoarea 90 şi definitiv non centrat pentru valori mai mici de 45 sau
mai mari de 135.
centrat, /\, linear, [45, 90, 135];
Analog, forma triunghiulară cu vârful în jos se utilizează normal pentru calificative
care indică negaţia unei calităţi (acoperă tot domeniul, mai puţin un interval centrat în jurul
unei valori). În acest caz, un calificativ denumit extreme, centrat în valoarea 90 şi cu limitele
30 şi 150, se defineşte astfel:
extreme, \/, linear, [30, 90, 150];
Forma triunghiulară reprezintă un caz particular al formei trapezoidale, utilizată
normal pentru calificative care descriu un domeniu de valori cu subdomenii nenule pentru
grad maxim şi minim de apartenenţă:
inainte, /-\, linear, [60, 75, 105, 120];
periferic, \-/, linear, [30, 60, 120, 150];
Formele libere au fost introduse pentru a acoperi toate cerinţele utilizator. Fiecare
punct este descris în sintaxa V/M, în care V este valoarea variabilei fuzzy, iar M este valoarea
de apartenenţă. Valorile de start sau sfârşit pot fi 0 sau 1. Valorile pentru V trebuie introduse
strict în ordine ascendentă. De exemplu, calificativul stanga definit anterior poate fi mult mai
exact descris printr-o funcţie liberă şi un set de puncte:
stanga, ?, linear, [60/1, 65/.75, 70/.4, 85/.25, 90/0];

Definirea curburii unui calificativ. În exemple precedente, conexiunile dintre puncte


se realizau prin drepte. FLINT pune la dispoziţia utilizatorului facilitatea de a adăuga un
parametru de curbură tuturor formelor descrise anterior. Acest parametru poate lua valori
cuprinse între 0.1 şi 9.9, forma curbei variind în funcţie de poziţia relativă a punctelor de start
şi final, precum şi de valoarea parametrului de curbură: mai mic, egal sau mai mare decât 1.
Aceste 9 cazuri sunt prezentate în fig. 7.5.
IASE 13/26 Cap. 7. Logica Fuzzy

Fig. 7.5

Cu cât valoarea parametrului de curbură este mai îndepărtată de 1, cu atât curbura este
mai accentuată. Dimpotrivă, la valori apropiate de 1, forma se apropie de linia dreaptă. Pentru
un parametru de curbură de valoare 0.5, graficul funcţiei este prezentat în fig. 7.6, iar pentru
valoarea 2 în cazul unei funcţii triunghiulare în fig. 7.7.

Fig. 7.6 Fig. 7.7

Definirea de-fuzzyficării unei variabile fuzzy. De-fuzyficarea de utilizează pentru a


converti valorile de apartenenţă ale calificativelor asociate variabilei fuzzy curente într-o
singură valoare globală a variabilei. FLINT conţine două tipuri de de-fuzzyficare predefinite:
centroid şi peak.
Metoda centroid reprezintă de-fuzzyficatorul implicit şi funcţionează prin găsirea
centrului de greutate al colecţiei tuturor gradelor de apartenenţă ale tuturor calificativelor
variabilei fuzzy considerate. Pentru a ilustra modul de acţiune al acestei metode, considerăm o
variabilă fuzzy denumită precipitatii, cu trei calificative: light, medium, heavy (fig. 7.8).

Fig. 7.8

La sfârşitul sesiunii fuzzy, valorile acestor calificative sunt: light = 0.75, medium=0.25
şi heavy = 0. Metoda centroid acţionează asupra fiecărei funcţii de apartenenţă,
corespunzătoare fiecărui calificativ, şi elimină toate zonele funcţiei aflate deasupra valorii
curente a calificativului (v. fig. 7.9). În continuare, zonele rămase din aceste funcţii (porţiunile
înnegrite-fig. 7.9) sunt suprapuse şi se calculează centru de greutate rezultant. Centrul de
greutate indică o singură valoare pe axa Ox considerată ca valoare globală a variabilei fuzzy.
IASE 14/26 Cap. 7. Logica Fuzzy

Fig. 7.9

Metoda peak urmăreşte identificarea calificativelor cu cel mai mare grad de


apartenenţă, apoi calculând punctul central al tuturor palierelor obţinute în punctul de tăiere.
Considerând aceeaşi variabilă fuzzy, precipitatii, se caută calificativul cu valoare maximă
(light), se taie funcţia de apartenenţă în dreptul valorii curente (0.75) şi se calculează centru
palierului obţinut (Fig. 7.10).

Fig. 7.10

De asemenea, FLINT permite utilizatorului definirea propriei metode de


de-fuzzyficare.

Exemplu de definire a unei variabile fuzzy


Să considerăm o variabilă temperatura, cu valori în intervalul [-50…50] grade
Celsius. Aceste elemente se transcriu într-un program PROLOG prin sintaxa:
fuzzy_variable(temperatura):-
[-50, 50];
În continuare se definesc 4 calificative ale variabilei temperatura: inghetat, rece, cald,
fierbinte.
Calificativul inghetat se referă la toate valorile sub zero ale temperaturii şi posibil la
cele între 0 şi 6 grade (fig. 7.11,a). Calificativul rece se referă posibil la intervalul [-10,0],
definitive la temperaturile cuprinse între [0, 5] şi posibil la valorile [5, 12] (fig. 7.11,b).
Similar, cald se poate referi la intervalul [5, 15], cu exactitate pentru [15, 25] şi posibil pentru
[25, 35] (fig. 7.11,c). În final, dorim ca fierbinte să se refere posibil la intervalul [20, 30] şi
definitiv pentru valorile superioare temperaturii de 30 grade (fig. 7.11,d). Domeniile definite
pentru aceste calificative se suprapun parţial, aşa cum rezultă din reprezentarea grafică
combinată din fig. 7.11,e.

a
IASE 15/26 Cap. 7. Logica Fuzzy

e
Fig. 7.11

După ce au fost definite calificativele, trebuie în continuare să se stabilească metoda


utilizată în de-fuzzyficarea variabilei. În acest exemplu se apelează la metoda centroid.
Pentru a reprezenta aceste calificative, variabila fuzzy trebuie completată cu
următoarele instrucţiuni:
fuzzy_variable(temperatura):-
[-50, 50];
inghetat, \, linear, [0, 6];
rece, /-\, linear, [-10, 5, 10, 15];
cald, /- \, linear, [5, 15, 25, 35];
fierbinte, /, linear, [20, 30];
centroid.

Definirea deformărilor lingvistice (linguistic hedge). Se utilizează pentru a concentra


sau dilua caracteristica funcţiei de apartenenţă a unui calificativ. Definirea unei deformări
lingvistice presupune a defini numele său şi formula utilizată:
fuzzy_hedge (foarte, power(2)). %Sintaxa PROLOG
fuzzy_hedge foarte is power 2. %Sintaxa FLEX
Numele (în exemplul anterior, foarte) este un atom prolog şi are efect universal (poate
fi aplicat oricărui calificativ). A doua parte din definiţia unei deformări lingvistice reprezintă
formula aplicată oriunde identificatorul acesteia este utilizat şi afectează funcţia de
IASE 16/26 Cap. 7. Logica Fuzzy

apartenenţă a calificativului respectiv. Pentru acest stadiu de dezvoltarea a FLEX, singura


formulă acceptată este power (ridicare la putere), cu valori cuprinse între 0.1 şi 9.9.
Pentru a evidenţia modul de acţionare a unei astfel de deformări lingvistice, să
considerăm o variabilă fuzzy denumită buna_dispozitie şi un calificativ fericire care se
interpretează ca fiind fericire probabilă pentru valori mai mici ca 80 şi fericire definitivă
pentru valori între 80 şi 100 (fig. 7.12,a). De asemenea, considerăm parametrul foarte (definit
anterior) şi putin (definit prin fuzzy_hedge (putin, power(0.2)).)

c
Fig. 7.12

Un calificativ însoţit de un atribut de deformare poate fi apelat, într-o regulă fuzzy, sub
forma:
if buna_dispoziţie is foarte fericire
Această construcţie are ca efect exagerarea funcţiei de apartenenţă fericire,
reprezentată în fig. 7.12,b împreună cu funcţia originală (linie punctată). Considerând un grad
de apartenenţă de 0.5, pentru funcţia originală corespunde o valoarea a variabilei fuzzy de 40,
iar pentru funcţia deformată o valoare de aproximativ 70. Astfel, se obţine o înclinare a
funcţiei către valori mai apropiate de domeniul definitiv fericit.
Exemplul anterior este aplicat şi pentru o valoare a puterii de 0.2 (atributul putin), care
va conduce la o moderare a funcţiei de apartenenţă, în sensul reducerii valorii variabilei fuzzy
corespunzătoare unui grad de apartenenţă precizat (fig. 7.12,c), în raport cu funcţia originală
(liniară). În acest caz, funcţia de apartenenţă este modificată astfel se obţin stări de mai puţin
probabil fericire pentru un interval mai mare de valori ale gradului de apartenenţă.

Definirea regulilor fuzzy


O componentă majoră a unui sistem fuzzy logic o reprezintă setul de reguli, prin care
se implementează raţionamente cu şi despre calificativele variabilelor fuzzy. Regulile constau
dintr-un set de condiţii, introduse prin if, şi un set de concluzii (partea then, respectiv else).
IASE 17/26 Cap. 7. Logica Fuzzy

Anatomia unei reguli fuzzy


Anatomia utilizată în definiţia unei reguli fuzzy este prezentată în fig. 7.13. În această
definiţie sunt utilizaţi câţiva operatori. Orice program fuzzy logic trebuie să includă
declaraţiile următorilor operatori:

Nume variabilă Nume regulă Nume calificativ


condiţională fuzzy condiţional

fuzzy_rule (risk1)
Condiţie if duration is long

Conectivă
and cost is high
then risk is substantial
Concluzie
else risk is low.
Concluzie
opţională
Nume variabilă Nume calificativ
Operatori concluzie concluzie

Nume variabilă Nume regulă Nume calificativ


condiţională fuzzy condiţional

fuzzy_rule risk1
Condiţie if the duration is long

Conectivă
and the cost is high
then the risk is substantial
Concluzie
else the risk is low.
Concluzie
opţională
Nume variabilă Nume calificativ
Operatori concluzie concluzie

Fig. 7.13

:- op( 1200, xfy, ( if )),


op( 1200, xfy, ( then )),
op( 1200, xfx, ( else )),
op( 1100, xfy, ( or )),
op( 1000, xfy, ( and )),
op( 700, xfx, ( is )),
op( 600, fy, ( not )).
Numele unei reguli fuzzy este un atom Prolog şi va fi utilizat pentru a referi regula
respectivă. Condiţiile unei reguli fuzzy fac apel la variabile fuzzy şi la calificativele acestora.
Condiţii compuse se pot obţine prin utilizarea conectivelor and (conjuncţie), or (disjuncţie) şi
not (negaţie). Concluzia unei reguli poate fi calculată în mai multe moduri, în funcţie de tipul
conectivelor aplicate. Valoarea calificativului variabilei fuzzy menţionată în secţiunea then
este calculată cu valorile curente ale gradelor de apartenenţă ale calificativelor variabilelor
menţionate în condiţii. Valoarea calificativului variabilei fuzzy menţionată în partea opţională
IASE 18/26 Cap. 7. Logica Fuzzy

else se calculează prin scăderea din 1 a valorii calculate pentru calificativul variabilei fuzzy
menţionată în partea then.
Exemplu: În acest exemplu se urmăreşte reglarea deschiderii ajutajului unei turbine cu
abur, în funcţie de temperatura şi presiunea din interior. Valoarea de apartenenţă a
calificativului positiv_large al variabilei ajutaj utilizând valorile de apartenenţă curente ale
calificativelor rece (al variabilei temperatura) şi joasa (variabila presiune) se poate stabili
prin următoarea regulă:
fuzzy_rule (ajutaj1)
if temperatura is rece
and presiune is foarte_joasa
then ajutaj is positiv_large.
Similar pot fi definite şi următoarele reguli care permit stabilirea valorilor de
apartenenţă ale calificativelor positiv_medium şi positive_small.
fuzzy_rule (ajutaj2)
if temperatura is rece
and presiune is joasa
then ajutaj is positiv_medium.

fuzzy_rule (ajutaj3)
if temperatura is rece
and presiune is normala
then ajutaj is positiv_small.

Definirea matricelor fuzzy


Cele trei reguli definite anterior au aceeaşi structură (toate condiţiile se referă numai la
calificative ale variabilelor temperatura şi presiune şi conduc la concluzii privitoare la
variabila ajutaj). De asemenea, conţin acelaşi tip de operatori în partea condiţională
(conjuncţiile and). În astfel de cazuri, toate aceste reguli pot fi reunite convenţional într-o
matrice de reguli fuzzy. Sintaxa unei matrice fuzzy este prezentată în fig. 7.14.
Prima linie din definiţie cuprinde denumirile variabilelor fuzzy care urmează să fie
utilizate în toate liniile matricei. Apoi se specifică calificativele asociate acestor variabile, în
ordinea prescrisă în prima linie. Sintaxa următoare:
temperatura * presiune -> ajutaj;
este echivalentă cu forma:
if temperatura is _
and presiune is _
then ajutaj is _
În cazul utilizării aceleiaşi sintaxe pentru calificative,
rece * foarte_joasa -> positive_large;
reprezentarea regulii este:
if temperatura is rece
and presiune is foarte_joasa
then ajutaj is positive_large.

Exemplu:
fuzzy_matrix( ajutaj_reguli) :-
temperatura * presiune -> ajutaj;
rece * foarte_joasa -> positive_large;
rece * joasa -> positive_medium;
rece * normala -> positive_small.
IASE 19/26 Cap. 7. Logica Fuzzy

Nume variabilă Nume matrice Nume variabilă


condiţională concluzie

fuzzy_matrix (risk_rules) :-
Nume
variabile duration * cost -> risk ;
matrice
long * high -> very high ;
short * low -> low.

Nume calificativ
condiţional
Deformare Nume calificativ
calificativ concluzie

Nume variabilă Nume matrice Nume variabilă


condiţională concluzie

fuzzy_matrix risk_rules
Nume
variabile duration * cost -> risk ;
matrice
long * high -> very high ;
short * low -> low.

Nume calificativ
condiţional
Deformare Nume calificativ
calificativ concluzie
Fig. 7.14

Exemplu de program Fuzzy Logic


Acest exemplu constă în implementarea unui controler fuzzy logic. Un model general
cuprinde dispozitivul controlat, un set de sisteme de acţionare (care preiau intrările şi le
convertesc în semnale de acţionare a dispozitivului) şi un set de sensori (fig. 15).

Fig. 15
IASE 20/26 Cap. 7. Logica Fuzzy

Controlerul fuzzy logic primeşte informaţiile de la senzori şi le fuzzyfică în variabilele


fuzzy asociate sistemului; apoi se propagă valorile de apartenenţă utilizând regulile fuzzy
definite in program, iar în final se de-fuzzyfică ieşirea şi se returnează valorile pentru sistemul
de acţionare.
Un controller fuzzy pentru o turbină
Rolul acestui controler este de a ajusta dimensiunea ajutajului unei turbine cu aburi în
raport temperatura şi presiunea curentă din interiorul turbinei, în scopul stabilizării fluxului
(debitului) de aburi (fig. 7.16).

Fig. 7.16

O primă etapă în elaborarea unui program PROLOG pentru materializarea


controlerului fuzzy constă în definirea tuturor operatorilor (condiţii, concluzii, conjuncţii,
disjuncţii şi negaţii) utilizabili în definirea regulilor fuzzy.
%%%%%%%%%%%%%%%%%%%%%%%%
% Linguistic operators %
%%%%%%%%%%%%%%%%%%%%%%%%

:- op( 1150, fy, ( if ) ),


op( 1150, xfy, ( then ) ),
op( 1150, xfx, ( else ) ),
op( 1100, xfy, ( or ) ),
op( 1000, xfy, ( and ) ),
op( 700, xfx, ( is ) ),
op( 600, fy, ( not ) ).

Definirea variabilelor fuzzy


În stabilirea variabilelor fuzzy şi calificativelor acestora se porneşte de la cantităţile
care urmează să fie utilizate în regulile fuzzy: temperatura, presiune şi ajutaj. De asemenea,
din analiza sistemului, se stabilesc intrările: temperatura şi presiune, respectiv ieşirile
acestuia: ajutaj. Pentru fiecare dintre acestea se defineşte câte o variabilă fuzzy.
În pasul următor se stabilesc seturi de cuvinte care vor desemna calificativele
lingvistice ale variabilelor fuzzy. Considerând variabila temperatura, se stabileşte (de către un
expert uman) că intervalul de valori posibile este [0, 500] grade Celsius, cu valori
semnificative în intervalul [100, 350]. Pentru a descrie temperatura din turbină se utilizează
următoarele adjective, stabilite prin concordanţă cu subintervalele de temperaturi
reprezentative ale valorilor posibile: rece, racoare, normal, cald, fierbinte. Cea mai simplă
IASE 21/26 Cap. 7. Logica Fuzzy

cale de a implementa o formă pentru fiecare calificativ este de a considera dependenţele


liniare. Ulterior, funcţiile de apartenenţă pot fi rafinate.
Aplicând sintaxa corespunzătoare, calificativele asociate variabilei fuzzy temperatura
au următoarele definiţii (fig. 7. 17):

Fig. 7.17
fuzzy_variable( temperatura ) :-
[ 0 , 500 ] ;
rece, \, linear, [ 110 , 165 ] ;
racoare, /\, linear, [ 110 , 165 , 220 ] ;
normal, /\, linear, [ 165 , 220 , 275 ] ;
cald, /\, linear, [ 220 , 275 , 330 ] ;
fierbinte, /, linear, [ 275 , 330 ] .

Cea de-a doua variabilă fuzzy de intrare, presiune, se defineşte similar, introducând
calificativele: joasă, scazuta, normala, ridicata, inalta (fig. 7.18). Se consideră intervalul
[0, 300] (măsurat în 100 KPa).

Fig. 7.18

fuzzy_variable( presiune ) :-
[ 0 , 300 ] ;
joasa, \ , linear, [ 10 , 70 ] ;
scazuta, /\, linear, [ 10 , 70 , 130 ] ;
normala, /\, linear, [ 70 , 130 , 190 ] ;
ridicata, /\, linear, [ 130 , 190 , 250 ] ;
inalta, /, linear, [ 190 , 250 ] .

Variabila fuzzy de ieşire ajutaj poate lua valori între –60 şi 60 (o valoare negativă
indică faptul că ajutajul trebuie deplasat înapoi, iar una pozitivă – deplasat înainte). Problema
constă în mişcarea ajutajului cu cantităţi mari, medii sau mici, în sens pozitiv sau negativ. De
aceea, se definesc 7 calificative care acoperă aceste acţiuni: negativ_mare, negativ_medie,
negativ_mica, zero, pozitiv_mica, pozitiv_medie, pozitiv_mare (fig. 7.19). Metoda adoptată
pentru transformarea valorilor de apartenenţă în valoare a variabilei ajutaj este centroid.
fuzzy_variable( ajutaj ) :-
[ -60 , 60 ] ;
IASE 22/26 Cap. 7. Logica Fuzzy

negativ_mare, \ , linear, [ -45 , -30 ] ;


negativ_medie, /\, linear, [ -45 , -30 , -15 ] ;
negativ_mica, /\, linear, [ -30 , -15 , 0 ] ;
zero, /\, linear, [ -15 , 0 , 15 ] ;
pozitiv_mica, /\, linear, [ 0 , 15 , 30 ] ;
pozitiv_medie, /\, linear, [ 15 , 30 , 45 ] ;
pozitiv_mare, /, linear, [ 30 , 45 ] ;
centroid .

Fig. 7.19

Definirea regulilor fuzzy


Etapa de definire a variabilelor fuzzy fiind încheiată, următorul pas constă în stabilirea
regulilor fuzzy. Considerăm că, în urma consultării unui expert în turbine cu abur, se ajunge la
mai multe reguli care descriu legătura dintre cele trei mărimi exterioare sistemului (variabile
fuzzy). Considerând toate combinaţiile posibile dintre temperatura şi presiune, în continuare
sunt explicitate toate regulile care conduc la o schimbare în variabila ajutaj pentru fiecare
schimbare a variabilelor de intrare. Aceste reguli pot fi scrise de expertul uman în forma
următoare:
Dacă temperatura este rece şi presiunea joasă, atunci deplasează ajutajul cu o
cantitate pozitivă mare.
Pentru fiecare regulă de acest tip trebuie definită separat câte o regulă de forma:

fuzzy_rule ( ajutaj1 )
if temperatura is rece
and presiune is joasa
then ajutaj is pozitiv_mare.

Deoarece regulile fuzzy din acest exemplu se aplică întotdeauna variabilelor


temperatura, presiune şi ajutaj, o alternativă mai eficientă este combinarea tuturor regulilor
într-o singură matrice fuzzy:
fuzzy_matrix( t ) :-

temperatura * presiune -> ajutaj ;

rece * joasa -> pozitiv_mare ;


rece * scazuta -> pozitiv_medie ;
rece * normala -> pozitiv_mica ;
rece * ridicata -> negativ_mica ;
rece * inalta -> negativ_medie ;

racoare * joasa -> pozitiv_mare ;


racoare * scazuta -> pozitiv_medie ;
racoare * normala -> zero ;
racoare * ridicata -> negativ_medie ;
racoare * inalta -> negativ_medie ;
IASE 23/26 Cap. 7. Logica Fuzzy

normal * joasa -> pozitiv_medie ;


normal * scazuta -> pozitiv_mica ;
normal * normala -> zero ;
normal * ridicata -> negativ_mica ;
normal * inalta -> negativ_medie ;

cald * joasa -> pozitiv_medie ;


cald * scazuta -> pozitiv_mica ;
cald * normala -> negativ_mica ;
cald * ridicata -> negativ_medie ;
cald * inalta -> negativ_mare ;

fierbinte * joasa -> pozitiv_mica ;


fierbinte * scazuta -> pozitiv_mica ;
fierbinte * normala -> negativ_medie ;
fierbinte * ridicata -> negativ_mare ;
fierbinte * inalta -> negativ_mare .

Propagarea într-un program fuzzy


Programul dezvoltat va prelua valorile variabilelor fuzzy de intrare (temperatura şi
presiune), decide modul de propagare a gradelor de apartenenţă utilizând matricea de reguli şi
în final, după propagare, va returna o valoare rezultată din variabila fuzzy ajutaj.
În acest sens, se va defini un predicat denumit gaseste_ajutaj cu trei argumente:
primele două pentru valorile intrărilor temperatura şi presiune, iar al treilea pentru valoarea
variabilei ajutaj. Setarea valorilor unei variabile fuzzy şi extragerea acesteia se obţine prin
apelarea predicatului fuzzy_variable_value/2. Regula fuzzy de propagare constă n apelul
predicatului fuzzy_propagate/4. Modul de propagare a valorilor de apartenenţă de la
calificativele din partea condiţională la calificativele din partea de concluzii se va realiza în
raport cu conjuncţiile, disjuncţiile şi negaţiile conţinute în regulile fuzzy. Valorile implicite
sunt următoarele:
minimum pentru conjuncţii (va fi propagată valoarea minimă din conjuncţii)
maximum pentru disjuncţii (va fi propagată valoarea maximă din disjuncţii)
complement pentru negaţii (va fi propagată valoarea 1 minus valoarea de apartenenţă
negată)
gaseste_ajutaj ( Temperatura, Presiune, Ajutaj ) :-
fuzzy_reset_membership( ajutaj ),
fuzzy_variable_value( temperatura, Temperatura ),
fuzzy_variable_value( presiune, Presiune ),
fuzzy_propagate( minimum, maximum, complement, [t] ),
fuzzy_variable_value( ajutaj, Ajutaj ).

Deoarece orice valoare mai veche a variabilei ajutaj poate afecta propagarea fuzzy, a
fost necesară apelarea predicatului fuzzy_reset_membership la începutul procedurii.

Compilarea şi rularea programului fuzzy


Un program fuzzy logic poate fi compilat numai după încărcarea interpretorului fuzzy
logic, prin comanda:

?- ensure_loaded(system(fuzzy)).

Programului fuzzy pentru controlul turbinei cu aburi conţine predicatul


gaseste_ajutaj/3. A rula acest program se reduce la interogarea sistemului Prolog utilizând
următorul goal:

?- gaseste_ajutaj(300, 150, Ajutaj).


Ajutaj = -26.040413058933
IASE 24/26 Cap. 7. Logica Fuzzy

Exemplu de program fuzzy logic scris în limbajul KSL

În această secţiune se prezintă exemplul anterior (controlul fuzzy al unei turbine cu


aburi) utilizând flex şi limbajul său KSL. Componentele fuzzy ale programului KSL sunt
similare cu cele echivalente din exemplul Prolog.

%%%%%%%%%%%%%%%%%%%
% Fuzzy variables %
%%%%%%%%%%%%%%%%%%%

fuzzy_variable temperatura
ranges from 0 to 500 ;
qualifier rece is \ shaped and linear at 110 , 165 ;
qualifier racoare is /\ shaped and linear at 110 , 165 , 220 ;
qualifier normal is /\ shaped and linear at 165 , 220 , 275 ;
qualifier cald is /\ shaped and linear at 220 , 275 , 330 ;
qualifier fierbinte is / shaped and linear at 275 , 330 .

fuzzy_variable presiune
ranges from 0 to 300 ;
qualifier joasa is \ shaped and linear at 10 , 70 ;
qualifier scazuta is /\ shaped and linear at 10 , 70 , 130 ;
qualifier normala is /\ shaped and linear at 70 , 130 , 190 ;
qualifier ridicata is /\ shaped and linear at 130, 190 , 250 ;
qualifier inalta is / shaped and linear at 190, 250 .

fuzzy_variable ajutaj
ranges from -60 to 60 ;
qualifier negativ_mare is \ shaped and linear at -45 , -30 ;
qualifier negativ_medie is /\ shaped and linear at -45 , -30 , -15 ;
qualifier negativ_mica is /\ shaped and linear at -30 , -15 , 0 ;
qualifier zero is /\ shaped and linear at -15 , 0 , 15 ;
qualifier pozitiv_mica is /\ shaped and linear at 0 , 15 , 30 ;
qualifier pozitiv_medie is /\ shaped and linear at 15 , 30 , 45 ;
qualifier pozitiv_mare is / shaped and linear at 30 , 45 ;
defuzzifier = centroid .

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FAM - Fuzzy Associative Memory %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fuzzy_matrix ajutaj_value

temperatura * presiune -> ajutaj ;

rece * joasa -> pozitiv_mare ;


rece * scazuta -> pozitiv_medie ;
rece * normala -> pozitiv_mica ;
rece * ridicata -> negativ_mica ;
rece * inalta -> negativ_medie ;

racoare * joasa -> pozitiv_mare ;


racoare * scazuta -> pozitiv_medie ;
racoare * normala -> zero ;
racoare * ridicata -> negativ_medie ;
racoare * inalta -> negativ_medie ;

normal * joasa -> pozitiv_medie ;


normal * scazuta -> pozitiv_mica ;
normal * normala -> zero ;
normal * ridicata -> negativ_mica ;
normal * inalta -> negativ_medie ;
IASE 25/26 Cap. 7. Logica Fuzzy

cald * joasa -> pozitiv_medie ;


cald * scazuta -> pozitiv_mica ;
cald * normala -> negativ_mica ;
cald * ridicata -> negativ_medie ;
cald * inalta -> negativ_mare ;

fierbinte * joasa -> pozitiv_mica ;


fierbinte * scazuta -> pozitiv_mica ;
fierbinte * normala -> negativ_medie ;
fierbinte * ridicata -> negativ_mare ;
fierbinte * inalta -> negativ_mare .

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Propagation of fuzzy values %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

relation get_ajutaj_value(Temperatura,Presiune,Ajutaj)
if reset all fuzzy values
and the absolute value of temperatura is Temperatura
and the absolute value of presiune is Presiune
and propagate ajutaj_value fuzzy rules
and the absolute value of ajutaj is Ajutaj .

%%%%%%%%%%%%%%%%%
% Turbina Frame %
%%%%%%%%%%%%%%%%%

frame turbina
default temperatura is 0
and default presiune is 0
and default ajutaj is 0 .

%%%%%%%%%%%%%%%%%%%%%%%%
% Data-Driven Programs %
%%%%%%%%%%%%%%%%%%%%%%%%

demon react_to_temperatura_update
when the temperatura of turbina changes to T
then set_turbina_ajutaj .

demon react_to_presiune_update
when the presiune of turbina changes to P
then set_turbina_ajutaj .

%%%%%%%%%%%%%%%%%%%%%%
% Set Turbina Values %
%%%%%%%%%%%%%%%%%%%%%%

action set_turbina_temperatura(T)
do the temperatura of turbina becomes T .

action set_turbina_presiune(P)
do the presiune of turbina becomes P .

action set_turbina_ajutaj
do check the temperatura of turbina is Temperatura
and check the presiune of turbina is Presiune
and get_ajutaj_value(Temperatura,Presiune,Ajutaj)
and the ajutaj of turbina becomes Ajutaj .

%%%%%%%%%%%%%%%%%%%%%%%%%%
% Display Turbina Valori %
%%%%%%%%%%%%%%%%%%%%%%%%%%
IASE 26/26 Cap. 7. Logica Fuzzy

action display_turbina_values
do write('The current temperatura is: ')
and write(the temperatura of turbina)
and nl
and write('The current presiune is: ')
and write(the presiune of turbina)
and nl
and write('The current ajutaj is: ')
and write(the ajutaj of turbina)
and nl .

action test_turbina_values
do set_turbina_temperatura(300)
and set_turbina_presiune(150)
and display_turbina_values.

Limbajul KSL furnizează accesul la numeroase elemente utilizate în construirea


sistemelor expert, ca de exemplu: cadre, atribute, programare data-driven.
Pentru început s-a creat un cadru turbina care va modela turbina reală ce se doreşte
a fi controlată. Atributele cadrului turbina sunt actualizate, în urma măsurătorilor obţinute pe
turbina reală, prin definirea acţiunii denumită set_turbina_ajutaj/0. Prin implementarea celor
doi demoni (react_to_temperatura_update şi react_to_presiune_update) se asigură calculul
automat al valorii ajutajului ori de câte ori se modifică temperatura şi/sau presiunea. Valorile-
test ale parametrilor de intrare sunt setate prin definire şi apelarea acţiunii
test_turbina_values.
Şi în cazul programelor fuzzy KSL trebuie încărcat mai întâi interpretorul fuzzy, iar
după compilare, programul este rulat prin interogarea Prolog:
?- test_turbina_values.