Documente Academic
Documente Profesional
Documente Cultură
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
Î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
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).
Î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
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
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.
Fig. 7.1
IASE 9/26 Cap. 7. Logica Fuzzy
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
Fig. 7.2
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
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
Î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];
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.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
Fig. 7.10
a
IASE 15/26 Cap. 7. Logica Fuzzy
e
Fig. 7.11
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ţă.
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
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
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.
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
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
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
Fig. 15
IASE 20/26 Cap. 7. Logica Fuzzy
Fig. 7.16
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
Fig. 7.19
fuzzy_rule ( ajutaj1 )
if temperatura is rece
and presiune is joasa
then ajutaj is pozitiv_mare.
Deoarece orice valoare mai veche a variabilei ajutaj poate afecta propagarea fuzzy, a
fost necesară apelarea predicatului fuzzy_reset_membership la începutul procedurii.
?- ensure_loaded(system(fuzzy)).
%%%%%%%%%%%%%%%%%%%
% 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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.