Sunteți pe pagina 1din 24

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab

(R.-E. Precup, UPT, 2015)

Cap. 10. Dezvoltarea asistat de calculator a sistemelor de


inferen fuzzy n Matlab
Principial, pentru reprezentarea unei mulimi fuzzy prin intermediul funciei
de apartenen (f.d.ap.) pot fi utilizate urmtoarele explicitri: parametric sub forma
unei funcii analitice aferente f.d.ap., grafic direct prin intermediul graficului f.d.ap.
sau discret prin singleton-uri, n cazul mulimilor fuzzy cu universuri numrabile sau
discrete. n cele ce urmeaz se recurge la prima variant de explicitare, detalii privind
celalte variante putnd fi urmrite n [P6], astfel c f.d.ap. utilizate pe larg n
conducerea fuzzy au urmtoarele expresii:
- f.d.ap. de tip trapezoidal:

0,

( x ) /( ),

F ( x) =
1,
( x) /( ),

0,

dac
dac
dac
dac
dac

x<
x [, ]
x [, ] , x R, < < , (10.7)
x [ , ]
x>

- f.d.ap. de tip triunghiular caracterizate prin particularizarea = n (10.7),


- f.d.ap. de tip singleton:

1, dac
F ( x) =
0, n rest

x=

, xR ,

(10.8)

- f.d.ap. de tip gaussian:

F ( x) = e ( x x )

/ 22

, xR ,

(10.9)

cu parametrii x - centrul i 0 - limea clopotului Gauss,


- f.d.ap. de tip clopot generalizat:

F ( x) = 1 /(1+ | ( x x ) / a | 2b ), x R ,

(10.10)

n care x este centrul iar parametrii b > 0, a 0 definesc limea clopotului.


Trebuie observat c parametrul asociat singleton-ului din relaia (10.8)
poart i denumirea de valoare modal, analizat n [G6]. Un singleton poate fi
considerat i ca reprezentare a unei valori ferme care este egal cu valoarea modal.

10.1. Aplicaii n Matlab


n cadrul acestui subcapitol va fi prezentat pachetul de programe de logic
fuzzy, Fuzzy Logic Toolbox [M6], utilizat pentru implementarea n cadrul
1

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

mediului Matlab [M1] a sistemelor de inferen fuzzy (SIF). Se vor prezenta pe


rnd toate funciile necesare pentru dezvoltarea i simularea funcionalitii /
comportrii unui SIF multivariabil la intrare i ieire. n continuare, dac SIF este
utilizat ca regulator fuzzy (RG-F), RG-F astfel dezvoltat va putea fi inclus ntro
structur de sistem de conducere fuzzy, iar comportarea ansamblului / sistemului
va putea fi studiat tot prin simulare.
Pentru simularea comportrii sistemelor de conducere fuzzy, alturi de
Fuzzy Logic Toolbox este necesar ns i apelarea unei metode adecvate de
simulare a comportrii procesului condus. n acest scop, se vor face referiri la
mediul de simulare Simulink [M7] ntruct acesta ofer facilitile solicitate de
simularea comportrii sistemelor dinamice.
Relativ la implementarea funcionalitii / comportrii unui SIF, n
particular RG-F, utiliznd funcii Matlab din cadrul Fuzzy Logic Toolbox, funciile
prezentate n continuare se refer la i asigur urmtoarele:
definirea variabilelor lingvistice (VL) i a termenilor lingvistici (TL) afereni
prin intermediul funciilor de apartenen (f.d.ap.);
fuzzificarea informaiei ferme;
definirea bazei de reguli;
selectarea unei metode de defuzzificare (din cele disponibile) i efectuarea
defuzzificrii;
lucrul efectiv cu pachetul de programe.
De la nceput se precizeaz faptul c exist dou moduri de lucru n
cadrul Fuzzy Logic Toolbox al mediului Matlab (FLT-Matlab), i anume:
a) implementarea SIF utiliznd:
linia de comand Matlab, sau
crearea unui fiier cu extensia .m (de exemplu, program.m) i rularea acestuia
din linia de comand Matlab,
prin apelul funciilor specifice, definite i prezentate spre examplu n [P6];
b) apelarea editorului grafic fuzzy care permite crearea n spaiul de lucru Matlab a
unei variabile corespunztoare SIF al crui comportament este studiat i simulat cu
ajutorul meniurilor aferente.
Folosirea editorului grafic prezint un avantaj net prin faptul c permite o
definire rapid i intuitiv a SIF. Apare ns dezavantajul unui consum mare de
resurse hardware. n ambele moduri de lucru menionate SIF implementat poate fi
salvat n formatul specific fis (acronim corespunztor termenului Fuzzy Inference
System), care conine toate informaiile specifice aferente RG-F (tip, intrri, ieiri,
baz de reguli, metod de defuzzificare).
1. Funcii Matlab utilizate pentru definirea funciilor de apartenen.
Principalele funcii Matlab prin care se pot defini diferite tipuri de f.d.ap. care stau
la dispoziia utilizatorului n cadrul FLT-Matlab sunt urmtoarele:
2

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

a) F.d.ap. de tip triunghiular, caracterizate prin particularizarea = n (10.7).


Sintaxa pentru funcia Matlab care permite definirea unei f.d.ap. de tip triunghiular
este urmtoarea:
y = trimf(x, param),

(10.56)

n care:

x vectorul coloan al mulimii de baz pe care se definete f.d.ap., de


forma x = (xmin: x: xmax) ', xmin,max marginea inferioar
respectiv superioar a domeniului, x pasul de explorare / calcul al
valorilor f.d.ap. pe domeniul de baz (univers);
y vectorul coloan al valorilor f.d.ap.;
param vectorul linie al parametrilor corespunztori TL (f.d.ap.):
param = [ ].

(10.57)

Observaie: Pe parcursul ntregului subcpaitol, pentru vectorii x i y se


pstreaz aceeai semnificaie.
Exemplul 10.1: Urmtoarea secven de program scris n Matlab
genereaz o f.d.ap. de tip triunghiular:
x=(0:0.2:10)';
y=trimf(x,[3 4 5]);
plot(x,y)
Graficul funciei de apartenen generate este prezentat n fig. 10.8.

Fig. 10.8. F.d.ap. obinut ca rezultat al exemplului 10.1.


3

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

b) F.d.ap. de tip trapezoidal, caracterizate prin expresia analitic (10.7). Sintaxa


pentru funcia Matlab aferent f.d.ap. de tip trapezoidal este de forma:
y = trapmf(x, param),

(10.58)

n care:

param = [ ].

(10.59)

Exemplul 10.2: Un exemplu de generare a f.d.ap. de tip trapezoidal este


prezentat n urmtoarea secven de program:
x=(0:0.2:10)';
y=trapmf(x,[2 3 7 9]);
plot(x,y)
n fig. 10.9 este prezentat graficul f.d.ap. generate.

Fig. 10.9. F.d.ap. obinut ca rezultat al exemplului 10.2.


c) F.d.ap. de tip gaussian, caracterizate prin expresia analitic (10.9). Sintaxa unei
f.d.ap. de tip gaussian (clopot Gauss) este dat de relaia:
y = gaussmf(x, param),

(10.60)

n care:

param = [ x ].

(10.61)

Exemplul 10.3: Secvena de program care genereaz o f.d.ap. de tip clopot


Gauss este:
4

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

x=(0:0.1:10) ';
y=gaussmf(x,[1 5]);
plot(x, y)
n fig. 10.10 este prezentat graficul f.d.ap. generate.

Fig. 10.10. F.d.ap. obinut ca rezultat al exemplului 10.3.


d) F.d.ap. de tip curb Gauss asimetric sau de tip combinaie de dou curbe
Gauss. Expresia analitic este prezentat pe dou cazuri n cele ce urmeaz.
cazul 1: a1 < a2:

( x a1 ) 2
e 2b12 ,
x a1

( x) = 1,
x (a1 , a 2 ]
,
( x a2 ) 2
2b 2
2
e
,
x > a 2 , b1 , b2 > 0

cazul 2: a1 a2:

(10.62)

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

( x a1 ) 2
e 2b12 ,

( x ) =
2
( x a22 )
e 2b2 ,

xc

(10.63)

x>c

unde parametrul c (a1, a2) este obinut din condiia de continuitate a funciei
din (10.63):
(c a1 ) 2 b22 = (c a 2 ) 2 b12 .

(10.64)

F.d.ap. obinut n acest al doilea caz este subnormal. Sintaxa unei f.d.ap. de tip
curb Gauss asimetric este:
y = gauss2mf(x, param),

(10.65)

n care:
param = [b1 a1 b2 a2].

(10.66)

Exemplul 10.4: Secvena de program care genereaz trei f.d.ap. de tip


(10.62) i (10.63) este:
x=(0:0.1:10)';
y1=gauss2mf(x,[1 4 0.5 6]);
y2=gauss2mf(x,[1 5 0.5 5]);
y3=gauss2mf(x,[1 6 0.5 4]);
plot(x,y1,'-',x,y2,':',x,y3,'-.')
n fig. 10.11 sunt ilustrate graficele f.d.ap. generate.
e) F.d.ap. de tip clopot generalizat, cu expresia analitic din relaia (10.10).
Sintaxa funciei Matlab corespunztoare acestei f.d.ap. este:
y = gbellmf(x, param),

(10.67)

n care:
param = [a b x ].

(10.68)

Exemplul 10.5: Se execut urmtoarea secven de program:


x=(0:0.1:10)';
y1=gbellmf(x,[1 4 5]);
y2=gbellmf(x,[1 4 7]);
plot(x,y1,'-',x,y2,':')
n fig. 10.12 sunt prezentate graficele f.d.ap. generate.

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

Fig. 10.11. F.d.ap. obinute ca rezultat al exemplului 10.4.

Fig. 10.12. F.d.ap. obinute ca rezultat al exemplului 10.5.


f) F.d.ap. de tip sigmoid, cu expresia analitic:

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

( x ) =

1
1+ e

a ( x c )

(10.69)

care pentru a > 0 asigur o f.d.ap. este deschis ctre dreapta, iar pentru a < 0 ctre
stnga. Sintaxa funciei Matlab aferente este:
y = sigmf(x, param),

(10.70)

n care:
param = [a c].

(10.71)

Exemplul 10.6: Se ruleaz secvena de program Matlab:


x=(0:0.1:10)';
y1=sigmf(x,[1 5]);
y2=sigmf(x,[-1 5]);
plot(x,y1,'-',x,y2,':')
n fig. 10.13 sunt prezentate graficele f.d.ap. generate.

Fig. 10.13. F.d.ap. obinute ca rezultat al exemplului 10.6.

FLT-Matlab asigur definirea / generarea i a altor tipuri de f.d.ap. utilizate


mai rar n practica modelrii sistemelor dinamice i conducerii sistemelor,
prezentate mai jos mpreun cu funciile Matlab care le genereaz:
- diferena a dou f.d.ap. de tip sigmoid: disgmf,
- f.d.ap. de tip spline de form : pimf,
8

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

- f.d.ap. de tip produs a dou f.d.ap de tip sigmoid: psigmf,


- f.d.ap. de tip spline de form S: smf,
- f.d.ap. de tip spline de form Z: zmf.
Utilizatorul are liberatarea de a-i defini, dependent de aplicaie, propriile forme de
f.d.ap.
2. Funcii Matlab utilizate pentru fuzzificarea informaiei ferme.
Principalele funcii Matlab care se utilizeaz n acest scop sunt descrise n cele ce
urmeaz.
a) Funcia addvar. Sintaxa funciei este urmtoarea:
fis2 = addvar(fis1, varTip, 'varNume', varDom).

(10.72)

Funcia adaug o variabil lingvistic de tipul specificat prin parametrul varTip


sistemului de inferen fuzzy definit n prealabil de variabila fis1 aflat n spaiul
de lucru Matlab. Rezultatul apelrii l constituie SIF definit de variabila fis2.
Ceilali parametri din relaia (10.72) au urmtoarea semnificaie:
varNume definete numele VL;
varDom definete domeniul VL;
varTip poate lua dou valori:
'input' pentru VL de intrare,
'output' pentru VL de ieire.
VL sunt numerotate (indexate) automat n ordinea definirii lor, prima VL fiind
ntotdeauna recunoscut ca VL de intrare n SIF. Numerotarea VL de intrare i a
VL de ieire se face separat.
b) Funcia rmvar. Sintaxa funciei este dat de relaia (10.73):
fis2 = rmvar(fis1, varTip, varIndex).

(10.73)

Efectul apelrii funciei const n tergerea variabilei lingvistice de tip varTip i


index (numr) varIndex din SIF definit n prealabil de variabila fis1 n spaiul
de lucru Matlab. Rezult SIF definit de noua variabil, fis2.
c) Funcia addmf. Sintaxa funciei addmf este urmtoarea:
fis2 = addmf(fis1, varTip, varIndex, ...
'fdapNume', 'fdapTip', fdapParam).
(10.74)
Funcia adaug un nou TL variabilei lingvistice nominalizate prin parametrii
varTip i varIndex. Ceilali parametri din relaia (10.74) au urmtoarea
semnificaie:
fdapNume reprezint numele TL definit;
fdapTip reprezint tipul TL definit, adic una din tipurile de funcii
prezentate n paragraful anterior;

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

fdapParam reprezint parametrii specifici f.d.ap. specificate prin


fdapTip.
d) Funcia rmmf. Sintaxa funciei este:
fis2 = rmmf(fis1, varTip, varIndex, ...
(10.75)
'termNume', termIndex).

Efectul apelrii acestei funcii const n tergerea TL specificat prin numele


termNume i indexul termIndex din cadrul VL specificate prin varTip i
varIndex.
e) Funcia plotmf. Apelnd aceast funcie Matlab vor fi afiate f.d.ap. ale tuturor
TL afereni VL cu tipul varTip i indexul varIndex din variabila fis1
definit n prealabil i adus n spaiul de lucru Matlab. Sintaxa funciei este
urmtoarea:
plotmf(fis1, varTip, varIndex).

(10.76)

Exemplul 10.7: Pentru ilustrarea utilizrii funciilor enumerate, se


consider modulul de defuzzificare al unui RG-F a temperaturii, care admite ca
intrare semnalul temperatur creia i se asociaz VL Temperatur i pentru
care se definesc 5 TL.
n cele ce urmeaz este prezentat programul surs Matlab care genereaz
cei 5 TL denumii {TFJ, TJ, TM, TI, TFI} asociai VL de intrare Temperatura.
a=newfis('fuzzificare');
a=addvar(a,'input','Temperatura',[0 1]);
a=addmf(a,'input',1,'TFJ','trapmf',[0 0 0.1 0.3]);
a=addmf(a,'input',1,'TJ','trimf',[0.1 0.3 0.5]);
a=addmf(a,'input',1,'TM','trimf',[0.3 0.5 0.7]);
a=addmf(a,'input',1,'TI','trimf',[0.5 0.7 0.9]);
a=addmf(a,'input',1,'TFI','trapmf',[0.7 0.9 1 1]);
plotmf(a,'input',1)
Rezultatul rulrii acestui fiier din linia de comand Matlab este prezentat n fig.
10.14 sub forma graficelor f.d.ap. aferente tuturor TL definii.

10

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

Fig. 10.14. F.d.ap. obinute ca rezultat al exemplului 10.7.

Funcia newfis utilizat n program va fi prezentat i studiat n cele ce


urmeaz.
3. Funcii Matlab utilizate pentru definirea bazei de reguli. FLTMatlab admite trei funcii pentru definirea bazei de reguli a unui SIF, i anume
[M6]: funcia addrule, funcia showrule i funcia parsrule. Se precizeaz c este
vorba despre SIF de tip Mamdani cu mecanismul de inferen MAX-MIN.
a) Funcia addrule. Sintaxa acestei funcii este:
fis2 = addrule(fis1, regLista).

(10.77)

Prin apelarea funciei addrule se adaug / completeaz regulile fuzzy definite n


parametrul regLista aferent SIF definit n prealabil de variabila fis1 din
spaiul de lucru Matlab. Ca rezultat se obine SIF definit de variabila fis2.
Parametrul regLista poate fi o list coninnd una sau mai multe linii,
fiecare linie reprezentnd cte o regul fuzzy. Formatul parametrului regLista
este specific SIF pentru care se definesc aceste reguli. Dac SIF are m intrri i n
ieiri, atunci regLista trebuie s aib (m+n+2) coloane; primele m coloane se
refer la cele m intrri, urmtoarele n coloane se refer la cele n ieiri, coloana
(n+m+1) se refer la importana fiecrei reguli, care poate fi 0 sau 1, valoarea 0
semnific regul fr nici o importan, iar valoarea 1 semnific regul
important (n general, pentru regulile definite se va utiliza valoarea 1); coloana
(n+m+2) conine valorile 1 sau 2 dup cum operatorul utilizat n concluzionare este
11

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

de tip I, respectiv SAU. Cum n concluzionarea regulii se utilizeaz operatorul I,


n aceast ultim coloan se va introduce valoarea 1.
Formatul de definire i afiare a regulilor descris anterior, 'indexed', este
cel implicit i unul din cele trei formate utilizate n accest scop. n acest format, n
primele (m+n) coloane se introduc indexurile TL de intrare i ieire conform
modulului de fuzzificare i bazei de reguli.
Exemplul 10.8: Se consider un SIF cu dou VL de intrare {i1,i2} (TL
afereni sunt notai cu TLj, j=1,2,) i o VL de ieire, u (TL afereni sunt notai cu
TLk, k = 1, 2, ). Se consider c baza de reguli este exprimat astfel:
R1: DAC i1=TL1 I i2=TL1 ATUNCI u=TL3
SAU
R2: DAC i1=TL1 I i2=TL2 ATUNCI u=TL4
SAU
R3: DAC i1=TL2 I i2=TL1 ATUNCI u=TL2
SAU
R4: DAC i1=TL2 I i2=TL2 ATUNCI u=TL1 .
O astfel de baz se reguli se poate introduce n format 'indexed' sub forma
urmtoarei secvene de program:
RegLista = [1 1 3 1 1
1 2 4 1 1
2 1 2 1 1
2 2 1 1 1];
fis1=addrule(fis1,regLista)
b) Funcia showrule. Sintaxa funciei este dat de relaia:
showrule(fis1, regIndex, regFormat, limba),

(10.78)

iar efectul apelrii sale const n afiarea regulilor din baza de reguli (definit prin
addrule) cu indexul regIndex aferent regulatorului fuzzy definit anterior (n spaiul
de lucru Matlab) de variabila fis1. Parametrul regFormat reprezint formatul
n care se dorete afiarea regulilor; valorile posibile pentru acest parametru sunt:
- 'verbose' prin care se afieaz regulile n limbaj natural n englez
(de exemplu, IF (...) THEN (...)),
- 'indexed' prin care se afieaz regulile n format indexat (ntructva
asemntor unei tabele de adevr), acesta fiind formatul implicit,
- 'symbolic' prin care se afieaz regulile n format simbolic (de
exemplu, (x1=P) & (x2=P) ==> u = PB (1)).
Parametrul limba se refer la limba n care se dorete afiarea regulilor englez,
francez sau german n cazul utilizrii limbajului natural i poate lua valorile:
'english', 'francais' respectiv 'deutsch'. Cuvintele-cheie pentru
limba = 'english' sunt urmtoarele: IF, THEN, IS, AND, OR i NOT.
12

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

c) Funcia parsrule. Sintaxa funciei parsrule este de forma:


fis2 = parsrule(fis1, regLista, regFormat, limba). (10.79)

Funcia parsrule adug la variabila fis1 (care este un SIF, n particular RG-F)
baza de reguli dat n regLista n formatul specificat de regFormat i n
limba specificat de limba. Prin urmare, funcia parsrule este o variant flexibil
a funciei addrule.
n cazul n care fis2 = fis1, rezult aceeai variabil fis1 care, fa
de cel existent nainte de apelarea funciei parsrule, conine i noua baz de reguli.
O apelare de forma (10.80):
fis2 = parsrule(fis1, regLista)

(10.80)

analizeaz regulile date n formatul 'verbose' prin regLista.


Exemplul 10.9: Pentru exemplificarea utlizrii funciilor addrule, showrule
i parsrule se continu exemplul 10.7 referitor la un SIF utilizat ca RG-F de tip
Mamdani n reglarea temperaturii (admite o VL de intrare, Temperatura, T).
Pentru aceasta, se consider VL de ieire comanda u, cu cei 5 TL denumii
{CVS, CS, CM, CB, CVB} i avnd f.d.ap. conform fig.10.15.

Fig. 10.15. F.d.ap. aferente VL de ieire din exemplul 10.9.

Pentru inferen este utilizat mecanismul de inferen MAX-MIN asistat de tabelul


de decizie din tabelul 10.2 (baza de reguli este format din 5 reguli).
13

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

Tabelul 10.2. Tabelul de decizie aferent SIF din exemplul 10.9.

TFJ

TJ

TM

TI

TFI

CVB

CB

CM

CS

CVS

Programul Matlab care permite implementarea SIF este urmtorul:


b=newfis('fuzzif&inf&br');
% introducerea VL de intrare (f.d.ap. ale TL):
b=addvar(b,'input','Temperatura',[0 30]);
b=addmf(b,'input',1,'TFJ','trapmf',[0 0 3 9]);
b=addmf(b,'input',1,'TJ','trimf',[3 9 15]);
b=addmf(b,'input',1,'TM','trimf',[9 15 21]);
b=addmf(b,'input',1,'TI','trimf',[15 21 27]);
b=addmf(b,'input',1,'TFI','trapmf',[21 27 30 30]);
% afisarea f.d.ap. ale TL aferenti VL de intrare:
plotmf(b,'input',1)
pause
% introducerea VL de iesire (f.d.ap. ale TL):
b=addvar(b,'output','comanda',[0 1]);
b=addmf(b,'output',1,'CVS','trapmf',[0 0 0.1 0.3]);
b=addmf(b,'output',1,'CS','trimf',[0.1 0.3 0.5]);
b=addmf(b,'output',1,'CM','trimf',[0.3 0.5 0.7]);
b=addmf(b,'output',1,'CB','trimf',[0.5 0.7 0.9]);
b=addmf(b,'output',1,'CVB','trapmf',[0.7 0.9 1 1]);
% afisarea f.d.ap. ale TL aferenti VL de iesire:
plotmf(b,'output',1)
pause
% introducerea primelor 4 reguli din baza de reguli
% (in format 'indexed'):
regLista=[1 5 1 1
2 4 1 1
3 3 1 1
4 2 1 1];
b=addrule(b,regLista);
% afisarea primelor 4 reguli in diverse formate:
regIndex=1:1:4;
showrule(b,regIndex,'indexed','english')
pause
showrule(b,regIndex,'verbose','english')
14

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

pause
showrule(b,regIndex,'symbolic','english')
pause
% introducerea regulii a 5-a (in acelasi format):
reg5=[5 1 1 1];
b=addrule(b,reg5);
% afisarea intregii baze de reguli:
regIndex=1:1:5;
showrule(b,regIndex,'indexed','english')
pause
showrule(b,regIndex,'verbose','english')
pause
showrule(b,regIndex,'symbolic','english')
pause
showrule(b,regIndex,'verbose','deutsch')
pause
showrule(b,regIndex,'verbose','francais')
pause
% salvarea variabilei curente din spatiul
% de lucru Matlab pe harddisk,
% in fisierul fuzzif&inf&br.fis:
writefis(b,'fuzzif&inf&br');
Exemplul 10.10: Pentru exemplificarea utilizrii funciilor pn aici
introduse, va fi implementat n Matlab SIF sub forma unui RG-F care conduce
sistemul pendul invers descris n variant simplificat n [P4] i [P6]. SIF are
dou VL de intrare, poziia unghiular x1 i viteza unghiular x2, i o VL de ieire,
comanda u. Pentru poziia x1 se definesc trei TL (N, Z, P), cu reprezentarea grafic
a f.d.ap. dat n fig. 10.16; domeniul de baz / universul discursului pentru intrarea
x1 este [3;3]. Pentru viteza unghiular x2 se definesc de asemenea trei TL (N, Z,
P), cu f.d.ap. conform fig. 10.17; domeniul de baz / universul discursului pentru
intrarea x2 se accept sub forma intervalului [6;6]. Variabilei lingvistice de ieire,
comanda u, i se asociaz apte TL (NVB, NB, N, Z, P, PB, PVB); formele f.d.ap. i
domeniul de baz / universul discursului sunt prezentate n fig. 10.18.

15

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

Fig. 10.16. F.d.ap. aferente VL de intrare x1 din exemplul 10.10.

Fig. 10.17. F.d.ap. aferente VL de intrare x2 din exemplul 10.10.

16

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

Fig. 10.18. F.d.ap. aferente VL de ieire u din exemplul 10.10.

Semnificaia termenilor lingvistici prezentai anterior este cea frecvent utilizat.


Baza de reguli pentru RG-F va fi alctuit din nou reguli prezentate sintetic n
tabelul 10.3.
Tabelul 10.3. Tabelul de decizie aferent SIF din exemplul 10.10.
Cod
regul
P
Z
N
x1\ x2

PB

R1+

R2+

N
Cod
regul

NB

R3+

R-1

R-2

R-3

Remarc: Se observ c baza de reguli nu apeleaz sub nici o form TL


PVB i NVB. Aceti termeni lingvistici au fost introdui doar pentru a elimina
problemele de capt care ar apare la defuzzificare prin metoda centrului de greutate
[P4].
Programul Matlab care permite implementarea SIF este urmtorul:
a=newfis('Pendul');
17

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

a=addvar(a,'input','x1',[-3 3]);
a=addmf(a,'input',1,'N','trapmf',[-3 -3 -2 0]);
a=addmf(a,'input',1,'Z','trimf',[-2 0 2]);
a=addmf(a,'input',1,'P','trapmf',[0 2 3 3]);
a=addvar(a,'input','x2',[-6 6]);
a=addmf(a,'input',2,'N','trapmf',[-6 -6 -5 0]);
a=addmf(a,'input',2,'Z','trimf',[-5 0 5]);
a=addmf(a,'input',2,'P','trapmf',[0 5 6 6]);
a=addvar(a,'output','u',[-25 25]);
a=addmf(a,'output',1,'NVB','trapmf',[-25 -25 -24 -16]);
a=addmf(a,'output',1,'NB','trimf',[-20 -16 -8]);
a=addmf(a,'output',1,'N','trimf',[-16 -8 0]);
a=addmf(a,'output',1,'Z','trimf',[-8 0 8]);
a=addmf(a,'output',1,'P','trimf',[0 8 16]);
a=addmf(a,'output',1,'PB','trimf',[8 16 20]);
a=addmf(a,'output',1,'PVB','trapmf',[16 24 25 25]);
regLista=[3 3 6 1 1
3 2 5 1 1
3 1 4 1 1
2 3 5 1 1
2 2 4 1 1
2 1 3 1 1
1 3 4 1 1
1 2 3 1 1
1 1 2 1 1];
a=addrule(a,regLista);
writefis(a,'Pendul');
Prin urmare, a fost utilizat reprezentarea n forma indexat a bazei de
reguli, reprezentarea implicit. Primele dou coloane ale listei de mai sus sunt
asociate celor dou intrri ale sistemului, a treia coloan este asociat ieirii,
urmtoarea coloan indic gradul de importan a fiecrei reguli (cu valoarea
implicit 1), iar ultima coloan d tipul operatorului utilizat n concluzionare (n
acest caz este vorba despre operatorul I corespunztor mecanismului de inferen
MAX-MIN utilizat n cadrul exemplului).
Dac se dorete forma simbolic de reprezentare a aceleiai baze de reguli
(varianta 'symbolic'), se execut:
regIndex=1:1:9;
showrule(a,regIndex,symbolic,english)
i se obine:
(x1==P) & (x2==P) (u=PB) (1)
(x1==P) & (x2==Z) (u=P) (1)
18

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

(x1==P)
(x1==Z)
(x1==Z)
(x1==Z)
(x1==N)
(x1==N)
(x1==N)

&
&
&
&
&
&
&

(x2==N)
(x2==P)
(x2==Z)
(x2==N)
(x2==P)
(x2==Z)
(x2==N)

(u=Z) (1)
(u=P) (1)
(u=Z) (1)
(u=N) (1)
(u=Z) (1)
(u=N) (1)
(u=NB) (1)

4. Funcia Matlab utilizat pentru operaia de defuzzificare. Pentru


implementarea operaiei de defuzzificare din cadrul SIF n FLT-Matlab se dispune
de funcia defuzz cu urmtoarea sintax:
y = defuzz(x,fdap, tip),

(10.81)

n care:
x vectorul coloan al variabilei independente pe care este definit
variabila lingvistic (de ieire);
y valoarea ferm (scalar) obinut n urma defuzzificrii;
fdap vectorul coloan al valorilor f.d.ap. aferente variabilei lingvistice
supuse defuzzificrii (ieirea);
tip parametru prin care se specific metoda de defuzzificare aleas;
parametrul tip poate lua valorile:
- 'centroid' la utilizarea metodei centrului de greutate;
- 'mom' la utilizarea metodei maximelor mediate;
- 'som' la utilizarea metodei eantionului minim;
- 'lom' la utilizarea metodei eantionului maxim.
Parametrul tip poate lua i alte valori definite de utilizator. Valoarea sa va indica
numele funciei care efectueaz operaia de defuzzificare.
5. Funcii Matlab referitoare la variabilele de tip fis. Variabilele de tip
fis i fiierele de tip fis (cu extensia fis) au menirea de a caracteriza complet /
modifica proprietile sistemelor de inferen fuzzy. Pentru aceste fiiere sunt
disponibile apte funcii Matlab: getfis, newfis, plotfis, readfis, setfis, writefis.
a) Funcia getfis. Sintaxa funciei este urmtoarea:
out = getfis(fis),

(10.82)

iar efectul const n returnarea unei liste a proprietilor SIF definit prin varaibila
fis. O apelare de forma:
out = getfis(fis,'fisProp'),

(10.83)

returneaz valoarea curent a proprietilor, denumite 'fisProp'. O alt


modalitate de apelare a funciei getfis este:
19

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

out = getfis(fis, 'varTip', varIndex),

(10.84)

caz n care se returneaz o list a proprietilor variabilei lingvistice specificate prin


varTip i varIndex.
b) Funcia newfis. Sintaxa funciei este urmtoarea:
fis = newfis(fisNume).

(10.85)

Funcia creeaz implicit n spaiul de lucru Matlab o variabil fis corespunztoare


unui SIF de tip Mamdani cu numele fisNume. Dac funcia newfis se apeleaz
n forma:
fis = newfis(fisNume, fisTip),

(10.86)

atunci se creeaz o variabil fis corespunztoare unui SIF de tipul specificat prin
parametrul fisTip; acesta poate lua valorile 'Mamdani' respectiv 'Sugeno'
i va fi selectat n funcie de tipul SIF implementat.
c) Funcia plotfis. Are menirea de a reprezenta grafic caracteristica static a SIF
(n particular, RG-F). Apelarea funciei n forma:
(10.87)

plotfis(fismat)

afieaz caracteristica static a SIF asociat variabilei fismat aflate n spaiul de


lucru Matlab, eventual obinute dintrun fiier de tip fis, folosind funcia readfis.
d) Funcia readfis. Sintaxa funciei este dat de relaia (10.88):
fismat = readfis('fisNume').

(10.88)

Prin apelarea funciei, se creeaz n spaiul de lucru Matlab o variabil fismat


asociat fiierului de tip fis cu numele 'fisNume'. Variabila creat este
utilizabil ntro sesiune Matlab, informaia pierzndu-se la nchiderea sesiunii de
lucru.
e) Funcia setfis. n forma sa cea mai simpl, sintaxa acestei funcii este dat de
relaia:
fis2 = setfis(fis1, 'fisPropNume', nouPropVal).

(10.89)

Funcia genereaz o variabil de tip fis cu numele fis2. Variabila fis2


corespunde unui SIF cu proprieti identice SIF definit n prealabil n variabila
fis1, cu excepia proprietii avnd numele 'fisPropNume', care se seteaz la
valoarea nouPropVal. Trebuie remarcat c o apelare de forma (10.89) modific
proprietatea purtnd numele fisPropNume pentru toate variabilele lingvistice
aferente SIF.
O apelare n forma (10.90) a funciei setfis:
fis2 = setfis(fis1, 'varTip', varIndex, ...
20

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

'fisPropNume', nouPropVal)

(10.90)

genereaz o variabil fis2 care este identic variabilei iniiale fis1 cu excepia
proprietii cu numele 'varPopNume', care va lua valoarea nouPropVal
pentru variabila lingvistic specificat prin numele 'varTip' i indexul
varIndex.
O alt apelare a funciei setfis este de forma:
fis2=setfis(fis1,'varTip',varIndex,'fdap',fdapIndex,...
(10.91)
'fdapPropNume',nouPropVa),
i realizeaz doar modificarea proprietilor unui termen lingvistic specificat prin
numele 'fdap' i indexul fdapIndex, TL fiind asociat variabilei lingvistice de
tip 'varTip' i index varIndex.
f) Funcia showfis. Sintaxa acestei funcii este:
showfis(fismat).

(10.92)

Prin (10.92) se asigur afiarea unei versiuni text pentru SIF asociat varabilei
fismat.
g) Funcia writefis. Funcia se apeleaz sub forma:

(10.93)

writefis(fismat, 'fisNume')

i asigur salvarea pe harddisk a fiierului cu numele fisNume.fis n format fis


(nu este necesar specificarea extensiei), corespunztor variabilei fismat (aflate
n spaiul de lucru Matlab) asociate unui SIF.
h) Funcia evalfis. Aceast funcie servete calculului ieirii ferme elaborate de
SIF pentru un set dat de intrri ferme. Funcia evalfis poate fi utilizat n
testarea pas cu pas a funcionrii unui SIF (RG-F), eventual n depanarea unor erori
de programare i are sintaxa:
iesire=evalfis(intrare, fis1).

(10.94)

O astfel de apelare returneaz n variabila iesire valoarea ieirii elaborate de SIF


definit de variabila fis1, pentru valorile ferme ale VL de intrare specificate n
matricea / vectorul intrare.
6. Funcia Matlab utilizat pentru vizualizarea caracteristicii statice a
unui sistem de inferen fuzzy. n acest scop se utilizeaz funcia gensurf. Sunt
utilizate trei variante de sintax:
a) gensurf(fis1) vizualizeaz caracteristica static (CS) aferent SIF definit
anterior de variabila fis1. Se iau n considerare primele dou VL de intrare i
prima VL de ieire;
21

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

b) gensurf(fis1, intrari, iesire) are acelai efect, ns VL de


intrare (una sau dou) trebuie specificat / specificate n vectorul intrari, iar VL
de ieire trebuie specificat n scalarul iesire;
c) [x,y,z]=gensurf(fis1) sau
[x,y,z]= gensurf(fis1, intrari, iesire) returneaz valorile
variabilelor care definesc CS (numrul acestor variabile depinde de numrul VL de
intrare i ieire ale SIF), ns nu vizualizeaz CS.
7. Simularea comportrii sistemelor de conducere fuzzy utiliznd
mediul Simulink. Pentru simularea comportrii diverselor structuri de sisteme de
conducere fuzzy, n primul rnd este necesar construirea unui bloc Simulink [M7]
corespunztor RG-F. Comanda indicat este fuzblock. Comanda duce la
vizualizarea unei ferestre de blocuri Simulink: cteva blocuri cu f.d.ap. mpreun
cu cele dou blocuri care corespund RG-F:
- Fuzzy Logic Controller (RG-F propriu-zis);
- Fuzzy Logic Controller with Rule Viewer (RG-F mpreun cu vizualizarea
regulilor).
Blocurile pot fi apoi copiate n schema Simulink corespunztoare sistemului de
conducere fuzzy. Fcnd double-click pe unul din cele dou blocuri, se deschide o
fereastr de dialog n care se cere numele variabilei de tip fis aferente RG-F.
Aceast variabil trebuie s fie existent n spaiul de lucru Matlab sau s fie adus
cu funcia readfis (a se vedea i cazul funciei gensurf).
Observaii: 1. Se putea ajunge la prima fereastr i n alt mod, cutnd n
biblioteca de blocuri Simulink pe calea:
Library: simulink
Library: Blocksets_and_Toolboxes,
Simulink Fuzzy
(double-click de fiecare dat).
Rezult un efect similar utilizrii comenzii fuzblock.
2. Dac RG-F este multivariabil la intrare, atunci este necesar
introducerea unui multiplexor n amonte de RG-F n schema Simulink aferent
sistemului de conducere fuzzy.

10.2. Probleme propuse


1. Pentru exemplele 10.1-10.6 s se studieze efectele modificrilor
parametrilor funciilor Matlab asupra formei f.d.ap. considerate.
2. S se studiaze funciile Matlab disgmf, pimf, psigmf, smf i zmf n
aceeai manier ca la problema anterioar prin generarea unor secvene de program
Matlab corespunztoare.
22

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

3. Pentru exemplul 10.7 s se studieze efectele modificrilor parametrilor


funciilor Matlab asupra formei f.d.ap. aferente TL definii.
4. S se reia studiul exemplului 10.7 n sensul problemei anterioare
folosind:
f.d.ap. de sigmoid cele dou f.d.ap. aferente TL TFJ i TFI i
f.d.ap. de tip gaussian pentru ceilali trei TL ai VL Temperatura.
5. Pentru exemplele 10.9 i 10.10 s se studieze efectele modificrilor n
bazele de reguli.
6. S se execute urmtoarea secven de program Matlab pentru calculul
ieirii ferme a unui SIF:
x=0:0.1:1;
fdap1=trapmf(x,[0 0 10 30]);
y1=defuzz(x,fdap1,'centroid')
fdap2=trimf(x,[10 30 50]);
y2=defuzz(x,fdap2,'centroid')
S se comenteze rezultatele obinute,
7. Pentru problema anterioar s se studieze efectul modificrii metodei de
defuzzificare asupra valorii rezultatului (ieirii ferme). Spre exemplu, se execut
urmtoarea secven de program referitoare la selectarea altei metode de
defuzzificare aferente SIF avnd structura salvat n fiierul generic
fisier.fis:
c=readfis('fisier.fis')
c=setfis(c,'defuzzMethod,'mom');
writefis(c,'fisier.fis');
getfis(c)
Un efect similar se obine nlocuind a treia linie de program cu:
c.defuzzMethod='mom';
Observaie: Se poate proceda similar ultimelor linii de program Matlab i
n cazul modificrii oricrei alte proprieti a SIF, cu diferene inerente de la o
versiune a mediului Matlab la alta.
8. S se dezvolte i alte secvene de program care s permit studiul tuturor
metodelor de defuzzificare admise n Matlab.
9. S se calculeze valorile ferme ale ieirilor SIF din exemplelele 10.9 i
10.10. Spre exemplu, poate fi execuat urmtoarea secven de program Matlab:
a=readfis('Pendul');
evalfis([-2 1],a)
pause
evalfis([2 1],a)
23

Dezvoltarea asistat de calculator a sistemelor de inferen fuzzy n Matlab


(R.-E. Precup, UPT, 2015)

pause
b=readfis('fuzzif&inf&br');
iesire1=evalfis([15],b)
iesire2=evalfis([25],b)
S se efectueze calcule ale ieirilor ferme i pentru alte valori ferme ale intrrii /
intrrilor.
10. S se vizualizeze CS aferente SIF definite n exemplelele 10.9 i 10.10.
S se efectueze studiul efectelor modificrii parametrilor din:
modulul de fuzzificare,
modulul de inferen,
modulul de defuzzificare,
asupra CS aferente SIF. n acest sens se recomand utilizarea funciei gensurf.

10.3. Bibliografie
[G6] Galichet, S. i L. Foulloy: Fuzzy Controllers: Synthesis and Equivalences,
IEEE Transactions on Fuzzy Systems, vol. 3, no. 3, pp. 140-148, 1995.
[M1] MathWorks: Matlab the Language of Technical Computing, Using Matlab,
Version 5, The MathWorks Inc., Natick, MA, 1998.
[M6] MathWorks: Matlab Fuzzy Logic Toolbox, MathWorks Inc., Natick, MA,
1998.
[M7] MathWorks: Simulink Dynamic System Simulation for Matlab, Using
Simulink, Version 4, The MathWorks Inc., Natick, MA, 2000.
[P4] Preitl, St. i R.-E. Precup: Introducere n conducerea FUZZY a proceselor,
Editura Tehnic, Bucureti, 1997.
[P6] Precup, R.-E. i St. Preitl: Fuzzy Controllers, Editura Orizonturi Universitare,
Timioara, 1999.

24

S-ar putea să vă placă și