Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
LÓGICA DIFUSA
Y
SIMULINK
LÓGICA DIFUSA 3
1.1 Definición 3
1.2 Conjuntos difusos 3
Operaciones con conjuntos difusos 5
1.3 El control difuso 7
1.4 Aplicaciones de la lógica difusa 14
1.5 Toolbox de lógica difusa de MATLAB 15
Estructura de datos 15
Sistema difuso mediante código 15
El editor del sistema difuso 17
El editor de funciones de pertenencia 18
El editor de reglas 22
Análisis entrada-salida del comportamiento del sistema 23
Experto Universitario en Informática Médica
LÓGICA DIFUSA
1.1 Definición
La lógica difusa es una lógica multievaluada que permite valores intermedios para poder definir
evaluaciones convencionales como sí/no, verdadero/falso, negro/blanco, etc. La lógica difusa se
inició en 1965 por Lotfi A. Zadeh, profesor de ciencia de computadoras en la Universidad de
California en Berkeley.
Las nociones como "más bien caliente" o "poco frío" pueden formularse matemáticamente y ser
procesados por computadoras.
Se intenta aplicar una forma más humana de pensar en la programación de computadoras.
3
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
Nosotros podemos interpretar los elementos que han asignado el número 1 como los elementos
que están en el conjunto A y los elementos que han asignado el número 0 como los elementos
que no están en el conjunto A.
Este concepto es suficiente para muchas áreas de aplicación. Pero nosotros podemos encontrar
fácilmente situaciones donde carece de flexibilidad. Para comprender este concepto veamos un
ejemplo:
Otro ejemplo:
Queremos describir el conjunto de gente joven. Más formalmente nosotros podemos denotar
B = {conjunto de gente joven}
Como - en general - la edad comienza en 0, el rango más inferior de este conjunto está claro. El
rango superior, por otra parte, es más bien complicado de definir. Como un primer intento
colocamos el rango superiora en, digamos, 20 años. Por lo tanto nosotros definimos B como un
intervalo denominado:
B = [0,20]
Ahora la pregunta es: ¿ por qué alguien es en su 20 cumpleaños joven y al día siguiente no?
Obviamente, este es un problema estructural, porque si movemos el límite superior del rango
desde 20 a un punto arbitrario podemos plantear la misma pregunta.
Una manera más natural de construir el conjunto B estaría en suavizar la separación estricta
entre el joven y el no joven. Nosotros haremos esto para permitir no solamente la (crispada)
decisión "él/ella SI está en el conjunto de gente joven" o "él/ella NO está en el conjunto de
gente joven", sino también las frases más flexibles como "él/ella SI pertenece un poquito más al
conjunto de gente joven" o "él/ella NO pertenece aproximadamente al conjunto de gente
joven".
Pasamos a continuación a mostrar como un conjunto difuso nos permite definir una noción
como "él/ella es un poco joven".
La interpretación de los números ahora asignados a todos los elementos del Universo de
Discurso es algo más difícil. Por supuesto, el número 1 asignado a un elemento significa que el
elemento está en el conjunto B y 0 significa que el elemento no está definitivamente en el
conjunto el B. El resto de valores significan una pertenencia gradual al conjunto B.
4
Experto Universitario en Informática Médica
Para ser más concretos mostramos ahora gráficamente el conjunto de gente joven de forma
similar a nuestro primer ejemplo por su función característica.
De esta forma unos 25 años de edad todavía sería joven al grado de 50 por ciento.
Ahora sabemos qué es un conjunto difuso. ¿Pero qué se puede hacer con él?
5
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
La figura siguiente muestra la operación AND (Y) del conjunto difuso A y el número difuso B
(el resultado es la línea azul).
La operación OR (O) del conjunto difuso A con el número difuso B se muestra en la próxima
figura (nuevamente, es la línea azul).
Esta figura da un ejemplo para una negación. La línea azul es la NEGACION del conjunto
difuso A.
6
Experto Universitario en Informática Médica
7
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
Lo mismo se hace para el ángulo entre la plataforma y la pértiga, además de para la velocidad
angular de este ángulo:
Apréciese que, para hacerlo más fácil, suponemos que al principio la pértiga está en una posición
cercana a la central para que un ángulo mayor de, digamos, 45 grados en cualquier dirección no
pueda - por definición - ocurrir.
Ahora daremos varias reglas que dicen qué hacer en situaciones concretas:
Considere por ejemplo que la pértiga está en la posición central (el ángulo es cero) y no se mueve
(la velocidad angular es cero). Obviamente esta es la situación deseada, y por lo tanto no tenemos
que hacer nada (la velocidad es cero).
Consideremos otro caso: el polo está en la posición central como antes, pero está en movimiento
a baja velocidad en la dirección positiva. Naturalmente nosotros tendríamos que compensar el
movimiento de la pértiga moviendo la plataforma en la misma dirección a baja velocidad.
De esta forma hemos constituido dos reglas que pueden ponerse en una forma más formalizada
como esta:
Si el ángulo es cero y la velocidad angular es cero entonces la velocidad será cero.
Si el ángulo es cero y la velocidad angular es positiva baja entonces la velocidad será positiva baja.
Podemos resumir todas las reglas aplicables en una tabla:
| angulo
|
veloc | NA NB C PB PA
----------+------------------------------
v NA | NA
. NB | NB C
a C | NA NB C PB PA
n PB | C PB
g PA | PA
donde NA es una (usual) abreviatura para negativa alta, NB para negativa baja, etc.
8
Experto Universitario en Informática Médica
A continuación mostraremos como estas reglas pueden aplicarse con valores concretos para el
ángulo y velocidad angular. Para ello vamos a definir dos valores explícitos para el ángulo y la
velocidad angular para operar con ellos.
Ahora mostraremos como aplicar nuestras reglas a esta situación real. Veamos como aplicar la
regla
Si el ángulo es cero y la velocidad angular es cero entonces la velocidad será cero.
a los valores que hemos definido.
Esta es la variable lingüística "ángulo" donde nos centramos en el conjunto "cero" y el ángulo
actual:
9
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
Nos damos cuenta que nuestro valor real pertenece al conjunto difuso "cero" en un grado de
0.75:
Ahora mostramos la variable lingüística "velocidad angular" donde nos centramos en el conjunto
difuso "cero" y el valor actual de velocidad angular:
Nos damos cuenta que nuestro valor real pertenece al conjunto difuso "cero" en un grado de 0.4:
10
Experto Universitario en Informática Médica
Como las dos partes de la condición de nuestra regla están unidas por una Y (operación lógica
AND) calculamos el mín(0.75,0.4)=0.4 y cortamos el conjunto difuso "cero" de la variable
"velocidad" a este nivel (según nuestra regla):
11
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
El resultado de la regla
Si el ángulo es cero y la velocidad angular es positiva baja entonces la velocidad será positiva baja
es:
El resultado de la regla
Si el ángulo es positivo bajo y la velocidad angular es negativa baja entonces la velocidad será cero
es:
12
Experto Universitario en Informática Médica
El resultado del controlador difuso es un conjunto difuso (de velocidad), así que tenemos que
escoger un valor representativo como salida final. Hay varios métodos heurísticos (métodos de
claridad o defuzzification), uno de ellos es tomar el centro de gravedad del conjunto difuso:
13
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
Los conjuntos difusos son usados para toma de decisiones y estimaciones en sistemas de control
como por ejemplo en aire acondicionado, control de automóviles y controladores en sistemas
industriales.
14
Experto Universitario en Informática Médica
Estructura de datos
Matlab almacena toda la información relevante de un sistema difuso (funciones de pertenencia,
reglas, métodos de implicación y desdifusificación) en una matriz siguiendo un determinado
formato. Dicha matriz puede almacenarse en la memoria de trabajo y referenciarse mediante una
variable de Matlab, o bien almacenarse en un fichero que puede ser cargado directamente en
memoria, cargado en el editor de sistemas difusos o utilizado en una simulación de Simulink.
Variable y
8
0
0 8 Variable x
Por ejemplo, para plantear el sistema difuso, podemos ejecutar los siguientes comandos:
a = newfis('ejemplo');
a = addvar(a,'input','x',[0 8]);
a = addmf(a,'input',1,'pequeño','trapmf',[0 0 1 3]);
a = addmf(a,'input',1,'medio','trapmf',[1 3 3 7]);
a = addmf(a,'input',1,'grande','trapmf',[3 7 8 8]);
showfis(a)
15
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
El comando newfis crea un sistema difuso nuevo (fis es la abreviatura de fuzzy inference system).
El comando addvar añade una variable de entrada o salida al sistema. Tiene 4 parámetros:
Función Expresión
Gaussiana gaussmf(dominio, [σ, centro])
forma π pimf(dominio, [a, b, c, d])
Sigmoide sigmf(dominio, [amplitud, centro])
forma S smf(dominio, [a, b])
Trapezoidal trapmf(dominio,[a, b, c, d])
Triangular trimf(dominio, [a, b, c])
16
Experto Universitario en Informática Médica
La primera acción a realizar es definir el número de entradas y salidas que debe tener el sistema
difuso utilizando la opción Edit->Add input o Edit->Add output.
En nuestro primer ejemplo se va a trabajar con el sistema más sencillo, con una sola
entrada y salida (sistema SISO), por lo que el número de variables que aparecen por defecto es
el correcto.
17
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
En esta ventana se declaran las características globales que se asumen para todo el
sistema a través de las listas desplegables correspondientes:
Lo primero que se debe hacer es declarar el dominio de cada variable, que en este caso es un
intervalo que se introduce en el campo Range. El campo Display Range indica el rango que se
18
Experto Universitario en Informática Médica
utilizará en el subpanel que muestra las funciones de pertenencia. Siguiendo el ejemplo visto en
clase, introduciremos un rango comprendido entre 0 y 8, tanto para la variable de entrada
como para la de salida.
19
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
Los nombres y parámetros de las funciones para la variable de salida y aparecen en la tabla
siguiente:
20
Experto Universitario en Informática Médica
21
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA
El editor de reglas
Por último se editan las reglas utilizando el editor correspondiente que se abre
mediante la opción View->Edit Rules o haciendo una doble pulsación sobre el icono que
representa la base de reglas en la ventana principal. La ventana que se abre, es simplemente un
panel de edición donde se editan las reglas siguiendo un formato prefijado. En nuestro
ejemplo, introduciremos las tres reglas que aparecen en la figura siguiente.
Si está seleccionado el formato de la regla verbose y el idioma inglés (en Options), el formato de la
regla es:
donde Confianza_regla es un valor del intervalo [0,1] que refleja la confianza que se tiene sobre
esa regla de control, que se refleja en un peso de la misma sobre el valor de salida del
regulador.
Puede probarse cómo quedan las reglas con distintos formatos. En el formato Indexed, el
número que aparece representa el conjunto difuso que está en el lugar i-ésimo numerando de
izquierda a derecha los conjuntos que se han definido en cada variable. Obsérvese que es
posible escribir reglas en forma no canónica, mediante la s-norma “or” como conexión.
22
Experto Universitario en Informática Médica
23