Está en la página 1de 6

Facultad Ingeniería Electrónica y Mecatrónica

Laboratorio 1
Lógica difusa con Matlab

1. Objetivo.
- Analizar el control con lógica difusa.
2. Marco Teórico
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 0 0 30 50
tibio= triangulo con vértices 30 55 80
caliente = trapecio con vértices 60 80 100 100

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 0 0 2 8
actividad alta = trapecio con vértices 2 8 10 10

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

3. Procedimiernto

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

%Tempertaura
frio= trapmf (x, [0 0 30 50])
tibio= trimf (x, [30 55 80])
caliente = trapmf (x, [60 80 100 100])

1
Facultad Ingeniería Electrónica y Mecatrónica

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')
text (9, 0.95, 'alta')

2
Facultad Ingeniería Electrónica y Mecatrónica

%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')

3
Facultad Ingeniería Electrónica y Mecatrónica

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:

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')

4
Facultad Ingeniería Electrónica y Mecatrónica

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.

figura a

5
Facultad Ingeniería Electrónica y Mecatrónica

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?

También podría gustarte