Sei sulla pagina 1di 23

INTRODUCCIÓN A

LÓGICA DIFUSA
Y
SIMULINK

Título Experto Universitario en Informática Médica


CONTENIDO

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.

1.2 Conjuntos difusos


La noción más básica de sistemas difusos es un (sub)conjunto difuso.
Un ejemplo:
En primer lugar consideramos un conjunto X con todos los números reales entre 0 y 10 que
nosotros llamado el universo de discurso. Ahora, definimos un subconjunto A de X con todos
números reales en el rango entre 5 y 8.
A = [5,8]
Ahora mostramos el conjunto A por su función característica, es decir esta función asigna un
número 1 o 0 al elemento en X, dependiendo de si el elemento está en el subconjunto A o no.
Esto conlleva a la figura siguiente:

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?

Operaciones con conjuntos difusos


Ahora que tenemos una idea de lo que son conjuntos difusos, podemos introducir las
operaciones básicas sobre conjuntos difusos. Parecido a las operaciones sobre conjuntos
booleanos nosotros también podemos interseccionar, unificar y negar conjuntos difusos. En
su primerísimo artículo sobre conjuntos difusos, L. A. Zadeh sugirió el operador mínimo para la
intersección y el operador máximo para la unión de dos conjuntos difusos. Es fácil ver que estos
operadores coinciden con la unificación booleana, e intersección si nosotros únicamente
consideramos los grados miembros 0 y 1.
A fin de aclarar esto, mostraremos varios ejemplos. Sea A un intervalo difuso entre 5 y 8, y B un
número difuso entorno a 4. Las figuras correspondientes se muestran a continuación:

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

1.3 El control difuso


Los controladores difusos son las aplicaciones más importantes de la teoría difusa. Ellos trabajan
de una forma bastante diferente a los controladores convencionales.
El conocimiento experto se usa en vez de ecuaciones diferenciales para describir un sistema. Este
conocimiento puede expresarse de una manera muy natural, empleando las variables lingüísticas
que son descritas mediante conjuntos difusos.

Ejemplo: El péndulo invertido


El problema está en equilibrar una pértiga sobre una plataforma móvil que puede moverse en
dos únicas direcciones, a la izquierda o a la derecha. Ante todo, nosotros tenemos que definir
(subjetivamente) cual es la velocidad del anden: alta, baja, etc. Esto se hace para especificar las
funciones pertenecientes al conjunto difuso:
ƒ negativo alto (celeste)
ƒ negativo bajo (verde)
ƒ cero (rojo)
ƒ positivo bajo (azul)
ƒ positivo alto (morado)

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.

Consideremos la situación siguiente:


Un valor actual para el ángulo:

Un valor actual para la velocidad angular:

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

Por su parte, el resultado de la regla


Si el ángulo es cero y la velocidad angular es negativa baja entonces la velocidad será negativa baja
es:

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

Estas cuatro reglas solapadas desembocan en un resultado único:

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

1.4 Aplicaciones de la lógica difusa


La teoría de conjuntos difusos ha sido ampliamente aplicada en campos como: la medicina,
economía, ecología, biología, etc.
ƒ Se ha empleado en empresas de producción de artículos eléctricos y electrónicos como una
herramienta de control
ƒ Se ha utilizado para el desarrollo de procesadores.
ƒ Control de hornos de cemento
ƒ Control de procesos de depuración de aguas
ƒ Control de tráfico
ƒ Conducción automática de trenes
ƒ Productos domésticos: aire acondicionado, lavadoras, cámaras de video, cámaras
fotográficas, etc.

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.

En general la lógica difusa es aplicada en cualquier campo donde:


ƒ Sea muy difícil o casi imposible crear un modelo
ƒ En sistemas controlados por expertos humanos
ƒ E sistemasdonde se tienen entradas y salidas que son continua y complejas
ƒ E procesos altamente no lineales
ƒ E sistemas que utilizan observaciones humanas como entradas o reglas básicas
ƒ E cualquier sistema en el cual se trabaje con conceptos vagos o imprecisos.

No es conveniente emplear lógica difusa:


ƒ Cuando la teoría de control clásica funciona
ƒ Existe un modelo matemático adecuado

14
Experto Universitario en Informática Médica

1.5 Toolbox de lógica difusa de MATLAB


En Matlab existe un toolbox dedicado a los sistemas difusos. Este toolbox permite definir un
sistema difuso por medio de diálogos y ventanas que facilitan la introducción de los datos.
Además, dispone de un conjunto de funciones para analizar el comportamiento de dichos
sistemas. A lo largo de este apartado se estudiarán las etapas que se deben seguir en la edición o
modificación de un sistema difuso.

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.

Sistema difuso mediante código


Dado el siguiente sistema:

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:

ƒ El nombre de la variable de matlab en la que está almacenado el sistema difuso.


ƒ Una cadena que indica si la variable que queremos introducir es de entrada (‘input’) o de
salida (‘output’).
ƒ El nombre de la variable que queremos añadir.
ƒ Un vector que indica el rango de valores que puede tomar la variable.

El comando addmf añade una función de pertenencia a un sistema difuso (mf es la


abreviatura de membership function). Esta función tiene 6 parámetros:

ƒ El nombre de la variable de matlab en la que está almacenado el sistema difuso.


ƒ Una cadena que indica si la variable que queremos introducir es de entrada (‘input’) o de
salida (‘output’).
ƒ El índice de la variable a la que se quiere añadir la función de pertenencia.
ƒ Una cadena que representa el nombre de la nueva función de pertenencia.
ƒ Una cadena que representa el tipo de la nueva función de pertenencia.
ƒ El vector de parámetros que define la función de pertenencia.

En nuestro ejemplo se han añadido las tres funciones de pertenencia correspondientes a la


variable de entrada x. Estas tres funciones son trapezoidales (trapmf), y para definir una función
de este tipo es necesario especificar un vector con 4 parámetros: los 4 puntos que definen
sobre el eje X el trapecio.

La estructura del sistema difuso se guarda en una matriz, en nuestro ejemplo en la


matriz del entorno ‘a’. El comando showfis nos muestra el contenido de la matriz ya
interpretado.

Este toolbox dispone de un conjunto de funciones para la creación de conjuntos


difusos como los que se han estudiado en teoría. Los nombres de las funciones más
significativas son :

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

forma Z zmf(dominio, [a, b])

Como la edición de los parámetros de un sistema difuso es muy costosa si se utilizan


directamente funciones de matlab como las descritas, existe un interfaz de ventanas que
permite la edición de las funciones de pertenencia, de la base de reglas y de las características
de dicho sistema.

El editor del sistema difuso


Para abrir la ventana de edición del sistema difuso, puede ejecutarse el comando fuzzy,
si se quiere crear un sistema nuevo, o fuzzy(nombre_fis) si se quiere editar el sistema difuso
definido en la matriz almacenada en la variable nombre_fis, o fuzzy(‘nombre_fichero’) si se
quiere editar el sistema almacenado en el fichero nombre_fichero. Aparece entonces la siguiente
ventana:

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.

Se pueden cambiar los nombres de las variables de entrada y salida seleccionando el

17
Grupo de Ingeniería Bioinspirada e Informática para la Salud
DTIC - UA

icono que representa la variable correspondiente y modificando el valor que aparece en el


campo Name. Modificarlos para que los nombres de las variables sean x e y.

En esta ventana se declaran las características globales que se asumen para todo el
sistema a través de las listas desplegables correspondientes:

ƒ t-norma utilizada en antecedentes: And method


ƒ s-norma: Or method
ƒ Método de implicación : Implication
ƒ Método de composición o agregación : Aggregation
ƒ Método de desfucificación : Defuzzification
En nuestro ejemplo, vamos a dejar todos los parámetros con sus valores por defecto

El editor de funciones de pertenencia


A continuación se deben definir las funciones de pertenencia de cada variable. Para ello
se realiza una doble pulsación sobre uno de los iconos de las variables o se activa la opción
View->Edit membership functions, con lo que se abre la siguiente ventana:

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.

Para añadir funciones de pertenencia seleccionar la opción Edit->Add MFs. A través


del cuadro de diálogo que aparece se define el tipo de función elegido y el número de
funciones que se van a utilizar para esa variable. Al aceptar los datos se creará una distribución
uniforme de funciones de pertenencia con un solapamiento del 100% sobre el dominio
definido. En nuestro ejemplo introduciremos 3 funciones trapezoidales para las
variables x e y, y posteriormente ajustaremos sus parámetros.

Para modificar el nombre o los parámetros de alguna función, se debe seleccionar


primero dicha función con el ratón, apareciendo sus propiedades en el panel titulado Current
Membership Function, donde pueden ser modificadas a través de los campos correspondientes.
También pueden modificarse arrastrando la función con el ratón directamente sobre su gráfica.

En nuestro caso, los nombres y parámetros de las funciones de pertenencia para la


variable de entrada x aparecen en la tabla siguiente:

nombre tipo parámetros


Pequeño trapmf [0 0 1 3]
Medio trapmf [1 3 3 7]
Grande trapmf [3 7 8 8]

Las gráficas obtenidas deben ser las que aparecen a continuación:

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:

nombre tipo parámetros


Pequeño trapmf [0 0 2 4]
Medio trapmf [2 4 4 6]
Grande trapmf [4 6 8 8]

Las gráficas obtenidas deben ser las que aparecen a continuación:

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:

If (Nombre_Var is nombre_conjunto) {and/or (...)} then (Nom_Var is nom_conjunto) (Confianza_regla)

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

Análisis entrada-salida del comportamiento del


sistema
Para analizar el comportamiento del sistema difuso que se acaba de definir se dispone
de dos ventanas. La primera permite ver gráficamente la transformación delespacio de entrada
en el de salida. Ésta se abre mediante la opción View->view surface. En nuestro ejemplo el
sistema sólo tiene una entrada y una salida, por lo que la superficie entrada-salida del sistema es
una gráfica en dos dimensiones, como aparece en la figura siguiente.

La segunda forma de visualizar el comportamiento del sistema permite analizar cómo


se obtiene la conclusión de una forma interactiva para distintos valores de entrada utilizando la
opción View->View rules. Los cambios realizados en los editores correspondientes se
reflejarán de forma automática en estas dos ventanas.

23

Potrebbero piacerti anche