Sunteți pe pagina 1din 20

Ministerul Educației și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare, Informatică și Microelectronică
Departamentul Ingineria Software și Automatică

RAPORT
Lucrare de laborator nr.3
La Sisteme cu Inteligență Artificială

A efectuat: I.Miron
st.gr.AI-181

A verificat: S. Dubac
asist.univ.

Chișinău-2021
Tema: Introducere în Fuzzy Logic Toolbox

Obiectiv: Familiarizarea cu funcțiile și interfețele grafice din Fuzzy Logic Toolbox din
MATLAB/Simulink.

Sarcina:

1. Analizați și prezentați moduri de utilizare a funcțiilor de apartenență din MATLAB.


Descrieți parametrii fiecărei funcții de apartenență.
2. Pentru codul:

- Efectuați analiza codului.


- Schimbați diferite funcții de apartenență și vizualizați rezultate.
- Reprezentați grafic alte două tipuri de mulțimi fuzzy la alegere, considerând universul
discuției [-5, 8].
3. Considerați variabila lingvistică „Viteza”, cu universul discuției [0, 140] km/h. Definiți
trei valori lingvistice și reprezentați grafic cele trei mulțimi fuzzy corespunzătoare, pe
aceeași axă (folosind „hold on”), fiecare cu altă culoare. Care sunt gradele de apartenență
la fiecare mulțime a valorilor vitezei de 10 km/h, 52 km/h, 85 km/h și 100 km/h?
4. Reluați secvența următoare pentru a reprezenta grafic rezultatul reuniunii a două mulțimi
fuzzy:
- Schimbați diferite funcții de apartenență și vizualizați rezultate.
- Scrieți un script MATLAB pentru reprezentarea grafică a rezultatului operației de
intersecție a mulțimilor fuzzy A și B, utilizând operatorul „min”. Utilizând „Data Cursor”
din bara de instrumente marcați pe grafic gradele de apartenență pentru valorile x = 4, 5,
6, 7.
- Scrieți un script MATLAB pentru reprezentarea grafică a rezultatului operației de
complementare a mulțimii fuzzy A utilizând operația: uC ( x )=1−u A ( x).

Mersul lucrării:

1. Funcțiile de apartenență:

dsigmf – calculează valorile membrilor mulțimii fuzzy folosind diferența dintre două funcții de
tip sigmoid.
y = dsigmf(x, params) returnează valorile mulțimii fuzzy calculând diferența dintre două mulțimi
fuzzy de tip sigmoid. Fiecare funcție sigmoid este dată de formula:
1
f ( x ; ak , ck )= −ak (x−c k )
1+e
Pentru a specifica parametrii a, c pentru fiecare funcție sigmoid se utilizează params.
Valorile mulțimii sunt calculate pentru fiecare valoare de intrare x.
Exemplu
x = 0:0.1:10;
y = dsigmf(x,[5 2 5 7]);
plot(x,y)
xlabel('dsigmf, P = [5 2 5 7]')

Fig. 3.1. Rezultatul utilizării funcției dsigmf


gauss2mf – calculează valorile mulțimii fuzzy folosind o combinație de două funcții de tip
Gauss.
y = gauss2mf(x, params) returnează valorile mulțimilor fuzzy folosind o combinație de două
funcții de tip Gauss. Fiecare funcție gaussiană definește forma unei părți a funcției membru și
este dată de formula:
2
− ( x−c )
2

f ( x ; σ , c )=e
Pentru specificarea deviației standarde σ și media c pentru fiecare funcție gaussiană se utilizează
params.
Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
Exemplu
x = [0:0.1:10]';
y1 = gauss2mf(x,[2 4 1 8]);
y2 = gauss2mf(x,[2 5 1 7]);
y3 = gauss2mf(x,[2 6 1 6]);
y4 = gauss2mf(x,[2 7 1 5]);
y5 = gauss2mf(x,[2 8 1 4]);
plot(x,[y1 y2 y3 y4 y5])
Fig. 3.2. Rezultatul utilizării funcției gauss2mf
gaussmf – calculează valorile mulțimii fuzzy utilizând o funcție gaussiană. O funcție gaussiană
nu este aceeași precum ar fi distribuția Gauss. De exemplu, o funcție gaussiană are întotdeauna o
valoare maximă de 1.
y = gaussmf(x, params) returnează valorile mulțimii fuzzy folosind următoare funcție gaussiană:
2
− ( x−c )
2

f ( x ; σ , c )=e
Pentru specificarea deviației standarde σ și media c pentru fiecare funcție gaussiană se utilizează
params.
Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
Exemplu
x = 0:0.1:10;
y = gaussmf(x,[2 5]);
plot(x,y)
xlabel('gaussmf, P=[2 5]')
Fig. 3.3. Rezultatul utilizării funcției gaussmf
gbellmf – funcție de apartenență generalizată în formă de clopot. Această funcție calculează
valorile de apartenență fuzzy utilizând o funcție de apartenență generalizată în formă de clopot.

y = gbellmf(x, params) returnează valorile de apartenență fuzzy calculate folosind funcția de


apartenență generalizată în formă de clopot:

1
f ( x ; a , b , c )=
| |
2b
x−c
1+
a

Pentru specificarea funcției de apartenență se specifică valorile parametrilor a, b, c folosind


params.

Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.

Exemplu
x = 0:0.1:10;
y = gbellmf(x,[2 4 6]);
plot(x,y)
xlabel('gbellmf, P=[2 4 6]')
Fig. 3.4. Rezultatul utilizării funcției gbellmf
pimf – funcție de apartenență în formă de PI. Această funcție calculează valorile de apartenență
fuzzy utilizând o funcție de apartenență în formă de PI bazată pe spline.

y = pimf(x, params) returnează valorile mulțimii fuzzy calculate folosind o funcție de


apartenență în formă de PI bazată pe spline. Această funcție este produsul unei funcții smf și a
unei funcții zmf și este dată de formula:

{
0, x≤a

( )
2
x−a a+b
2 ,a≤ x≤
b−a 2

( )
2
x−b a+ b
1−2 , ≤ x≤b
b−a 2
f ( x ;a , b , c , d ) = 1,b≤x ≤c
1−2 ( )
x−c 2
d−c
,c≤ x≤
c+ d
2

( )
2
x−d c+ d
2 , ≤x ≤d
d−c 2
0, x≥d

Pentru specificarea parametrilor a,b,c, și d se utilizează params.


Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
Exemplu
x = 0:0.1:10;
y = pimf(x,[1 4 5 10]);
plot(x,y)
xlabel('pimf, P = [1 4 5 10]')
ylim([-0.05 1.05])

Fig. 3.5. Rezultatul utilizării funcției pimf


psigmf – calculează valorile de apartenență fuzzy utilizând produsul a două funcții de
apartenență sigmoid.
y = psigmf(x, params) returnează valorile de apartenență fuzzy calculate folosind produsul a
două funcții de apartenență sigmoid. Fiecare funcție sigmoid este dată de formula:

1
f ( x ;a k , c k ) = −ak (x−c k )
1+e

Pentru specificarea parametrilor a și c se utilizează params.


Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
x = 0:0.1:10;
y = psigmf(x,[2 3 -5 8]);
plot(x,y)
xlabel('psigmf, P = [2 3 -5 8]')
ylim([-0.05 1.05])
Fig. 3.6. Rezultatul utilizării funcției psigmf
smf – calculează valorile de apartenență fuzzy folosind o funcție de apartenență în formă de S
bazată pe spline.

y = smf(x, params) returnează valori de apartenență fuzzy calculate folosind funcția de


apartenență în formă de S bazată pe spline dată de formula:

Pentru specificarea parametrilor a și b se utilizează params.


Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
Exemplu
x = 0:0.1:10;
y = smf(x,[1 8]);
plot(x,y)
xlabel('smf, P = [1 8]')
ylim([-0.05 1.05])
Fig. 3.7. Rezultatul utilizării funcției smf
sigmf – calculează valorile de apartenență fuzzy folosind o funcție de apartenență sigmoid.

y = sigmf(x, params) returnează valorile de apartenență fuzzy calculate folosind funcția de


apartenență sigmoid dată de formula:

1
f ( x ;a k , c k ) = −ak (x−c k )
1+e

Pentru specificarea parametrilor a și c se utilizează params.


Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
Exemplu
x = 0:0.1:10;
y = sigmf(x,[2 4]);
plot(x,y)
xlabel('sigmf, P = [2 4]')
ylim([-0.05 1.05])

Fig. 3.8. Rezultatul utilizării funcției sigmf


trapmf – calculează valorile de apartenență fuzzy utilizând o funcție de apartenență trapezoidală.

y = trapmf(x, params) returnează valorile de apartenență fuzzy calculate folosind următoarea


funcție de apartenență trapezoidală:

Pentru specificarea parametrilor a, b, c și d se utilizează params.


Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
Exemplu
x = 0:0.1:10;
y = trapmf(x,[1 5 7 8]);
plot(x,y)
xlabel('trapmf, P = [1 5 7 8]')
ylim([-0.05 1.05])

Fig. 3.9. Rezultatul utilizării funcției trampf


trimf – calculează valorile de apartenență fuzzy folosind o funcție de apartenență triunghiulară.
y = trimf(x, params) returnează valorile de apartenență fuzzy calculate folosind următoarea
funcție de apartenență triunghiulară:

sau mai compact:


Pentru specificarea parametrilor a, b, c se utilizează params.
Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
Exemplu
x = 0:0.1:10;
y = trimf(x,[3 6 8]);
plot(x,y)
xlabel('trimf, P = [3 6 8]')
ylim([-0.05 1.05])

Fig. 3.10. Rezultatul utilizării funcției trimf


zmf – calculează valorile de apartenență fuzzy utilizând o funcție de apartenență în formă de Z
bazată pe spline.

y = zmf(x, params) returnează valori de apartenență fuzzy calculate folosind funcția de


apartenență în formă de Z bazată pe spline dată de formula:

Pentru specificarea parametrilor a, b se utilizează params.


Valorile mulțimii sunt calculate pentru fiecare valoarea de intrare x.
Exemplu
x = 0:0.1:10;
y = zmf(x,[3 7]);
plot(x,y)
xlabel('zmf, P = [3 7]')
ylim([-0.05 1.05])

Fig. 3.11. Rezultatul utilizării funcției zmf


2. În urma execuției codului în pachetul de programe MATLAB am obținut graficul prezentat
în fig.3.12.

Fig. 3.12. Rezultatul execuției codului

În acest cod au fost folosite două comenzi, prima trapmf pentru crearea funcției de
apartenență și apoi cu ajutorul evalmf (evaluarea a multiple funcții) a fost aflat gradul de
apartenență pentru un număr, care apoi la urmă a fost evidențiat cu punctul de intersecției primit.
Rezultatul se evidențiază în fig. 3.12, iar la modificarea codului s-au utilizat alte funcții de
apartenență, precum dsigmf, zmf și sigmf (fig. 3.13).

Fig. 3.13. Utilizarea diferitor funcții de apartenență


Pentru îndeplinirea condițiilor necesare trebuie să schimbăm universul discuției cu
ajutorul variabile X, în care se setează limitele și pasul necesar. Rezultatul se prezintă în fig.
3.14.
Fig. 3.14. Schimbarea universului discuției
3. Codul sursă:
x = (0:0.1:140); % Universul discutiei este [0,10], in care se
definescpuncte cu pasul de 0.1
params1=[18,60];
params2=[40,4,70];
params3=[80,122];
y1 = zmf(x,params1); % calculeaza valorile functiei de apartenenta
y2 = gbellmf(x,params2);
y3 = smf(x,params3);
plot(x, y1,'linewidth',2);hold on
plot(x, y2,'linewidth',2,'color','red');
plot(x, y3,'linewidth',2,'color','yellow');
axis([0 140 -0.1 1.1]);
legend('Viteza mica','Viteza medie','Viteza mare')
xlabel('universul discutiei'); % numele variabilei pe axa orizontala
ylabel ('grad de apartenenta'); % numnele variabilei pe axa verticala
set(gcf, 'name', 'Multime fuzzy pentru viteza', 'numbertitle', 'off');
%numele ferestrei
hold on
x1=10;
x2=52;
x3=85;
x4=100;

u11=evalmf(x1,params1,'zmf');
plot (x1,u11,'r*');
u12=evalmf(x1,params2,'gbellmf');
plot (x1,u12,'r*');
u13=evalmf(x1,params3,'smf');
plot (x1,u13,'r*');

disp(sprintf("Gradele de apartenenta a vitezei de 10 km/h sunt: \n Viteza


mica- %.2f ; \n Viteza medie- %.2f; \n Viteza mare- %.2f;",u11,u12,u13))
u21=evalmf(x2,params1,'zmf');
plot (x2,u21,'r*');
u22=evalmf(x2,params2,'gbellmf');
plot (x2,u22,'r*');
u23=evalmf(x2,params3,'smf');
plot (x2,u23,'r*');

disp(sprintf("\n Gradele de apartenenta a vitezei de 52 km/h sunt: \n


Viteza mica- %.2f ; \n Viteza medie- %.2f; \n Viteza mare-
%.2f;",u21,u22,u23))

u31=evalmf(x3,params1,'zmf');
plot (x3,u31,'r*');
u32=evalmf(x3,params2,'gbellmf');
plot (x3,u32,'r*');
u33=evalmf(x3,params3,'smf');
plot (x3,u33,'r*');

disp(sprintf("\n Gradele de apartenenta a vitezei de 85 km/h sunt: \n


Viteza mica- %.2f ; \n Viteza medie- %.2f; \n Viteza mare-
%.2f;",u31,u32,u33))

u41=evalmf(x4,params1,'zmf');
plot (x4,u41,'r*');
u42=evalmf(x4,params2,'gbellmf');
plot (x4,u42,'r*');
u43=evalmf(x4,params3,'smf');
plot (x4,u43,'r*');

disp(sprintf("\n Gradele de apartenenta a vitezei de 100 km/h sunt: \n


Viteza mica- %.2f ; \n Viteza medie- %.2f; \n Viteza mare-
%.2f;",u41,u42,u43))

hold off

La execuția codului avem următorul rezultat (fig. 3.15).


Fig. 3.15. Rezultatul execuției codului
>> lab3SAR3
Gradele de apartenenta a vitezei de 10 km/h sunt:
Viteza mica- 1.00 ;
Viteza medie- 0.04;
Viteza mare- 0.00;

Gradele de apartenenta a vitezei de 52 km/h sunt:


Viteza mica- 0.07 ;
Viteza medie- 1.00;
Viteza mare- 0.00;

Gradele de apartenenta a vitezei de 85 km/h sunt:


Viteza mica- 0.00 ;
Viteza medie- 1.00;
Viteza mare- 0.03;

Gradele de apartenenta a vitezei de 100 km/h sunt:


Viteza mica- 0.00 ;
Viteza medie- 0.91;
Viteza mare- 0.45;

4. Rulând codul din îndrumar obținem graficul reprezentat în fig. 3.16.


Fig. 3.16. Rezultatul execuției codului
Schimbăm operatorul „max” în „min” pentru a obține rezultatul intersecției mulțimilor fuzzy A
și B.

Fig. 3.17. Rezultatul intersecției mulțimilor fuzzy A și B


Utilizând „Data Cursor” din bara de instrumente marcăm pe grafic gradele de apartenență pentru
valorile x = 4 (fig. 3.18), 5 (fig. 3.19), 6 (fig. 3.20), 7 (fig. 3.21).
Fig. 3.18. Gradul de apartenență pentru valoarea x = 4

Fig. 3.19. Gradul de apartenență pentru valoarea x = 5

Fig. 3.20. Gradul de apartenență pentru valoarea x = 6

Fig. 3.21. Gradul de apartenență pentru valoarea x = 7


Pentru a efectua operația de complementare a mulțimii fuzzy A utilizând operația
uC ( x )=1−u A ( x), este necesar de a scădea 1 din mulțimea A și obținem rezultatul din fig. 3.22.
Fig. 3.22. Complementarea mulțimii fuzzy A

Concluzii:
În această lucrare de laborator am obținut cunoștințe cu privire la utilizarea funcțiilor și
interfețelor grafice din Fuzzy Logic Toolbox. Am reprezentat diferite funcții de apartenență,
multiple sau singura și am manipulat cu acestea în modul necesar. Am constatat diferite
modalități de reprezentare și utilizare a funcțiilor de apartenență și cu ușurință am efectuat
operații cu acestea.

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