Professional Documents
Culture Documents
1/26
7.
Logica Fuzzy
IASE
2/26
IASE
3/26
Relaiile referitoare la funcia de apartenen corespunztoare reuniunii, interseciei, diferenei i complementarei rmn n continuare valabile: uAB(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 mulimilor A AC = , A AC = X, A _ X, nu mai rmne 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} .
IASE
4/26
Vom nota cu sup(R) cea mai mic margine superioar (LUB), iar cu inf(R) cea mai mare margine inferioar a lui R (GLB). Definiie. O mulime L nzestrat cu o relaie de ordine este o latice, dac pentru orice submulime {x,y}L format din dou elemente, L conine cea mai mic margine superioar i cea mai mare margine inferioar a submulimii respective. Vom nota prin xy cea mai mic margine superioar (LUB), iar prin xy cea mai mare margine inferioar (GLB). n general, orice mulime total ordonat este o latice, deoarece xy este fie x, fie y i xy este fie x, fie y, dup cum xy sau yx. Propoziie. O mulime L nzestrat cu dou relaii binare i satisfcnd urmtoarele patru proprieti 1. Comutativitate: x y = y x, x y = y x, x,yL, 2. Asociativitate: x(y z) = (x y)z, (x y)z =(x y)z, x,y,zL, 3. Idempoten: x x =x, x x =x, x,yL, 4. Absorbie: x(y x) = x, x(y x) =x, x,y,zL, este o latice, cu relaia de ordine "" definit prin a b dac i numai dac a b = b (sau echivalent a b = a). Prin definiie, o latice este distributiv dac operaiile i sunt distributive ntre ele 5. x(y z) = (x y)(x z), x(y z) = (x y)(x z), x,y,zL. Definiie. O latice este mrginit dac conine 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). Definiie. O latice este complementat dac pentru orice element x din L, exist un element x'L, denumit complementul lui x, astfel inct xx'=1 i xx'=0. Definiie. O latice distributiv, mrginit i complementat este o algebr Boole sau algebr boolean. O algebr boolean este reprezentat printr-o sextupl de forma (L,,,,0,1) cu operaiile binare i i operatorul unar . Definiie. O Heiting algebr este o sextupl (L,,,,0,1) n care (L,,,0,1) este o latice distributiv i mrginit, iar "" este o operaie binar pe L, denumit implicaie, satisfcnd urmtoarele cinci proprieti: H1. xx=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).
Propoziie. Dac (L,,,,0,1) este o algebr boolean i opaeraia a b este definit prin a b, atunci (L,,,,0,1) este o Heyting algebr. Definiie. O latice este denumit complet, dac fiecare sub-mulime R a sa conine un supremum sau, echivalent, fiecare submulime a sa conine un infimum. Logica boolean i logica fuzzy se caracterizeaz i se deosebesc prin spaiile n care iau valori funciile corespunztoare de adevr, mulimea {0,1}, respectiv intervalul [o,1]. Fiind total ordonate, ambele spaii sunt latici distributive i mrginite n raport cu relaia de ordine natural, {0,1} fiind, n plus, i algebr boolean. Dei teoretic n logica fuzzy funcia de adevr ia valori n intervalul [0,1], Zadeh a luat n considerare numai un numr cel mult numrabil de valori de adevr. O astfel de mulime de valori de adevr ar putea fi de forma VA = {adevrat, foarte probabil, incert, probabil neadevrat, fals}.
IASE
5/26
nainte de a defini logica fuzzy, s trecem n revist i logica cu trei valori a lui Kleene. n acest sistem, spaiul valorilor de adevr const n mulimea {0, 1/2, 1}, ordinea fiind cea natural. Notnd cu T funcia de adevr, vom spune c T(a)=1, T(a)=0 sau T(a)=1/2, dup cum fromula a este adevrat, fals sau nu putem decide asupra veridicitii acesteia. n logica cu trei valori Kleene, evaluarea valorilor de adevr corespunztoare negaiei, disjunciei, conjunciei i implicaiei se calculeaz n conformitate cu relaiile cunoscute T(a) = 1 - T(a) (1.3-1) (1.3-2) T(a b) = max(T(a),T(b)) T(a b) = min(T(a),T(b)) (1.3-3) (1.3-4) T(a b) = max(1-T(a),T(b)) Calculul valorilor de adevr ale unei formule n funcie de valorile de adevr ale componentelor sale se realizeaz, ca i n cazul logicii booleene, cu ajutorul tabelelor de adevr. Un astfel de tabel de adevr va conine de aceast dat 3n linii, n fiind numrul de componente implicate. a b ab ab ab ab 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 Exerciiu. Se consider propoziiile 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 adevr a propoziiei (a b) c. Ca i n sistemul logic cu trei valori a lui Kleene, i n logica fuzzy valorile de adevr ale expresiilor a, ab sau ab se calculeaz conform relaiilor (1.3-1)-(1.3-3). S considerm o formul oarecare bine format din n propoziii atomice. Evaluarea valorii de adevr implica construcia unor tabele de adevr coninnd 2n linii n cazul logicii booleene sau 3n linii n cazul logicii Kleene. La o prim privire, s-ar prea c numrul liniilor din tabelele de adevr este nenumrabil n cazul logicii fuzzy. n realitate lucrurile nu stau aa. Vom demonstra n continuare c sunt suficiente doar 2nn! linii pentru ntocmirea tabelelor de adevr. Este evident, c valoarea de adevr T a unei formule oarecare, depinznd de componentele a1,...,an, depinde de ordinea de dispunere a valorilor T(a1),...,T(an),T(a1),...,T(an). Dar 2nn! este tocmai numrul total de posibiliti n care aceste valori pot fi dispuse. Demonstraia se poate face prin inducie. Dac n=1, avem de a face cu o propoziie 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 propoziii a i b, vor exista 222!=8 posibilit. S verificm 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 adevr ale propoziiilor implicate se pot situa intr-una din urmtoare ordine a b b a a b b a b a a b b a a b
IASE
6/26
Celelalte 4 posibiliti decurg din cealalt alternativ posibil T(b)T(a). Modul de evaluare al valorilor de adevr 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 posibiliti a b a b b a a b a b b a b a a b a b b a b a a b a b b a b a a b ab b b a b b a a a
a b b b a b b a a a
(a b)
b b a b b a a a
Dup cum se poate constata din tabelul de mai sus, coloanele corespunztoare lui ab i (ab) sunt identice, n consecin legea lui De Morgen rmne adevrat i n logica fuzzy. Dei foarte simpl, metoda tabelelor de adevr devine impracticabil atunci cnd n crete, datorit numrului mare de linii ale tabelului de adevr. De exemplu, dac formula conine 3 propoziii a, b i c, tabelul de adevr conine va 233!=48 de linii. O modalitate, pentru evitarea exploziei exponeniale a numrului de linii al tabelelor de adevr, const "transferul" calculelor, din domeniul calculului propoziional n cel numeric al valorilor de adevr. Astfel, aceeai regul a lui De Morgen a b = (a b), poate fi demonstrat mult mai simplu. S notm, pentru aceasta, cu x i y valorile de adevr ale celor dou propoziii. 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 aceeai valoare de adevr, n mod evident, acestea sunt echivalente. Pentru includerea implicaiei ca o conectiv a logicii fuzzy, se pot utiliza mai multe definiii 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} picm peste definiia uzual a implicaiei. 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 urmtoarea definiie a implicaiei T(b), dac T(a) > T(b) T (a b ) = n caz contrar 1, Desigur, i aceast definiie este consistent cu calculul propoziional. Ceea ce i se reproeaz ns acestei definiii 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
fuzzy.
Variabilele fuzzy reprezint un domeniu de valori numerice, care poate fi divizat n cteva subdomenii prin definirea unor calificative (cuantificatori) ai variabilei fuzzy. Aceste calificative constau din identificatori literali (nume), cunoscui sub denumirea de calificative lingvistice, i o funcie de apartenen, care arat gradul de apartenen al fiecrei valori posibile a variabilei fuzzy la setul fuzzy.
IASE
8/26
Cnd o valoare este asignat unei variabile fuzzy, aceasta este convertit ntr-un grad de apartenen pentru fiecare calificativ lingvistic, utiliznd funcia de apartenen asociat. Cnd 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 importanei 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 nti se identific gradul de apartenen al calificativelor specificate n partea condiional i calculeaz noul grad de apartenen al calificativului menionat 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 conine trei faze principale: 1. Fuzzyficarea etap n care valorile de intrare sunt asignate unor variabile fuzzy corespunztoare. 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, menionate n partea condiional, sunt propagate ctre 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 = 200C, 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 fiecrui calificativ aparinnd variabilei fuzzy throttle (ajutaj); calificativul cu cel mai mare scor este positive_large, urmat de positive_medium. n final este calculat valoarea de ieire (valoarea 35) n funcie de toate gradele de apartenen ale calificativelor asociate variabilei throttle. Aceast valoare de ieire va fi utilizat n reglarea turbinei cu aburi.
Fig. 7.1
IASE
9/26
7.4.3. Componentele Fuzzy Componentele unui program fuzzy pot fi grupate n patru categorii: 1. Variabile fuzzy 2. Restricii 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 definete 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 fuzzy Puncte calificativ
Form calificativ
Curbur calificativ
Fig. 7.2
Domeniul variabilei Nume variabil fuzzy Puncte calificativ
fuzzy_variable speed range is [0, 200] ; qualifier slow is \ shaped and curved(2) at 0, 30 ; qualifier medium is /\ shaped and linear at 10, 30, 50 ; qualifier fast is / shaped and curved(0.5) at 40, 70 ; peak.
Form calificativ Curbur 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
Setarea limitelor inferioar i superioar a unei variabile fuzzy, care definesc intervalul valorilor posibile pe care variabila le poate lua, este opional i se poate obine 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, prelund valorile extreme utilizate n definirea acestora. Definirea calificativelor variabilei fuzzy. Aceste calificative constau din nume i funcii 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 funciei de apartenen: prin forma exact, prin curbur, prin puncte relevante. Aceast funcie 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 apartenena 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 dispoziia utilizatorului 7 forme distincte de funcii: pant cresctoare, pant descresctoare, triunghi cu vrful n sus, triunghi cu vrful 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 fiecrei funcii n parte. Tabelul 7.1 Simbol Puncte Descriere / [A, B] pant cresctoare \ [A, B] pant descresctoare /\ [A, B, C] triunghi cu vrful n sus \/ [A, B, C] triunghi cu vrful 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 funciilor de apartenen pentru fiecare tip predefinit. Simbolurile au rolul de a defini forma funciei, iar puncte indic numrul de puncte necesare la definirea funciei. Prin notaiile LB i UB se desemneaz limitele inferioar (LB Lower Bounds) i superioar (UP Upper Bounds) ale variabilei fuzzy.
IASE
11/26
IASE
12/26
g Fig. 7.4,a,b,c,d,e,f,g
Exemple: S considerm 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 stnga, iar cele peste 90 definitiv non stanga: stanga, \, linear, [60, 90]; Cuvntul 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 definete un calificativ dreapta. dreapta, /, linear, [90, 120]; Forma triunghiular cu vrful 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 vrful n jos se utilizeaz normal pentru calificative care indic negaia unei caliti (acoper tot domeniul, mai puin 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 definete 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 cerinele 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 sfrit 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 funcie 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 dispoziia utilizatorului facilitatea de a aduga un parametru de curbur tuturor formelor descrise anterior. Acest parametru poate lua valori cuprinse ntre 0.1 i 9.9, forma curbei variind n funcie de poziia relativ a punctelor de start i final, precum i de valoarea parametrului de curbur: mai mic, egal sau mai mare dect 1. Aceste 9 cazuri sunt prezentate n fig. 7.5.
IASE
13/26
Fig. 7.5 Cu ct valoarea parametrului de curbur este mai ndeprtat de 1, cu att 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 funciei este prezentat n fig. 7.6, iar pentru valoarea 2 n cazul unei funcii triunghiulare n fig. 7.7.
Fig. 7.6
Fig. 7.7
Definirea de-fuzzyficrii 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 conine dou tipuri de de-fuzzyficare predefinite: centroid i peak. Metoda centroid reprezint de-fuzzyficatorul implicit i funcioneaz prin gsirea centrului de greutate al coleciei tuturor gradelor de apartenen ale tuturor calificativelor variabilei fuzzy considerate. Pentru a ilustra modul de aciune al acestei metode, considerm o variabil fuzzy denumit precipitatii, cu trei calificative: light, medium, heavy (fig. 7.8).
Fig. 7.8 La sfritul sesiunii fuzzy, valorile acestor calificative sunt: light = 0.75, medium=0.25 i heavy = 0. Metoda centroid acioneaz asupra fiecrei funcii de apartenen, corespunztoare fiecrui calificativ, i elimin toate zonele funciei aflate deasupra valorii curente a calificativului (v. fig. 7.9). n continuare, zonele rmase din aceste funcii (poriunile 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
Fig. 7.9 Metoda peak urmrete identificarea calificativelor cu cel mai mare grad de apartenen, apoi calculnd punctul central al tuturor palierelor obinute n punctul de tiere. Considernd aceeai variabil fuzzy, precipitatii, se caut calificativul cu valoare maxim (light), se taie funcia de apartenen n dreptul valorii curente (0.75) i se calculeaz centru palierului obinut (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 considerm o variabil temperatura, cu valori n intervalul [-5050] 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 parial, aa cum rezult din reprezentarea grafic combinat din fig. 7.11,e.
IASE
15/26
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 urmtoarele instruciuni: 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 deformrilor lingvistice (linguistic hedge). Se utilizeaz pentru a concentra sau dilua caracteristica funciei de apartenen a unui calificativ. Definirea unei deformri lingvistice presupune a defini numele su 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 oricrui calificativ). A doua parte din definiia unei deformri lingvistice reprezint formula aplicat oriunde identificatorul acesteia este utilizat i afecteaz funcia de
IASE
16/26
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 evidenia modul de acionare a unei astfel de deformri lingvistice, s considerm 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, considerm parametrul foarte (definit anterior) i putin (definit prin fuzzy_hedge (putin, power(0.2)).)
c Fig. 7.12 Un calificativ nsoit de un atribut de deformare poate fi apelat, ntr-o regul fuzzy, sub forma:
if buna_dispoziie is foarte fericire Aceast construcie are ca efect exagerarea funciei de apartenen fericire, reprezentat n fig. 7.12,b mpreun cu funcia original (linie punctat). Considernd un grad de apartenen de 0.5, pentru funcia original corespunde o valoarea a variabilei fuzzy de 40, iar pentru funcia deformat o valoare de aproximativ 70. Astfel, se obine o nclinare a funciei ctre 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 funciei de apartenen, n sensul reducerii valorii variabilei fuzzy corespunztoare unui grad de apartenen precizat (fig. 7.12,c), n raport cu funcia original (liniar). n acest caz, funcia de apartenen este modificat astfel se obin stri de mai puin 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 raionamente cu i despre calificativele variabilelor fuzzy. Regulile constau dintr-un set de condiii, introduse prin if, i un set de concluzii (partea then, respectiv else).
IASE
17/26
Anatomia unei reguli fuzzy Anatomia utilizat n definiia unei reguli fuzzy este prezentat n fig. 7.13. n aceast definiie sunt utilizai civa operatori. Orice program fuzzy logic trebuie s includ declaraiile urmtorilor operatori:
Nume variabil condiional Nume regul fuzzy Nume calificativ condiional
fuzzy_rule (risk1) if duration is long and cost is high then risk is substantial else risk is low.
Operatori
fuzzy_rule risk1 if the duration is long and the cost is high then the risk is substantial else the risk is low.
Operatori
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. Condiiile unei reguli fuzzy fac apel la variabile fuzzy i la calificativele acestora. Condiii compuse se pot obine prin utilizarea conectivelor and (conjuncie), or (disjuncie) i not (negaie). Concluzia unei reguli poate fi calculat n mai multe moduri, n funcie de tipul conectivelor aplicate. Valoarea calificativului variabilei fuzzy menionat n seciunea then este calculat cu valorile curente ale gradelor de apartenen ale calificativelor variabilelor menionate n condiii. Valoarea calificativului variabilei fuzzy menionat n partea opional
IASE
18/26
else se calculeaz prin scderea din 1 a valorii calculate pentru calificativul variabilei fuzzy menionat n partea then. Exemplu: n acest exemplu se urmrete reglarea deschiderii ajutajului unei turbine cu abur, n funcie de temperatura i presiunea din interior. Valoarea de apartenen a calificativului positiv_large al variabilei ajutaj utiliznd valorile de apartenen curente ale calificativelor rece (al variabilei temperatura) i joasa (variabila presiune) se poate stabili prin urmtoarea regul: fuzzy_rule (ajutaj1) if temperatura is rece and presiune is foarte_joasa then ajutaj is positiv_large. Similar pot fi definite i urmtoarele 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 aceeai structur (toate condiiile se refer numai la calificative ale variabilelor temperatura i presiune i conduc la concluzii privitoare la variabila ajutaj). De asemenea, conin acelai tip de operatori n partea condiional (conjunciile and). n astfel de cazuri, toate aceste reguli pot fi reunite convenional ntr-o matrice de reguli fuzzy. Sintaxa unei matrice fuzzy este prezentat n fig. 7.14. Prima linie din definiie 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 urmtoare: temperatura * presiune -> ajutaj; este echivalent cu forma: if temperatura is _ and presiune is _ then ajutaj is _ n cazul utilizrii aceleiai 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 rece * foarte_joasa rece * joasa rece * normala
IASE
19/26
Nume matrice
* * *
-> ->
risk ; low.
Deformare calificativ
Nume matrice
fuzzy_matrix risk_rules
Nume variabile matrice
* * *
-> ->
risk ; low.
Deformare calificativ
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 acionare (care preiau intrrile i le convertesc n semnale de acionare a dispozitivului) i un set de sensori (fig. 15).
Fig. 15
IASE
20/26
Controlerul fuzzy logic primete informaiile de la senzori i le fuzzyfic n variabilele fuzzy asociate sistemului; apoi se propag valorile de apartenen utiliznd regulile fuzzy definite in program, iar n final se de-fuzzyfic ieirea i se returneaz valorile pentru sistemul de acionare. 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 stabilizrii 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 (condiii, concluzii, conjuncii, disjuncii i negaii) utilizabili n definirea regulilor fuzzy.
%%%%%%%%%%%%%%%%%%%%%%%% % Linguistic operators % %%%%%%%%%%%%%%%%%%%%%%%% :- op( op( op( op( op( op( op( 1150, 1150, 1150, 1100, 1000, 700, 600, fy, xfy, xfx, xfy, xfy, xfx, fy, ( ( ( ( ( ( ( if then else or and is not ) ) ) ) ) ) ) ), ), ), ), ), ), ).
Definirea variabilelor fuzzy n stabilirea variabilelor fuzzy i calificativelor acestora se pornete de la cantitile care urmeaz s fie utilizate n regulile fuzzy: temperatura, presiune i ajutaj. De asemenea, din analiza sistemului, se stabilesc intrrile: temperatura i presiune, respectiv ieirile acestuia: ajutaj. Pentru fiecare dintre acestea se definete cte o variabil fuzzy. n pasul urmtor se stabilesc seturi de cuvinte care vor desemna calificativele lingvistice ale variabilelor fuzzy. Considernd variabila temperatura, se stabilete (de ctre 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 urmtoarele adjective, stabilite prin concordan cu subintervalele de temperaturi reprezentative ale valorilor posibile: rece, racoare, normal, cald, fierbinte. Cea mai simpl
IASE
21/26
cale de a implementa o form pentru fiecare calificativ este de a considera dependenele liniare. Ulterior, funciile de apartenen pot fi rafinate. Aplicnd sintaxa corespunztoare, calificativele asociate variabilei fuzzy temperatura au urmtoarele definiii (fig. 7. 17):
Fig. 7.17
fuzzy_variable( temperatura ) [ 0 , 500 ] ; rece, \, linear, racoare, /\, linear, normal, /\, linear, cald, /\, linear, fierbinte, /, linear, :[ [ [ [ [ 110 110 165 220 , , , , 165 165 220 275 275 ] ] ] ] ] ; ; ; ; .
, , , ,
Cea de-a doua variabil fuzzy de intrare, presiune, se definete similar, introducnd calificativele: joas, scazuta, normala, ridicata, inalta (fig. 7.18). Se consider intervalul [0, 300] (msurat n 100 KPa).
Fig. 7.18
fuzzy_variable( [ 0 , 300 joasa, scazuta, normala, ridicata, inalta, presiune ) :] ; \ , linear, [ 10 /\, linear, [ 10 /\, linear, [ 70 /\, linear, [ 130 /, linear, [
] ] ] ] ]
; ; ; ; .
Variabila fuzzy de ieire 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 micarea ajutajului cu cantiti mari, medii sau mici, n sens pozitiv sau negativ. De aceea, se definesc 7 calificative care acoper aceste aciuni: 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
negativ_mare, negativ_medie, negativ_mica, zero, pozitiv_mica, pozitiv_medie, pozitiv_mare, centroid . \ , /\, /\, /\, /\, /\, /, linear, linear, linear, linear, linear, linear, linear, [ [ [ [ [ [ [
22/26
-45 -45 -30 -15 0 15 , -30 ] ; , -30 , -15 ] ; , -15 , 0 ] ; , 0 , 15 ] ; , 15 , 30 ] ; , 30 , 45 ] ; 30 , 45 ] ;
Fig. 7.19
Definirea regulilor fuzzy Etapa de definire a variabilelor fuzzy fiind ncheiat, urmtorul pas const n stabilirea regulilor fuzzy. Considerm c, n urma consultrii unui expert n turbine cu abur, se ajunge la mai multe reguli care descriu legtura dintre cele trei mrimi exterioare sistemului (variabile fuzzy). Considernd toate combinaiile 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 urmtoare: Dac temperatura este rece i presiunea joas, atunci deplaseaz ajutajul cu o cantitate pozitiv mare. Pentru fiecare regul de acest tip trebuie definit separat cte 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 rece rece rece rece rece racoare racoare racoare racoare racoare * * * * * * * * * * * presiune joasa scazuta normala ridicata inalta joasa scazuta normala ridicata inalta -> -> -> -> -> -> -> -> -> -> -> ajutaj pozitiv_mare pozitiv_medie pozitiv_mica negativ_mica negativ_medie pozitiv_mare pozitiv_medie zero negativ_medie negativ_medie ; ; ; ; ; ; ; ; ; ; ;
IASE
normal normal normal normal normal cald cald cald cald cald fierbinte fierbinte fierbinte fierbinte fierbinte * * * * * * * * * * * * * * * joasa scazuta normala ridicata inalta joasa scazuta normala ridicata inalta joasa scazuta normala ridicata inalta -> -> -> -> -> -> -> -> -> -> -> -> -> -> ->
23/26
pozitiv_medie pozitiv_mica zero negativ_mica negativ_medie pozitiv_medie pozitiv_mica negativ_mica negativ_medie negativ_mare pozitiv_mica pozitiv_mica negativ_medie negativ_mare 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 utiliznd 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 intrrilor temperatura i presiune, iar al treilea pentru valoarea variabilei ajutaj. Setarea valorilor unei variabile fuzzy i extragerea acesteia se obine 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 condiional la calificativele din partea de concluzii se va realiza n raport cu conjunciile, disjunciile i negaiile coninute n regulile fuzzy. Valorile implicite sunt urmtoarele: minimum pentru conjuncii (va fi propagat valoarea minim din conjuncii) maximum pentru disjuncii (va fi propagat valoarea maxim din disjuncii) complement pentru negaii (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 ncrcarea interpretorului fuzzy logic, prin comanda:
?- ensure_loaded(system(fuzzy)). Programului fuzzy pentru controlul turbinei cu aburi conine predicatul gaseste_ajutaj/3. A rula acest program se reduce la interogarea sistemului Prolog utiliznd urmtorul goal: ?- gaseste_ajutaj(300, 150, Ajutaj). Ajutaj = -26.040413058933
IASE
24/26
Exemplu de program fuzzy logic scris n limbajul KSL
n aceast seciune se prezint exemplul anterior (controlul fuzzy al unei turbine cu aburi) utiliznd flex i limbajul su 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 \ qualifier racoare is /\ qualifier normal is /\ qualifier cald is /\ qualifier fierbinte is / fuzzy_variable presiune ranges from 0 to 300 ; qualifier joasa is qualifier scazuta is qualifier normala is qualifier ridicata is qualifier inalta is
at at at at at
, , , , ,
\ /\ /\ /\ /
at at at at at
; ; ; ;
fuzzy_variable ajutaj ranges from -60 to 60 ; qualifier negativ_mare is qualifier negativ_medie is qualifier negativ_mica is qualifier zero is qualifier pozitiv_mica is qualifier pozitiv_medie is qualifier pozitiv_mare is defuzzifier = centroid .
\ /\ /\ /\ /\ /\ /
at at at at at at at
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % FAM - Fuzzy Associative Memory % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fuzzy_matrix ajutaj_value temperatura rece rece rece rece rece racoare racoare racoare racoare racoare normal normal normal normal normal * * * * * * * * * * * presiune joasa scazuta normala ridicata inalta * * * * * joasa scazuta normala ridicata inalta -> ajutaj ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
-> -> -> -> -> -> -> -> -> -> -> -> -> -> ->
pozitiv_mare pozitiv_medie pozitiv_mica negativ_mica negativ_medie pozitiv_mare pozitiv_medie zero negativ_medie negativ_medie pozitiv_medie pozitiv_mica zero negativ_mica negativ_medie
IASE
cald cald cald cald cald fierbinte fierbinte fierbinte fierbinte fierbinte * * * * * joasa scazuta normala ridicata inalta * * * * *
25/26
-> -> -> -> -> pozitiv_medie pozitiv_mica negativ_mica negativ_medie 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
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 dorete a fi controlat. Atributele cadrului turbina sunt actualizate, n urma msurtorilor obinute pe turbina real, prin definirea aciunii 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 cte ori se modific temperatura i/sau presiunea. Valoriletest ale parametrilor de intrare sunt setate prin definire i apelarea aciunii test_turbina_values. i n cazul programelor fuzzy KSL trebuie ncrcat mai nti interpretorul fuzzy, iar dup compilare, programul este rulat prin interogarea Prolog: ?- test_turbina_values.