Capítulo de Sistemas de Control
IEEE-UNAC
2012-A
FUZZY SYSTEM DESIGNER DE 25 REGLAS EN CÓDIGO PURO EN MATLAB Para contrastar estas salidas singleton con algunas triángulo, y antes de implementar el código puro de 9 reglas en la plataforma Labview, se ha elaborado una base de 25 reglas para observar resultados en caso el usuario desee realizar algún tipo de aplicación con este sistema fuzzyficador. Existen también 2 entradas (x1 y x2) representadas cada una por 5 MF’s (3 triángulos y 2 trapecios) y un salida (u) representada representada por 5 MF’s triángulo. La diferencia notoria en este caso es que emplearemos posiciones dentro de un universo de discurso para determinar los valores de las entradas. Para fines de simulación empleamos un x1(k) = 10 y un x2(m) = 69.
clear all ; close all ; clc % -------------------------------------------------% ENTRADA 1 % -------------------------------------------------puntos_n = 101; x1=linspace(-1,1, puntos_n); param_in_1 = [ -2.00 -1.00 -0.50 -0.25 -0.50 -0.25 0.00 0.00 -0.25 0.00 0.25 0.00 0.00 0.25 0.50 0.00 0.25 0.50 1.00 2.00 ]; mf_in_1=zeros(5,puntos_n); mf_in_1(1,:)=trap_mf(x1,param_in_1(1,:)); mf_in_1(2,:)=trian_mf(x1,param_in_1(2,:)); mf_in_1(3,:)=trian_mf(x1,param_in_1(3,:)); mf_in_1(4,:)=trian_mf(x1,param_in_1(4,:)); mf_in_1(5,:)=trap_mf(x1,param_in_1(5,:)); % -------------------------------------------------% ENTRADA 2 % -------------------------------------------------x2=linspace(-1,1, puntos_n); param_in_2 = [ -2.00 -1.00 -0.50 -0.25 -0.50 -0.25 0.00 0.00 -0.25 0.00 0.25 0.00 0.00 0.25 0.50 0.00 0.25 0.50 1.00 2.00 ]; mf_in_2=zeros(5,puntos_n); mf_in_2(1,:)=trap_mf(x2,param_in_2(1,:)); mf_in_2(2,:)=trian_mf(x2,param_in_2(2,:)); mf_in_2(3,:)=trian_mf(x2,param_in_2(3,:)); mf_in_2(4,:)=trian_mf(x2,param_in_2(4,:)); mf_in_2(5,:)=trap_mf(x2,param_in_2(5,:));
Est. Edwing I. Flores Bustinza –
[email protected]
1
Capítulo de Sistemas de Control
IEEE-UNAC
2012-A
% -------------------------------------------------% SALIDA % -------------------------------------------------y=linspace(-1,1, puntos_n); param_out = [ -0.75 -0.50 -0.25 -0.50 -0.25 0.00 -0.25 0.00 0.25 0.00 0.25 0.50 0.25 0.50 0.75 ]; mf_out=zeros(5,puntos_n); mf_out(1,:)=trian_mf(y,param_out(1,:)); mf_out(2,:)=trian_mf(y,param_out(2,:)); mf_out(3,:)=trian_mf(y,param_out(3,:)); mf_out(4,:)=trian_mf(y,param_out(4,:)); mf_out(5,:)=trian_mf(y,param_out(5,:)); % -------------------------------------------------% PLOTEOS DE ENTRADA Y SALIDA % -------------------------------------------------figure(1) subplot(3,1,1) plot(x1,mf_in_1(1,:),'r','LineWidth',2),hold plot(x1,mf_in_1(2,:),'g','LineWidth',2) plot(x1,mf_in_1(3,:),'b','LineWidth',2) plot(x1,mf_in_1(4,:),'k','LineWidth',2) plot(x1,mf_in_1(5,:),'m','LineWidth',2) grid legend('NG','NP','Z','PP','PG') title('\fontsize{14} \color{blue} EROR') xlabel('\fontsize{5}\color{blue} UNIVERSO DE DISCURSO') ylabel('\fontsize{5}\color{blue} GRADO DE PERTENENCIA') axis([-1 1 0 1]) subplot(3,1,2) plot(x2,mf_in_2(1,:),'r','LineWidth',2),hold plot(x2,mf_in_2(2,:),'g','LineWidth',2) plot(x2,mf_in_2(3,:),'b','LineWidth',2) plot(x2,mf_in_2(4,:),'k','LineWidth',2) plot(x2,mf_in_2(5,:),'m','LineWidth',2) grid legend('NG','NP','Z','PP','PG') title('\fontsize{14} \color{blue} DERIVADA DEL ERROR') xlabel('\fontsize{5}\color{blue} UNIVERSO DE DISCURSO') ylabel('\fontsize{5}\color{blue} GRADO DE PERTENENCIA') axis([-1 1 0 1]) subplot(3,1,3) plot(y,mf_out(1,:),'r','LineWidth',2),hold plot(y,mf_out(2,:),'g','LineWidth',2) plot(y,mf_out(3,:),'b','LineWidth',2) plot(y,mf_out(4,:),'k','LineWidth',2) plot(y,mf_out(5,:),'m','LineWidth',2) grid legend('NG','NP','Z','PP','PG') Est. Edwing I. Flores Bustinza –
[email protected]
2
Capítulo de Sistemas de Control
IEEE-UNAC
2012-A
title('\fontsize{14} \color{blue} SALIDA') xlabel('\fontsize{5}\color{blue} UNIVERSO DE DISCURSO') ylabel('\fontsize{5}\color{blue} GRADO DE PERTENENCIA') axis([-1 1 0 1]) % -------------------------------------------------% ALGORITMO % -------------------------------------------------salida= zeros(size(x1),size(x2)); mf_calificada = zeros(5,puntos_n); conjunto_out = zeros(puntos_n,puntos_n); conjunto_salida = zeros(puntos_n,puntos_n,puntos_n); for i = 1:puntos_n, w1_1 w2_1 w3_1 w4_1 w5_1
= = = = =
trap_mf(x1(i), param_in_1(1,:)); trian_mf(x1(i), param_in_1(2,:)); trian_mf(x1(i), param_in_1(3,:)); trian_mf(x1(i), param_in_1(4,:)); trap_mf(x1(i), param_in_1(5,:));
for j= 1:puntos_n, w1_2 w2_2 w3_2 w4_2 w5_2
= = = = =
trap_mf(x2(j), param_in_2(1,:)); trian_mf(x2(j), param_in_2(2,:)); trian_mf(x2(j), param_in_2(3,:)); trian_mf(x2(j), param_in_2(4,:)); trap_mf(x2(j), param_in_2(5,:));
comp_1 = min(w1_1,w1_2); mf_calificada(1,:)=min(comp_1,mf_out(1,:)); comp_2 = min(w2_1,w1_2); mf_calificada(2,:)=min(comp_1,mf_out(1,:)); comp_3 = min(w3_1,w1_2); mf_calificada(3,:)=min(comp_3,mf_out(2,:)); comp_4 = min(w4_1,w1_2); mf_calificada(4,:)=min(comp_4,mf_out(2,:)); comp_5 = min(w5_1,w1_2); mf_calificada(5,:)=min(comp_5,mf_out(3,:)); comp_6 = min(w1_1,w2_2); mf_calificada(6,:)=min(comp_6,mf_out(1,:)); comp_7 = min(w2_1,w2_2); mf_calificada(7,:)=min(comp_7,mf_out(2,:)); comp_8 = min(w3_1,w2_2); mf_calificada(8,:)=min(comp_8,mf_out(2,:));
Est. Edwing I. Flores Bustinza –
[email protected]
3
Capítulo de Sistemas de Control
IEEE-UNAC
2012-A
comp_9 = min(w4_1,w2_2); mf_calificada(9,:)=min(comp_9,mf_out(3,:)); comp_10 = min(w5_1,w2_2); mf_calificada(10,:)=min(comp_10,mf_out(4,:)); comp_11 = min(w1_1,w3_2); mf_calificada(11,:)=min(comp_11,mf_out(2,:)); comp_12 = min(w2_1,w3_2); mf_calificada(12,:)=min(comp_12,mf_out(2,:)); comp_13 = min(w3_1,w3_2); mf_calificada(13,:)=min(comp_13,mf_out(3,:)); comp_14 = min(w4_1,w3_2); mf_calificada(14,:)=min(comp_14,mf_out(4,:)); comp_15 = min(w5_1,w3_2); mf_calificada(15,:)=min(comp_15,mf_out(4,:)); comp_16 = min(w1_1,w4_2); mf_calificada(16,:)=min(comp_16,mf_out(2,:)); comp_17 = min(w2_1,w4_2); mf_calificada(17,:)=min(comp_17,mf_out(3,:)); comp_18 = min(w3_1,w4_2); mf_calificada(18,:)=min(comp_18,mf_out(4,:)); comp_19 = min(w4_1,w4_2); mf_calificada(19,:)=min(comp_19,mf_out(4,:)); comp_20 = min(w5_1,w4_2); mf_calificada(20,:)=min(comp_20,mf_out(5,:)); comp_21 = min(w1_1,w5_2); mf_calificada(21,:)=min(comp_21,mf_out(3,:)); comp_22 = min(w2_1,w5_2); mf_calificada(22,:)=min(comp_22,mf_out(4,:)); comp_23 = min(w3_1,w5_2); mf_calificada(23,:)=min(comp_23,mf_out(4,:)); comp_24 = min(w4_1,w5_2); mf_calificada(24,:)=min(comp_24,mf_out(5,:)); comp_25 = min(w5_1,w5_2); mf_calificada(25,:)=min(comp_25,mf_out(5,:)); conjunto_out_mf = max (mf_calificada); conjunto_out(j,:)=max (mf_calificada);
% para ploteos
Est. Edwing I. Flores Bustinza –
[email protected]
4
Capítulo de Sistemas de Control
IEEE-UNAC
2012-A
conjunto_salida(:,:,i)=conjunto_out; % para ploteos salida(i,j)=defuzzy(y,conjunto_out_mf,1); end end k=input('Ingresa la posición del valor de la entrada 1 --> x1(k):'); disp(' ') m=input('Ingresa la posición del valor de la entrada 1 --> x2(m):'); disp(' ') disp('Valor de entrada 1 y 2:') disp([x1(k) x2(m)]) disp('Valor de salida:') disp(salida(k,m)) %% figure(2) subplot(2,1,1) plot(y,mf_out(1,:),'.m','LineWidth',1),hold plot(y,mf_out(2,:),'.g','LineWidth',1) plot(y,mf_out(3,:),'.b','LineWidth',1) plot(y,mf_out(4,:),'.k','LineWidth',1) plot(y,mf_out(5,:),'.y','LineWidth',1) plot([salida(k,m) salida(k,m)],[0 1],'r','LineWidth',5) title('\fontsize{14} \color{blue} SALIDA DEFUZZY 25 REGLAS') xlabel('\fontsize{7}\color{blue} UNIVERSO DE DISCURSO') ylabel('\fontsize{7}\color{blue} GRADO DE PERTENENCIA') grid axis([-1 1 0 1]) subplot(2,1,2) plot([salida(k,m) salida(k,m)],[0 1],'r','LineWidth',5),hold plot(y,conjunto_salida(m,:,k),'k','LineWidth',3) title('\fontsize{14} \color{blue} AREA RESULTANTE + CENTROIDE ') xlabel('\fontsize{7}\color{blue} UNIVERSO DE DISCURSO') ylabel('\fontsize{7}\color{blue} GRADO DE PERTENENCIA') grid axis([-1 1 0 1]) figure(3) [X,Y]=meshgrid(linspace(-100,100, puntos_n)); surfc(X,Y,salida) colormap hsv xlabel('\color{blue} Error (E)') ylabel('\color{blue} Derivada del Error (CE)') zlabel('\color{blue} Señal de Control (U)') title(['\fontsize{14} \color{blue} SUPERFICIE: E, CE, U'])
Entonces obtenemos los siguientes resultados luego de la simulación:
Est. Edwing I. Flores Bustinza –
[email protected]
5
Capítulo de Sistemas de Control
IEEE-UNAC
2012-A
Ingresa la posición del valor de la entrada 1 --> x 1(k):10 Ingresa la posición del valor de la entrada 1 --> x 2(m):69 Valor de entrada 1 y 2: -0.8200 0.3600 Valor de salida: -0.1368
EROR 1 NG A I C N E N E T R E P E D O D A R G
NP Z 0.5
PP PG
0 -1
-0.8
-0.6
-0.4
-0.2
0 UNIVERSODE
0.2
0.4
0.6
0.8
1
DISCURSO
DERIVADA DEL ERROR 1 NG A I C N E N E T R E P E D O D A R G
NP Z 0.5
PP PG
0 -1
-0.8
-0.6
-0.4
-0.2
0 UNIVERSODE
0.2
0.4
0.6
0.8
1
DISCURSO
SALIDA 1 NG A I C N E N E T R E P E D O D A R G
NP Z 0.5
PP PG
0 -1
-0.8
-0.6
-0.4
-0.2
0 UNIVERSODE
0.2
0.4
0.6
0.8
1
DISCURSO
Figura N° 1.- Entradas y Salida del fuzzyficador y defuzzificador de 25 Reglas SALIDA DEFUZZY 25 REGLAS 1
0.8 A I C N E N E T R E P E D O D A R G
0.6
0.4
0.2
0 -1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0.4
0.6
0.8
1
UNIVERSO DE DISCURSO
AREA RESULTANTE + CENTROIDE 1
0.8 A I C N E N E T R E P E D O D A R G
0.6
0.4
0.2
0 -1
-0.8
-0.6
-0.4
-0.2
0
0.2
UNIVERSO DE DISCURSO
Figura N° 2.- Respuesta Final del defuzzyficador
Est. Edwing I. Flores Bustinza –
[email protected]
6
Capítulo de Sistemas de Control
IEEE-UNAC
2012-A
SUPERFICIE: E, CE, U
0.6 0.4 0.2 ) U ( 0 l o r t n o C -0.2 e d l a ñ -0.4 e S
-0.6 -0.8 -1 100 80 60 40 20 0 -20 -40 -60 -80 -100 Derivada del Error (CE)
-100
-80
-60
-40
-20
0
20
40
60
80
100
Error (E)
Figura N° 3.- Superficie del E, CE y salida
Est. Edwing I. Flores Bustinza –
[email protected]
7