Vous êtes sur la page 1sur 11

FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA

CURSO: Control Inteligente

PROFESOR: Ing. Ricardo Rodrguez Bustinza

TEMA: Resolucin prctica N2 de Control Inteligente

ALUMNOS:

2016
SENSA TERMICO
Considerando variable lingstica para la temperatura:

frio
fresco
clido
caliente

Tambin consideramos 3 conjuntos difusos velocidad del viento

bajo
suave
alto

Se ha identificado tambin la salida como variable lingstica


sensacin

severa
fuerte
soportable
leve
imperceptible

Solucin:

I. FUNCIN TRAPEZOIDAL

function y = trap_mf (x, params)

a = params(1);
b = params(2);
c = params(3);
d = params(4);

b_minus_a = b - a;
d_minus_c = d - c;

y_val = @(x_val) max (0, min (min (1, (x_val - a) / b_minus_a), ...
(d - x_val) / d_minus_c));
y = arrayfun (y_val, x);
end

1
II. FUNCION TRIANGULAR

function y = tri_mf(x,param)
a=param(1);
b=param(2);
c=param(3);
y=max(min((x-a)/(b-a),(c-x)/(c-b)),0);
end

III. PROGRAMACION

clear; close all; clc

%---------------------------ENTRADAS----------------------------------
--
% CREANDO UN NEWFIS PARA LA VARIABLE LINGUISTICA "TEMPERATURA"
a=newfis('sensa_termico','mamdani');
%distancia (entrada)
a=addvar(a,'input','TEMPERATURA[C]',[-5,35]);
a=addmf(a,'input',1,'Fria','trapmf',[-5 -5 0 10]);
a=addmf(a,'input',1,'Fresca','trimf',[0 10 20]);
a=addmf(a,'input',1,'calida','trimf',[10 20 30]);
a=addmf(a,'input',1,'Caliente','trapmf',[20 30 35 35]);

% CREANDO UN NEWFIS LA VARIABLE LINGUISTICA "VELOCIDAD VIENTO"

a=addvar(a,'input','Velocidad Viento [Nudos]',[0,30]);


a=addmf(a,'input',2,'BAJO','trapmf',[0 0 5 17.5]);
a=addmf(a,'input',2,'SUAVE','trimf',[2.5 15 27.5]);
a=addmf(a,'input',2,'ALTA','trapmf',[12.5 25 30 30]);

%---------------------------------------------------------------------
---

%---------------------------SALIDA------------------------------------
---

% CREADNO UN NEWFIS PARA LA VARIABLE SALIDA "SENSACIN"

a=addvar(a,'output','SENSACINTRMICA[C]',[-40,50]);
a=addmf(a,'output',1,'SEVERA','trimf',[-40 -25 -10]);
a=addmf(a,'output',1,'FUERTE','trimf',[-25 -10 5]);
a=addmf(a,'output',1,'SOPORTABLE','trimf',[-10 5 20]);
a=addmf(a,'output',1,'LEVE','trimf',[5 20 35]);
a=addmf(a,'output',1,'IMPERCEPTIBLE','trimf',[20 35 50]);

%---------------------------------------------------------------------
---
%----------------SIMULACION PARA LA ENTRADA TEMPERATURA---------------
---
figure(1)
subplot(221),plotmf(a,'input',1) % ploteo de entrada(1) NEWFIS
"TEMPERATURA"
axis([-5 35 0 1.5]) % Actica rango de muestreo
ylabel('u[ T ]') % titulo en el eje Y

2
title(' CONJUNTO DIFUSO ENTRADA(1):"TEMPERATURA"') % Titulo del
grafico
gridON% activa la grilla
%---------------------------------------------------------------------
---
%------------------------SIMULACIN PARA LA ENTRADA VELOCIDAD VIENTO -
---
subplot(222),plotmf(a,'input',2) % Ploteo entrada(2) NEWFIS VELOCIDAD
VIENTO
title('CONJUNTO DIFUSO ENTRADA(2) VELOCIDAD VIENTO'); % titulo del
grfico
gridON% activa grilla
axis([0 30 0 1.5]) % Rango de muestreo
ylabel('u[ W ]') % Titulo del eje Y

%---------------------------------------------------------------------
%-------------------SIMULACION PARA LA SALIDA SENSACION TERMICA------
subplot(224),plotmf(a,'output',1) % Ploteo entrada(2) NEWFIS
VELOCIDAD VIENTO
title('CONJUNTO DIFUSO SALIDA(1) SENSACIN TRMICA'); % titulo del
grfico
gridON% activa grilla
axis([-40 50 0 1.2]) % Rango de muestreo
ylabel('u[ VT ]') % Titulo del eje Y
% --------------------------------------------------------------------
% ------------------- REGLA BASE-------------------------------------
% 1.- IF temperatura IS fra AND velocidad viento IS baja THEN
sensacin
% trmica IS soportable.
% 2.- IF temperatura IS fra AND velocidad viento IS suave THEN
sensacin
% rmica IS fuerte.
% 3.- IF temperatura IS fra AND velocidad viento IS alta THEN
sensacin
% trmica IS servero.
% 4.- IF temperatura IS fresca AND velocidad viento IS baja THEN
sensacin
% trmica IS leve.
% 5.- IF temperatura IS fresca AND velocidad viento IS suave THEN
sensacin
% trmica IS soportable.
% 6.- IF temperatura IS fresca AND velocidad viento IS alta THEN
sensacin
% trmica IS fuerte.
% 7.- IF temperatura IS clida AND velocidad viento IS baja THEN
sensacin
% trmica IS imperceptible.
% 8.- IF temperatura IS clida AND velocidad viento IS suave THEN
sensacin
% trmica IS leve.

% 9.- IF temperatura IS clida AND velocidad viento IS alta THEN


sensacin
% trmica IS soportable.
% 10.- IF temperatura IS caliente AND velocidad viento IS suave THEN
sensacin
% trmica IS imperceptible.

% 11.- IF temperatura IS caliente AND velocidad viento IS suave THEN


sensacin
% trmica IS imperceptible.

3
% 12.- IF temperatura IS caliente AND velocidad viento IS suave THEN
sensacin
% trmica IS leve.

Q=[1 1 3 1 1
1 2 2 1 1
1 3 1 1 1
2 1 4 1 1
2 2 3 1 1
2 3 2 1 1
3 1 5 1 1
3 2 4 1 1
3 3 3 1 1
4 1 5 1 1
4 2 5 1 1
4 3 4 1 1];

%---------------------------------------------------------------------
a=addrule(a,Q); % agregando a Rule
%almacenando el FIS
a=writefis(a,'sensa_termico');
%---------------------------------------------------------------------
%-------------PARA FUSIFICACION Y DEFUSIFICACION---------------------
%----------------------TEMPERATURA ENTRADA 1--------------------------
puntos_n=500;
x1=linspace(-5,35,puntos_n); %universo
param_in1=[-5 0 10
0 10 20
10 20 30
20 30 35];
mf_in1(1,:)=trap_mf(x1,[-5 param_in1(1,:)]);
mf_in1(2,:)=tri_mf(x1,param_in1(2,:));
mf_in1(3,:)=tri_mf(x1,param_in1(3,:));
mf_in1(4,:)=trap_mf(x1,[param_in1(4,:) 35]);
%---------------------------------------------------------------------
---
% ------------VELOCIDAD DEL VIENTO ENTRADA 2--------------------------
---
x2=linspace(0,30,puntos_n); %universo
param_in2=[0 5 17.5
2.5 15 27.5
12.5 25 30];
mf_in2(1,:)=trap_mf(x2,[0 param_in2(1,:)]);
mf_in2(2,:)=tri_mf(x2,param_in2(2,:));
mf_in2(3,:)=trap_mf(x2,[param_in2(3,:) 30]);
%---------------------------------------------------------------------
% ---------------SENSACION TERMICA SALIDA----------------------------
y=linspace(-40,50,puntos_n); %universo
param_out=[-40 -25 -10
-25 -10 5
-10 5 20
5 20 35
20 35 50];
mf_out(1,:)=tri_mf(y,param_out(1,:));
mf_out(2,:)=tri_mf(y,param_out(2,:));
mf_out(3,:)=tri_mf(y,param_out(3,:));
mf_out(4,:)=tri_mf(y,param_out(4,:));
mf_out(5,:)=tri_mf(y,param_out(5,:));

4
% ----------------FUZZIFICADOR----------------------------------------
% valores numericos de cada conjunto difuso para T=7
% u_fria=0.3; u_fresca=0.7; u_calida=0; u_caliente=0;
u_A=[0.3 0.7 0 0];
% valores numericos de cada conjunto difuso para Nudos=22
% u_bajo=0; u_suave=0.44; u_alta=0.76;
u_B=[0 0.44 0.76];
% --------------------------OPERACION DIFUSA--------------------------
----
k=1; % indice de los grados
for i=1:4 % temperaturas
for j=1:3 % velocidad del viento
s(k)=min(u_A(i),u_B(j)); %grados para cada regla
k=k+1;
end
end
%---------------------------------------------------------------------
% --------------------------IMPLICACION DIFUSA------------------------
y=linspace(-40,50,puntos_n); % universo
for k=1:12 % grados para el disparo de las reglas
for m=1:puntos_n % universo
% k da el numero de regla
% R(k,3) da el conjunto difuso
D(k,m)=min(s(k),mf_out(Q(k,3),m)); %consecuentedifuso
end
end
% ---------------------------AGREGACION-------------------------------
for k=1:12
C_agg(k)=0; % inicia con un valor 0
for m=1:puntos_n
% implicacion del consecuente
% se obtiene hallando el area del trapecio
% en este caso se usa una suma de riemman
C_agg(k)=C_agg(k)+(90/puntos_n)*D(k,m);
end
end
figure(2)

plot(y,D),'linewidth',2, hold
axis([-50 50 0 1])
gridon
title('FUSIFICACION')

% -----------------------DEFUZZIFICACION------------------------------
z0=0; % salida crisp inicia en 0
% se obtiene usando el metodo del Centroide
for k=1:12
z0=z0+param_out(Q(k,3),2)*C_agg(k);
end
z0=z0/sum(C_agg);
disp('La sensacin trmica correspondiente a 7C y una velocidad del
viento de 22 nudos es')
disp(z0)
figure(3)
plot(y,D), hold
plot([z0 z0],[0 0.7],'r','linewidth',3)
axis([-50 50 0 1])
gridon
title('DEFUSIFICACION Zo = -8.9887')
xlabel('SENSACIN TRMICA [C]')
ylabel('u')

5
IV. SENSA-TERMICO.FIS
[System]
Name='sensa_termico'
Type='mamdani'
Version=2.0
NumInputs=2
NumOutputs=1
NumRules=12
AndMethod='min'
OrMethod='max'
ImpMethod='min'
AggMethod='max'
DefuzzMethod='centroid'

[Input1]
Name='TEMPERATURA[C]'
Range=[-5 35]
NumMFs=4
MF1='Fria':'trapmf',[-5 -5 0 10]
MF2='Fresca':'trimf',[0 10 20]
MF3='calida':'trimf',[10 20 30]
MF4='Caliente':'trapmf',[20 30 35 35]

[Input2]
Name='Velocidad Viento [Nudos]'
Range=[0 30]
NumMFs=3
MF1='BAJO':'trapmf',[0 0 5 17.5]
MF2='SUAVE':'trimf',[2.5 15 27.5]
MF3='ALTA':'trapmf',[12.5 25 30 30]

[Output1]
Name='SENSACIN TRMICA[C]'
Range=[-40 50]
NumMFs=5
MF1='SEVERA':'trimf',[-40 -25 -10]
MF2='FUERTE':'trimf',[-25 -10 5]
MF3='SOPORTABLE':'trimf',[-10 5 20]
MF4='LEVE':'trimf',[5 20 35]
MF5='IMPERCEPTIBLE':'trimf',[20 35 50]

[Rules]
1 1, 3 (1) : 1
1 2, 2 (1) : 1
1 3, 1 (1) : 1
2 1, 4 (1) : 1
2 2, 3 (1) : 1
2 3, 2 (1) : 1
3 1, 5 (1) : 1
3 2, 4 (1) : 1
3 3, 3 (1) : 1
4 1, 5 (1) : 1
4 2, 5 (1) : 1
4 3, 4 (1) : 1

6
V. RESULTADOS

7
Sensacin VELOCIDAD DEL VIENTO
Trmica Bajo Suave Alta
Temperatura Fra Soportable Fuerte Severa
Fresca Leve Soportable Fuerte
clida Imperceptible Leve Soportable
Caliente Imperceptible Imperceptible Leve

APARTIR DE SENSA_TERMICO.FIS generado al realizar simulacin el


cdigo Matlab

Se genera la siguiente RED FUZZY utilizando toolbox de Matlab

NOS RESULTA LA SIGUIENTE REGLA BASE

Visualizacin de la REGLA

Para una temperatura T=15 y la velocidad del viento W=15 la


sensacin trmica es 12.5 soportable

8
SURFACE

Para Una temperatura de T= 7 y la velocidad del viento W=22 la


sensacin trmica fuerte

9
Resultado final despus de fusificacion (figura 2) defusificacion
(figura 3)

Figura 2
FUSIFICACION
1

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
-50 -40 -30 -20 -10 0 10 20 30 40 50

Figura 3
DEFUSIFICACION Zo = -8.9887
1

0.9

0.8

0.7

0.6

0.5
u

0.4

0.3

0.2

0.1

0
-50 -40 -30 -20 -10 0 10 20 30 40 50
SENSACIN TRMICA [C]

10

Vous aimerez peut-être aussi