8/15/2019 Sisteme de Inferenta Fuzzy Matlab
http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 1/24
8/15/2019 Sisteme de Inferenta Fuzzy Matlab
http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 2/24
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.
8/15/2019 Sisteme de Inferenta Fuzzy Matlab
http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 4/24
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:
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.
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ă:
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,
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;
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.
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
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.
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).
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')
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.
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.
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');
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)
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:
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, ...
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;
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.
8/15/2019 Sisteme de Inferenta Fuzzy Matlab
http://slidepdf.com/reader/full/sisteme-de-inferenta-fuzzy-matlab 23/24
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.