sisteme de inferenta fuzzy matlab

24
Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab (R.-E. Precup, UPT, 2015) 1 Cap. 10. Dezvoltarea asistat ă de calculator a sistemelor de inferenţă fuzzy în Matlab Principial, pentru reprezentarea unei mul ţimi fuzzy prin intermediul func ţiei de apartenen ţă (f.d.ap.) pot fi utilizate următoarele explicit ări: parametric ă sub forma unei func ţii analitice aferente f.d.ap., grafic ă direct ă prin intermediul graficului f.d.ap. sau discret ă prin singleton-uri, în cazul mul ţimilor fuzzy cu universuri num ărabile sau discrete. În cele ce urmează se recurge la prima variant ă de explicitare, detalii privind celalte variante putând fi urm ărite în [P6], astfel că f.d.ap. utilizate pe larg în conducerea fuzzy au urm ătoarele expresii: - f.d.ap. de tip trapezoidal: δ < γ β < α δ > δ γ γ δ δ γ β β α α β α α < = μ  ,  , dacã , 0 ] , [ dacã ), /( ) ( ] , [ dacã , 1 ] , [ dacã ), /( ) ( dacã , 0 ) (  R  x  x  x  x  x  x  x  x  x F , (10.7) - f.d.ap. de tip triunghiular caracterizate prin particularizarea γ = β  în (10.7), - f.d.ap. de tip singleton:  R  x  x  x F   α = = μ  , rest în 0, dacã 1, ) ( , (10.8) - f.d.ap. de tip gaussian:  R  x e  x  x  x F  = μ  σ  , ) ( 2 2 2 / ) ( , (10.9) cu parametrii  x  - centrul şi 0 σ  - l ăţimea clopotului Gauss, - f.d.ap. de tip clopot generalizat:  R  x a  x  x  x  b F  + = μ  ), | / ) ( | 1 /( 1 ) ( 2 , (10.10) în care  x  este centrul iar parametrii 0 , 0  >  a b  definesc lăţ imea clopotului. Trebuie observat c ă parametrul α  asociat singleton-ului din rela ţia (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. Aplicaţii în Matlab În cadrul acestui subcapitol va fi prezentat pachetul de programe de logic ă fuzzy, Fuzzy Logic Toolbox [M6], utilizat pentru implementarea în cadrul

Upload: luca-gabriela-ecaterina

Post on 05-Jul-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 1/24

Page 2: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 2/24

Page 3: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 3/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

3

a) F.d.ap. de tip triunghiular, caracterizate prin particularizarea γ=β  în (10.7).Sintaxa pentru funcţia Matlab care permite definirea unei f.d.ap. de tip triunghiulareste următoarea:

y = trimf(x, param), (10.56)

în care:x  – vectorul coloană  al mulţimii de bază  pe care se defineşte f.d.ap., deforma x = (xmin: Δx: xmax)  ', xmin,max  – marginea inferioar ă respectiv superioar ă  a domeniului, Δx  – pasul de explorare / calcul alvalorilor f.d.ap. pe domeniul de bază (univers);y – vectorul coloană al valorilor f.d.ap.;param – vectorul linie al parametrilor corespunzători TL (f.d.ap.):

param = [α β γ].  (10.57)

Observaţie: Pe parcursul întregului subcpaitol, pentru vectorii x  şi y  se păstrează aceeaşi semnificaţie.

Exemplul 10.1: Următoarea secvenţă  de program scris în Matlabgenerează o f.d.ap. de tip triunghiular:x=(0:0.2:10)';

y=trimf(x,[3 4 5]);

plot(x,y)

Graficul funcţiei de apartenenţă generate este prezentat în fig. 10.8.

Fig. 10.8. F.d.ap. obţinută ca rezultat al exemplului 10.1.

Page 4: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 4/24

Page 5: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 5/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

5

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. obţinută ca rezultat al exemplului 10.3.

d) F.d.ap. de tip curbă Gauss asimetrică sau de tip combinaţie de două curbe

Gauss. Expresia analitică este prezentată pe două cazuri în cele ce urmează.•  cazul 1: a1 < a2:

⎪⎪⎪

⎪⎪⎪

>>

−−

−−

0,,,

],(,1

,

)(

2122

)(

21

12

)(

22

22

21

21

bba xe

aa x

a xe

 x

b

a x

b

a x

, (10.62)

•  cazul 2: a1 ≥ a2:

Page 6: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 6/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

6

⎪⎪⎩

⎪⎪⎨

>

≤=μ

−−

−−

c xe

c xe x

b

a x

b

a x

,

,)(

22

22

21

21

2

)(

2

)(

, (10.63)

unde parametrul c ∈  (a1, a2) este obţinut din condiţia de continuitate a funcţiei μ din (10.63):

21

22

22

21 )()(   bacbac   −=− . (10.64)

F.d.ap. obţinută  în acest al doilea caz este subnormală. Sintaxa unei f.d.ap. de tipcurbă Gauss asimetrică este:

y = gauss2mf(x, param), (10.65)în care:

param = [b1 a1 b2 a2].  (10.66)

Exemplul 10.4: Secvenţa 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 relaţia (10.10).Sintaxa funcţiei Matlab corespunzătoare acestei f.d.ap. este:

y = gbellmf(x, param), (10.67)

în care:

param = [a b  x ]. (10.68)

Exemplul 10.5: Se execută următoarea 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.

Page 7: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 7/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

7

 Fig. 10.11. F.d.ap. obţinute ca rezultat al exemplului 10.4.

Fig. 10.12. F.d.ap. obţinute ca rezultat al exemplului 10.5.

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

Page 8: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 8/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

8

)(1

1)(

c xae x

−−+=μ , (10.69)

care pentru a > 0 asigur ă o f.d.ap. este deschisă către dreapta, iar pentru a < 0 cătrestânga. Sintaxa funcţiei Matlab aferente este:

y = sigmf(x, param), (10.70)

în care:

param = [a c]. (10.71)

Exemplul 10.6: Se rulează secvenţa 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. obţinute ca rezultat al exemplului 10.6.

FLT-Matlab asigur ă definirea / generarea şi a altor tipuri de f.d.ap. utilizatemai rar în practica modelării sistemelor dinamice şi conducerii sistemelor, prezentate mai jos împreună cu funcţiile Matlab care le generează:

diferenţa a două f.d.ap. de tip sigmoid: disgmf,- 

f.d.ap. de tip spline de formă ”π”: pimf,

Page 9: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 9/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

9

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 aplicaţie, propriile forme def.d.ap.

2. Funcţii Matlab utilizate pentru fuzzificarea informaţiei ferme.Principalele funcţii Matlab care se utilizează în acest scop sunt descrise în cele ceurmează.a) Funcţia addvar. Sintaxa funcţiei este următoarea:

fis2 = addvar(fis1, varTip, 'varNume', varDom). (10.72)

Funcţia adaugă o variabilă  lingvistică de tipul specificat prin parametrul varTip 

sistemului de inferenţă fuzzy definit în prealabil de variabila fis1 aflată în spaţiulde lucru Matlab. Rezultatul apelării îl constituie SIF definit de variabila fis2.Ceilalţi parametri din relaţia (10.72) au următoarea semnificaţie:

varNume – defineşte numele VL;varDom – defineşte domeniul VL;varTip – poate lua două valori:

'input'  – pentru VL de intrare,'output'  – pentru VL de ieşire.

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 aVL de ieşire se face separat.b) Funcţia rmvar. Sintaxa funcţiei este dată de relaţia (10.73):

fis2 = rmvar(fis1, varTip, varIndex). (10.73)Efectul apelării funcţiei constă în ştergerea variabilei lingvistice de tip varTip şiindex (număr) varIndex din SIF definit în prealabil de variabila fis1 în spaţiulde lucru Matlab. Rezultă SIF definit de noua variabilă, fis2.c) Funcţia addmf . Sintaxa funcţiei addmf este următoarea:

fis2 = addmf(fis1, varTip, varIndex, ...

'fdapNume', 'fdapTip', fdapParam). (10.74)

Funcţia adaugă  un nou TL variabilei lingvistice nominalizate prin parametriivarTip  şi varIndex. Ceilalţi parametri din relaţia (10.74) au următoareasemnificaţie:

fdapNume – reprezintă numele TL definit;fdapTip  – reprezintă  tipul TL definit, adică  una din tipurile de funcţii prezentate în paragraful anterior;

Page 10: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 10/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

10

  fdapParam  – reprezintă  parametrii specifici f.d.ap. specificate prinfdapTip.

d) Funcţia rmmf . Sintaxa funcţiei este:

fis2 = rmmf(fis1, varTip, varIndex, ...

'termNume', termIndex). (10.75)

Efectul apelării acestei funcţii constă  în ştergerea TL specificat prin numeletermNume  şi indexul termIndex  din cadrul VL specificate prin varTip  şivarIndex.e) Funcţia plotmf . Apelând această funcţie Matlab vor fi afişate f.d.ap. ale tuturorTL aferenţi VL cu tipul varTip  şi indexul varIndex  din variabila fis1 definită  în prealabil şi adusă  în spaţiul de lucru Matlab. Sintaxa funcţiei este

următoarea:plotmf(fis1, varTip, varIndex). (10.76)

Exemplul 10.7: Pentru ilustrarea utilizării funcţiilor enumerate, seconsider ă  modulul de defuzzificare al unui RG-F a temperaturii, care admite caintrare semnalul “temperatur ă” căreia i se asociază  VL “Temperatur ă” şi pentrucare se definesc 5 TL.

În cele ce urmează este prezentat programul sursă Matlab care generează cei 5 TL denumiţi {TFJ, TJ, TM, TI, TFI} asociaşi 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 rulării acestui fişier din linia de comandă Matlab este prezentat în fig.10.14 sub forma graficelor f.d.ap. aferente tuturor TL definiţi.

Page 11: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 11/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

11

 Fig. 10.14. F.d.ap. obţinute ca rezultat al exemplului 10.7.

Funcţia newfis  utilizată  în program va fi prezentată  şi studiată  în cele ceurmează.

3. Funcţii Matlab utilizate pentru definirea bazei de reguli. FLT-Matlab admite trei funcţii pentru definirea bazei de reguli a unui SIF, şi anume[M6]: funcţia addrule, funcţia showrule şi funcţia parsrule. Se precizează  că  este

vorba despre SIF de tip Mamdani cu mecanismul de inferenţă

 MAX-MIN.a) Funcţia addrule. Sintaxa acestei funcţii este:

fis2 = addrule(fis1, regLista). (10.77)

Prin apelarea funcţiei addrule se adaugă / completează regulile fuzzy definite în parametrul regLista  aferent SIF definit în prealabil de variabila fis1  dinspaţiul de lucru Matlab. Ca rezultat se obţine SIF definit de variabila fis2.

Parametrul regLista poate fi o listă conţinând una sau mai multe linii,fiecare linie reprezentând câte o regulă  fuzzy. Formatul parametrului regLista este specific SIF pentru care se definesc aceste reguli. Dacă SIF are m intr ări şi nieşiri, atunci regLista  trebuie să  aibă  (m+n+2) coloane; primele m coloane serefer ă  la cele m intr ări, următoarele n coloane se refer ă  la cele n ieşiri, coloana(n+m+1) se refer ă  la importanţa fiecărei reguli, care poate fi 0 sau 1, valoarea 0

semnifică  “regulă  f ăr ă  nici o importanţă”, iar valoarea 1 semnifică  “regulă importantă” (în general, pentru regulile definite se va utiliza valoarea 1); coloana(n+m+2) conţine valorile 1 sau 2 după cum operatorul utilizat în concluzionare este

Page 12: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 12/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

12

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 afişare a regulilor descris anterior, 'indexed', estecel 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 ieşire conformmodulului de fuzzificare şi bazei de reguli.

Exemplul 10.8: Se consider ă  un SIF cu două  VL de intrare {i1,i2} (TLaferenţi sunt notaţi cu TL j, j=1,2,…) şi o VL de ieşire, u (TL aferenţi sunt notaţi cuTLk , k = 1, 2, …). Se consider ă că baza de reguli este exprimată astfel:R 1: DACĂ i1=TL1 ŞI i2=TL1 ATUNCI u=TL3 

SAUR 2: DACĂ i1=TL1 ŞI i2=TL2 ATUNCI u=TL4 

SAUR 3: DACĂ i1=TL2 ŞI i2=TL1 ATUNCI u=TL2 

SAUR 4: DACĂ i1=TL2 ŞI i2=TL2 ATUNCI u=TL1 .O astfel de bază  se reguli se poate introduce în format 'indexed' sub formaurmătoarei secvenţe 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) Funcţia showrule. Sintaxa funcţiei este dată de relaţia:

showrule(fis1, regIndex, regFormat, limba), (10.78)iar efectul apelării sale constă în afişarea regulilor din baza de reguli (definită prinaddrule) cu indexul regIndex aferent regulatorului fuzzy definit anterior (în spaţiulde lucru Matlab) de variabila fis1. Parametrul regFormat reprezintă formatulîn care se doreşte afişarea regulilor; valorile posibile pentru acest parametru sunt:

- 'verbose' – prin care se afişează regulile în limbaj natural în engleză (de exemplu, IF (...) THEN (...)),- 'indexed' – prin care se afişează regulile în format indexat (întrucâtvaasemănător unei tabele de adevăr), acesta fiind formatul implicit,- 'symbolic'  – prin care se afişează  regulile în format simbolic (deexemplu, (x1=P) & (x2=P) ==> u = PB (1)).

Parametrul limba se refer ă la limba în care se doreşte afişarea regulilor – engleză,

franceză sau germană – în cazul utilizării limbajului natural şi poate lua valorile:'english', 'francais'  respectiv 'deutsch'. Cuvintele-cheie pentrulimba = 'english' sunt următoarele: IF, THEN, IS, AND, OR şi NOT.

Page 13: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 13/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

13

c) Funcţia parsrule. Sintaxa funcţiei parsrule este de forma:

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

Funcţia parsrule adăugă  la variabila fis1  (care este un SIF, în particular RG-F) baza de reguli dată  în regLista  în formatul specificat de regFormat  şi înlimba specificată de limba. Prin urmare, funcţia parsrule este o variantă flexibilă a funcţiei addrule.

În cazul în care fis2 = fis1, rezultă aceeaşi variabilă fis1 care, faşă de cel existent înainte de apelarea funcţiei parsrule, conţine ş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 utlizării funcţiilor addrule, showrule

şi parsrule se continuă  exemplul 10.7 referitor la un SIF utilizat ca RG-F de tipMamdani în reglarea temperaturii (admite o VL de intrare, “Temperatura”, T).Pentru aceasta, se consider ă  VL de ieşire “comanda” u, cu cei 5 TL denumi ţi{CVS, CS, CM, CB, CVB} şi având f.d.ap. conform fig.10.15.

Fig. 10.15. F.d.ap. aferente VL de ieşire din exemplul 10.9.

Pentru inferenţă este utilizat mecanismul de inferenţă MAX-MIN asistat de tabelulde decizie din tabelul 10.2 (baza de reguli este formată din 5 reguli).

Page 14: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 14/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

14

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

T TFJ TJ TM TI TFI

u CVB CB CM CS CVS

Programul Matlab care permite implementarea SIF este următorul: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')

pauseshowrule(b,regIndex,'verbose','english')

Page 15: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 15/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

15

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 utilizării funcţiilor până  aiciintroduse, va fi implementat în Matlab SIF sub forma unui RG-F care conducesistemul “pendul invers” descris în variantă  simplificată  în [P4] şi [P6]. SIF are

două VL de intrare, poziţia unghiular ă x1 şi viteza unghiular ă x2, şi o VL de ieşire,comanda u. Pentru poziţia 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 intrareax1 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 pentruintrarea x2 se acceptă sub forma intervalului [–6;6]. Variabilei lingvistice de ieşire,comanda u, i se asociază şapte TL (NVB, NB, N, Z, P, PB, PVB); formele f.d.ap. şidomeniul de bază / universul discursului sunt prezentate în fig. 10.18.

Page 16: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 16/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

16

 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.

Page 17: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 17/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

17

 Fig. 10.18. F.d.ap. aferente VL de ieşire u din exemplul 10.10.

Semnificaţia termenilor lingvistici prezentaţi anterior este cea frecvent utilizată.Baza de reguli pentru RG-F va fi alcătuită  din nouă  reguli prezentate sintetic întabelul 10.3.

Tabelul 10.3. Tabelul de decizie aferent SIF din exemplul 10.10.

x1\ x2 P Z N

Cod

regulă 

P PB P Z R 1+

Z P Z N R 2+

 N Z N NB R 3+

Codregulă  R -1 R -2 R -3

Remarcă: Se observă că baza de reguli nu apelează sub nici o formă TLPVB şi NVB. Aceşti termeni lingvistici au fost introduşi doar pentru a elimina problemele de capăt care ar apare la defuzzificare prin metoda centrului de greutate

[P4]. Programul Matlab care permite implementarea SIF este următorul:a=newfis('Pendul');

Page 18: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 18/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

18

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 dereguli, reprezentarea implicită. Primele două  coloane ale listei de mai sus suntasociate celor două  intr ări ale sistemului, a treia coloană  este asociată  ieşirii,următoarea coloană  indică  gradul de importanţă  a fiecărei reguli (cu valoareaimplicită  1), iar ultima coloană  dă  tipul operatorului utilizat în concluzionare (înacest caz este vorba despre operatorul ŞI corespunzător mecanismului de inferenţă MAX-MIN utilizat în cadrul exemplului).

Dacă se doreşte forma simbolică de reprezentare a aceleiaşi baze de reguli(varianta 'symbolic'), se execută:regIndex=1:1:9;

showrule(a,regIndex,’symbolic’,’english’)

şi se obţine:(x1==P) & (x2==P) ⇒ (u=PB) (1)

(x1==P) & (x2==Z) ⇒ (u=P) (1)

Page 19: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 19/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

19

(x1==P) & (x2==N) ⇒ (u=Z) (1)

(x1==Z) & (x2==P) ⇒ (u=P) (1)

(x1==Z) & (x2==Z) ⇒ (u=Z) (1)

(x1==Z) & (x2==N) ⇒ (u=N) (1)

(x1==N) & (x2==P) ⇒ (u=Z) (1)

(x1==N) & (x2==Z) ⇒ (u=N) (1)

(x1==N) & (x2==N) ⇒ (u=NB) (1)

4. Funcţia Matlab utilizată  pentru operaţia de defuzzificare. Pentruimplementarea operaţiei de defuzzificare din cadrul SIF în FLT-Matlab se dispunede funcţia defuzz cu următoarea sintaxă: 

y = defuzz(x,fdap, tip), (10.81)în care:

x  – vectorul coloană  al variabilei independente pe care este definită variabila lingvistică (de ieşire);y – valoarea fermă (scalar ă) obţinută în urma defuzzificării;fdap – vectorul coloană al valorilor f.d.ap. aferente variabilei lingvisticesupuse defuzzificării (ieşirea);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 eşantionului minim;

-'lom'

 – la utilizarea metodei eşantionului maxim.Parametrul tip poate lua şi alte valori definite de utilizator. Valoarea sa va indica

numele funcţiei care efectuează operaţia de defuzzificare.

5. Funcţii Matlab referitoare la variabilele de tip fis. Variabilele de tip fis  şi fişierele de tip  fis  (cu extensia fis) au menirea de a caracteriza complet /modifica proprietăţile sistemelor de inferenţă  fuzzy. Pentru aceste fişiere suntdisponibile şapte funcţii Matlab: getfis, newfis, plotfis, readfis, setfis, writefis. 

a) Funcţia getfis. Sintaxa funcţiei este următoarea:

out = getfis(fis), (10.82)

iar efectul constă în returnarea unei liste a proprietăţilor SIF definit prin varaibilafis. O apelare de forma:

out = getfis(fis,'fisProp'), (10.83)

returnează  valoarea curentă  a proprietăţilor, denumite 'fisProp'. O altă modalitate de apelare a funcţiei getfis este:

Page 20: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 20/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

20

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

caz în care se returnează o listă a proprietăţilor variabilei lingvistice specificate prinvarTip şi varIndex.

b) Funcţia newfis. Sintaxa funcţiei este următoarea:

fis = newfis(fisNume). (10.85)

Funcţia creează implicit în spaţiul de lucru Matlab o variabilă fis corespunzătoareunui SIF de tip Mamdani cu numele fisNume. Dacă funcţia newfis se apelează în forma:

fis = newfis(fisNume, fisTip), (10.86)

atunci se creează o variabilă fis corespunzătoare unui SIF de tipul specificat prin parametrul fisTip; acesta poate lua valorile 'Mamdani' respectiv 'Sugeno' şi va fi selectat în funcţie de tipul SIF implementat.

c) Funcţia plotfis. Are menirea de a reprezenta grafic caracteristica statică a SIF(în particular, RG-F). Apelarea funcţiei în forma:

plotfis(fismat)  (10.87)

afişează caracteristica statică a SIF asociat variabilei fismat aflate în spaţiul delucru Matlab, eventual obţinute dintrun fişier de tip fis, folosind funcţia readfis.

d) Funcţia readfis. Sintaxa funcţiei este dată de relaţia (10.88):

fismat = readfis('fisNume'). (10.88)

Prin apelarea funcţiei, se creează  în spaţiul de lucru Matlab o variabilă fismat 

asociată  fişierului de tip  fis  cu numele 'fisNume'. Variabila creată  esteutilizabilă  întro sesiune Matlab, informaţia pierzându-se la închiderea sesiunii delucru.

e) Funcţia setfis. În forma sa cea mai simplă, sintaxa acestei funcţii este dată derelaţia:

fis2 = setfis(fis1, 'fisPropNume', nouPropVal). (10.89)

Funcţia generează  o variabilă  de tip  fis  cu numele fis2. Variabila fis2 corespunde unui SIF cu proprietăţi identice SIF definit în prealabil în variabilafis1, cu excepţia proprietăţii având numele 'fisPropNume', care se setează lavaloarea nouPropVal. Trebuie remarcat că o apelare de forma (10.89) modifică  proprietatea purtând numele fisPropNume  pentru toate variabilele lingvisticeaferente SIF.

O apelare în forma (10.90) a funcţiei setfis:fis2 = setfis(fis1, 'varTip', varIndex, ...

Page 21: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 21/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

21

  'fisPropNume', nouPropVal)  (10.90)

generează o variabilă fis2 care este identică variabilei iniţiale fis1 cu excepţia proprietăţii cu numele 'varPopNume', care va lua valoarea nouPropVal  pentru variabila lingvistică  specificată  prin numele 'varTip'  şi indexulvarIndex.

O altă apelare a funcţiei setfis este de forma:

fis2=setfis(fis1,'varTip',varIndex,'fdap',fdapIndex,...

'fdapPropNume',nouPropVa), (10.91)

şi realizează doar modificarea proprietăţilor unui termen lingvistic specificat prinnumele 'fdap' şi indexul fdapIndex, TL fiind asociat variabilei lingvistice de

tip 'varTip' şi index varIndex.f) Funcţia showfis. Sintaxa acestei funcţii este:

showfis(fismat). (10.92)

Prin (10.92) se asigur ă  afişarea unei versiuni text pentru SIF asociat varabileifismat.

g) Funcţia writefis. Funcţia se apelează sub forma:

writefis(fismat, 'fisNume')  (10.93)

şi asigur ă salvarea pe harddisk a fişierului cu numele fisNume.fis în format  fis (nu este necesar ă specificarea extensiei), corespunzător variabilei fismat (aflateîn spaţiul de lucru Matlab) asociate unui SIF.

h) Funcţia evalfis. Această  funcţie serveşte calculului ieşirii ferme elaborate de

SIF pentru un set dat de intr ări ferme. Funcţia evalfis  poate fi utilizată  întestarea pas cu pas a funcţionării unui SIF (RG-F), eventual în depanarea unor eroride programare şi are sintaxa:

iesire=evalfis(intrare, fis1). (10.94)

O astfel de apelare returnează în variabila iesire valoarea ieşirii elaborate de SIFdefinit de variabila fis1, pentru valorile ferme ale VL de intrare specificate înmatricea / vectorul intrare.

6. Funcţia Matlab utilizată pentru vizualizarea caracteristicii statice a

unui sistem de inferenţă fuzzy. În acest scop se utilizează funcţia gensurf. Suntutilizate 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 ieşire;

Page 22: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 22/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

22

b) gensurf(fis1, intrari, iesire)  – are acelaşi efect, însă  VL deintrare (una sau două) trebuie specificată / specificate în vectorul intrari, iar VLde ieşire 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 (numărul acestor variabile depinde de numărul VL deintrare şi ieşire ale SIF), însă nu vizualizează CS.

7. Simularea comportării sistemelor de conducere fuzzy utilizândmediul Simulink . Pentru simularea comportării diverselor structuri de sisteme deconducere fuzzy, în primul rând este necesar ă construirea unui bloc Simulink [M7]corespunzător RG-F. Comanda indicată  este fuzblock. Comanda duce la

vizualizarea unei ferestre de blocuri Simulink: câteva 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 vizualizarearegulilor).

Blocurile pot fi apoi copiate în schema Simulink corespunzătoare sistemului deconducere fuzzy. Făcând double-click pe unul din cele două blocuri, se deschide ofereastr ă  de dialog în care se cere numele variabilei de tip  fis  aferente RG-F.Această variabilă trebuie să fie existentă în spaţiul de lucru Matlab sau să fie adusă cu funcţia readfis (a se vedea şi cazul funcţiei gensurf).

Observa ţ ii : 1. Se putea ajunge la prima fereastr ă şi în alt mod, căutând în biblioteca de blocuri Simulink pe calea:

Library: simulink

Library: Blocksets_and_Toolboxes,Simulink Fuzzy(double-click de fiecare dată).

Rezultă un efect similar utilizării 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 modificărilor parametrilor funcţiilor Matlab asupra formei f.d.ap. considerate.

2. Să  se studiaze funcţiile Matlab disgmf, pimf, psigmf, smf şi zmf în

aceeaşi manier ă ca la problema anterioar ă prin generarea unor secvenţe de programMatlab corespunzătoare.

Page 23: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 23/24

Page 24: Sisteme de Inferenta Fuzzy Matlab

8/15/2019 Sisteme de Inferenta Fuzzy Matlab

http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 24/24

Dezvoltarea asistată de calculator a sistemelor de inferenţă fuzzy în Matlab

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

24

pause

b=readfis('fuzzif&inf&br');

iesire1=evalfis([15],b)

iesire2=evalfis([25],b)

Să se efectueze calcule ale ieşirilor ferme şi pentru alte valori ferme ale intr ării /intr ărilor.

10. Să se vizualizeze CS aferente SIF definite în exemplelele 10.9 şi 10.10.Să se efectueze studiul efectelor modificării parametrilor din:

•  modulul de fuzzificare,• 

modulul de inferenţă,•  modulul de defuzzificare,

asupra CS aferente SIF. În acest sens se recomandă utilizarea funcţiei 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, UsingSimulink, Version 4, The MathWorks Inc., Natick, MA, 2000.

[P4] Preitl, St. şi R.-E. Precup: Introducere în conducerea FUZZY a proceselor,Editura Tehnică, Bucureşti, 1997.

[P6] Precup, R.-E. şi St. Preitl: Fuzzy Controllers, Editura Orizonturi Universitare,Timişoara, 1999.