Está en la página 1de 7

Lógica difusa con Octave

Dr. SC(s). Walter Castellanos

1. Controlador de temperatura.
Consideremos el caso del control de temperatura de un ambiente. Las posibilidades de
control son 2, el caso de enfriamiento y el caso de calentamiento. Vamos a analizar el
caso en que solo es necesario el enfriamiento del ambiente y para eso utilizaremos un
ventilador. El objetivo es mantener una temperatura adecuada basado en dos variables
(antecedentes): temperatura y actividad. Las variables lingüísticas son frío, tibio y
caliente para describir la temperatura, mientras que las variables lingüísticas baja y alta
son usadas para describir el nivel de actividad dentro del ambiente.
La variable de salida (consecuente) es la velocidad de enfriamiento.

Las reglas difusas (6) obtenidas a partir de estas dos entradas son:
Si la temperatura es fría y la actividad es baja entonces la velocidad es muy baja
Si la temperatura es fría y la actividad es alta entonces la velocidad es baja
Si la temperatura es tibia y la actividad es baja entonces la velocidad es media baja
Si la temperatura es tibia y la actividad es alta entonces la velocidad es media
Si la temperatura es caliente y la actividad es baja entonces la velocidad es media alta
Si la temperatura es caliente y la actividad es alta entonces la velocidad es alta

El universo de discurso para la temperatura es de 0 a 100 y las variables lingüísticas:


frío= trapecio con vértices en -1 0 30 50
tibio= triangulo con vértices 30 55 80
caliente = trapecio con vértices 60 80 100 101

El universo de discurso para la variable actividad es de 0 a 10 y las variables


lingüísticas:
actividad baja= trapecio con vértices en -1 0 2 8
actividad alta = trapecio con vértices 2 8 10 11

El universo de discurso para la variable velocidad es de 0 a 10 y las variables


lingüísticas:
muy_baja=2
baja=4
media_bajo=8
media=12
media_alto=16
alta=20

w. castellanos 1
Aplicación en Octave
pkg load fuzzy-logic-toolkit

%Universo de discurso
x= [0: 5: 100] ; %Temperatura
y = [0:1 :10]; %Actividad
z= [0:1:10]; %Velocidad

%Tempertaura
frio= trapmf (x, [-1 0 30 50])
tibio= trimf (x, [30 55 80])
caliente = trapmf (x, [60 80 100 101])
plot (x,frio)
antecedente_t= [frio; tibio; caliente]
xlabel 'Temeperatura'
ylabel 'Pertenencia'
plot (x,antecedente_t)
axis ([-inf inf 0 1.2])
xlabel 'Temperatura'
ylabel 'Pertenencia'
title 'Temperatura'
text (10, 0.95, 'frio’)
text (10, 0.95, 'tibio')
text (80, 0.95, 'caliente')

%Actividad
actividad_baja= trapmf (y, [0 0 2 8])
actividad_alta = trapmf (y, [2 8 10 10])
antecedente_a= [actividad_baja;actividad_alta]
plot (y,antecedente_a)
axis ([-inf inf 0 1.2])
xlabel 'Nivel de Actividad'
ylabel 'Pertenencia'
title 'Actividad'
text (1, 0.95, 'baja')

w. castellanos 2
text (9, 0.95, 'alta')

%Velocidad del ventilador


muy_baja= 1
baja =2
baja_media =4
media = 6
media_alta = 8
alta = 10
consecuente_v = [muy_baja; baja; baja_media; media; media_alta; alta]
stem (consecuente_v, ones (size (consecuente_v)))
axis ([0 11 0 1.2])
xlabel 'Velocidad'
ylabel 'Pertenencia'
title 'Velocidad del ventilador'
text (0.5,1.1, 'muy baja')
text (2.1, 0.5, 'baja')
text (3.5,1.1, 'media baja')
text (6.1, 0.5, 'media')
text (7.5,1.1, 'media alta')
text (10.1, 0.5, 'alta')

w. castellanos 3
Una vez definidas las funciones de pertenencia y los valores consecuentes evaluaremos
el sistema difuso para un patrón con temperatura de 65.0 y actividad de 5.8, para lo cual
se fusificaran las entradas hallando el grado de pertenencia para cada función.

temp = 65.0 %Temperatura


mut1 = trapmf (temp, [0 0 30 50])
mut2= trimf (temp, [30 55 80])
mut3= trapmf (temp, [60 80 100 100])

MU_t= [mut1;mut2;mut3]

MU_t =

0
0.6000
0.2500

act= 5.8 %Actividad


mua1= trapmf (act, [0 0 2 8])
mua2= trapmf (act, [2 8 10 10])

MU_a= [mua1;mua2]

MU_a =[

0.3667
0.6333]

Aplicando las reglas de implicación AND de Sugeno para hallar el grado de pertenencia
de cada regla.

antecedente_DOF = [MU_t(1) * MU_a(1)


MU_t(1) * MU_a(2)
MU_t(2) * MU_a(1)
MU_t(2) * MU_a(2)
MU_t(3) * MU_a(1)
MU_t(3) * MU_a(2)]
antecedente_DOF =

0
0
0.2200
0.3800
0.0917
0.1583

El gráfico puede obtenerse como sigue:

w. castellanos 4
stem (consecuente_v, antecedente_DOF)
axis ([0 11 0 0.5])
title 'Funcion de pertenecia Consecuente '
xlabel 'Velocidad del ventilador'
ylabel 'Intensidad'
title 'Velocidad del ventilador'
text (0.5, antecedente_DOF(1)+ 0.02, 'muy baja')
text (2.1, antecedente_DOF(2)+ 0.04, 'baja')
text (3.5, antecedente_DOF(3)+ 0.02, 'media baja')
text (6.1, antecedente_DOF(4)+ 0.02, 'media')
text (7.5, antecedente_DOF(5)+ 0.02, 'media alta')
text (10.1, antecedente_DOF(6)+ 0.02, 'alta')

La salida del controlador es el promedio del centro de gravedad de las reglas.

Salida_y = sum (antecedente_DOF.* consecuente_v)/ sum(antecedente_DOF)

Salida_y =

6.4431

Lo cual significa que la velocidad del ventilador será 6.4431 para una temperatura de
65ºF y un nivel de actividad de 5.8.

2. Control de un AGV con lógica difusa


Se requiere realizar un controlador usando logica difusa para estacionar un AGV
(vehículo guiado automáticamente) en una rampa, tal como se muestra en la figura a. La
variable “posición” ha sido fuzificada según se muestra en la figura b.

w. castellanos 5
figura a

figura b

Se pide:
a) Usando Matlab establezca la función de pertenencia para una posición actual de
5,1m.
b) ¿Cual es la interpretación de esta posición en términos lingüísticos?
c) ¿Qué otra(s) variable(s) adicional(es) necesitaría(n) ser fuzificadas para el diseño del
controlador?

x = 0:100;
params = [-1 0 20 40];
y1 = trapmf(x, params);
params = [20 40 60 80];
y2 = trapmf(x, params);
params = [60 80 100 101];
y3 = trapmf(x, params);
figure('NumberTitle', 'off', 'Name', 'trapmf demo');
plot(x, y1, 'r;params = [-1 0 20 40];', 'LineWidth', 2)
hold on;
plot(x, y2, 'b;params = [20 40 60 80];', 'LineWidth', 2)

w. castellanos 6
hold on;
plot(x, y3, 'g;params = [60 80 100 101];', 'LineWidth', 2)
ylim([-0.1 1.2]);
xlabel('Crisp Input Value', 'FontWeight', 'bold');
ylabel('Degree of Membership', 'FontWeight', 'bold');
grid;

w. castellanos 7

También podría gustarte