Vous êtes sur la page 1sur 46

UNFUZZY - MANUAL DEL USUARIO

En este capítulo se presenta el Manual del Usuario de UNFUZZY; la


información en él contenida se ha incluido también en las opciones de
Ayuda sensitiva en línea del programa. Para la correcta interpretación de
las opciones que brinda UNFUZZY, se recomienda el lector revisar el
Capítulo 1, en el que se ha precisado la terminología empleada.

Se ha organizado este Manual de la siguiente forma: Un primer numeral de


Generalidades, en el que se muestran los pasos necesarios para instalar
UNFUZZY y leer un primer ejemplo desde disco; en el segundo numeral se
muestran las distintas opciones de diseño disponibles; el tercero resume los
pasos necesarios para el Diseño de un Sistema de Lógica Difusa; el cuarto
muestra las posibilidades de análisis e implementación que brinda
UNFUZZY; el quinto enseña cómo entenar un Sistema de Lógica Difusa; y
finalmente se ha reservado el sexto numeral para presentar algunas
consideraciones sobre la implementación de Sistemas de Lógica Difusa
empleando el código fuente C y/o C++ generado por UNFUZZY.

Generalidades

El propósito de UNFUZZY es brindar al usuario un ambiente de trabajo


adecuado para el diseño, simulación e implementación de Sistemas de
Lógica Difusa como los definidos en el Capítulo 1.

Requerimientos

Los requirimientos de Hardware de UNFUZZY son los mismos que se


tienen para Windows95 ó WindowsNT, que son las plataformas sobre las
cuales funciona el programa; adicionalmente, se necesitan 2Mb de espacio
disponible en disco duro para su instalación básica, 10Mb adicionales si se
desean instalar los ejemplos de aplicación, 18Mb adicionales si se desean
instalar los archivos del informe escrito, y 12 Mb adicionales para instalar
los archivos del código fuente con los recursos.

Instalación
Los discos que acompañan a este texto incluyen la versión comprimida
(.ZIP) de UNFUZZY; los pasos a seguir para instalar el programa son los
siguientes:

1. Cree un nuevo directorio en el disco duro (p.ej. UNFUZZY)


2. Copie desde el disco 1 el archivo PKUNZIP.EXE en ese directorio.
3. Inserte el disco 1 en el drive y ejecute el comando
>PKUNZIP -d a:UNFUZZY.ZIP

El comando anterior debe descomprimir UNFUZZY.ZIP en los siguientes


archivos
UNFUZZY.EXE : versión ejecutable del programa
BWCC32.DLL : librería de BorlandC para el manejo de la interfaz
gráfica en 32 bits
EJEMPLO.DIF : un primer ejemplo para probar UNFUZZY
FUZZY.HPP : archivo con el encabezado de las clases necesarias para
utilizar el código C++ generado por UNFUZZY.
FUZZY.CPP : archivo con las funciones de las clases necesarias para
utilizar el código C++ generado por UNFUZZY.
EJEMPLO.DIF : un primer ejemplo para probar UNFUZZY. Este
archivo se copia en el subdirectorio EJEMPLOS

4. Si desea instalar los tres ejemplos de aplicación, inserte el disco 2 en el


drive y ejecute el comando >PKUNZIP -d a:UNFUZAPL.ZIP. Cuando
se le solicite que insertar un nuevo disco, inserte el disco 3.
5. Si desea instalar los archivos del Informe escrito que acompañan al
programa, en formato WORD 6.0, inserte el disco 4 en el drive y ejecute
el comando >PKUNZIP -d a:UNFUZDOC.ZIP
6. Si desea instalar los archivos con el código fuente, inserte el disco 5 en el
drive y ejecute el comando >PKUNZIP -d a:UNFUZSRC.ZIP
7. Desde Windows95 ó Windows NT ejecute el programa UNFUZZY,
identificado por el ícono que se muestra en la figura 4.1

Figura 0.1 Ícono de UNFUZZY

Un primer ejemplo
En las siguientes líneas se explica cómo leer desde disco un archivo de
ejemplo suministrado con UNFUZZY, para tener un contacto inicial con las
opciones de diseño y análisis que brinda el programa.

Una vez instalado y ejecutado UNFUZZY, aparece en la pantalla una


ventana como la que se muestra en la figura 4.2; En la barra de
herramientas sólo aparece habilitada la primer opción, que permite Leer
archivos en disco; emplee esta opción para leer el archivo EJEMPLO.DIF,
que ha quedado grabado en el directorio en que aparece
UNFUZZY\EJEMPLOS; esta operación tambien la puede efectuar con el
comando Leer disponible en la opción Archivo del Menú principal.

Figura 0.2 Ventana de UNFUZZY

Despues de Leer Ejemplo.dif, aparece en la pantalla una ventana como la


mostrada en la figura 4.3. Este archivo corresponde a un Sistema de Lógica
Difusa cuyas principales características son:

1. Número de Variables de Entrada: 3


2. Número de Variables de Salida: 2
3. Número de Reglas en la Base de Reglas : 125
4. Nombre de las Variables de Entrada :
Entrada 1
Entrada 2
Entrada 3
5. Nombre de las Variables de Salida :
Salida 1
Salida 2
6. Número de Valores Lingüísticos definidos para cada Variable de
Entrada:
Entrada 1 : 5
Entrada 2 : 5
Entrada 3 : 5
7. Número de Valores Lingüísticos definidos para cada Variable de Salida:
Salida 1 : 5
Salida 2 : 5
8. Tipo de difusores empleados para cada Variable de Entrada:
Entrada 1 : Singlenton
Entrada 2 : Singlenton
Entrada 3 : Singlenton
9. Tipo de Concresores empleados para cada Variable de Salida
Salida 1 : Altura
Salida 2 : Altura
10. Principales operadores matemáticos empleados:
AND : mímino
Composición : max-mínimo
Implicación : mínimo
Unión : máximo

Figura 0.3 Ventana de Trabajo - Archivo EJEMPLO.DIF

Figura 0.4 Barra de Herramientas de UNFUZZY

Primeros cálculos

El ejemplo leido de disco es un Sistema de Lógica Difusa previamente


diseñado; quizás lo primero que el usuario desee hacer sea calcular cuáles
son los valores de las salidas para unas ciertas entradas; para ello, el usuario
debe efectuar una cualquiera de las siguientes dos operaciones:

1. Ejecutar el Comando Calcular del Menú Analizador


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Calcular, que se muestra en la figura 4.5. Para calcular las salidas
concretas del Sistema de Lógica Difusa el usuario debe seguir los
siguientes pasos:

1. Informar al programa cuáles son los valores concretos de entrada: para


ello debe efectuar un doble 'click' sobre cada variable de Entrada de la
Lista Entradas, con lo que despliega un cuadro de diálogo en el que
puede editar el valor de entrada.
2. Hacer 'click' sobre el boton Calcular

Como respuestas a estas acciones, UNFUZZY calculará las salidas y las


escribirá en la lista Salidas.

Figura 0.5 Cuadro de Diálogo Calcular

Cálculo Paso a Paso

Si bien este primer cálculo resume todas las operaciones del Sistema de
Lógica Difusa, en ocasiones es deseable tener un conocimiento sobre los
pasos intermedios que llevaron a obtener tal resultado; para ello, el usuario
debe efectuar una cualquiera de las siguientes dos operaciones:

1. Ejecutar el Comando Calcular Paso a Paso del Menú Analizador


2. Utilizar el Ícono de la Barra de Herramientas que se muestraen la figura
4.4

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Calcular Paso a Paso, que se muestra en la figura 4.6. Para
calcular paso a paso las salidas concretas del Sistema de Lógica Difusa el
usuario debe seguir los siguientes pasos:

1. Informar al programa cuáles son los valores concretos de entrada: para


ello debe efectuar un doble 'click' sobre cada variable de Entrada de la
Lista Entradas, con lo que despliega un cuadro de diálogo en el que
puede editar el valor de entrada.
2. Hacer 'click' sobre el botón Siguiente Paso; como respuesta a esta acción
UNFUZZY muestra los Conjuntos Difusos asociados a los Valores
Lingüísticos de las Variables de Entrada, y señala el Difusor
correpondiente a la entrada definida en el paso anterior. El usuario puede
seleccionar la Variable de Entrada que desea visualizar, mediante la lista
Difusor. Adicionalmente, UNFUZZY indica que se ha efectuado el
primero de cinco pasos ("Paso 1/5").
3. Hacer 'click' sobre el botón Siguiente Paso; como respuesta a esta acción
UNFUZZY muestra las reglas que se activan con los difusores a que se
refiere el paso 2. Adicionalmente, UNFUZZY indica que se ha efectuado
el segundo de cinco pasos ("Paso 2/5").
4. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acción
UNFUZZY muestra las funciones de pertenencia de los Conjuntos
Difusos producidos como resultado de la inferencia sobre las reglas
activadas; El usuario puede seleccionar la Regla que desea visualizar,
mediante la lista Reglas Activas. Adicionalmente, UNFUZZY indica que
se ha efectuado el tercero de cinco pasos ("Paso 3/5").
5. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acción
UNFUZZY muestra la funcion de pertenencia del Conjunto Difuso
producido como resultado de la Unión o Intersección de las reglas
activadas a que se refiere el paso anterior. Adicionalmente, UNFUZZY
indica que se ha efectuado el cuarto de cinco pasos ("Paso 4/5").
6. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acción
UNFUZZY calcula los valores concretos de las Variables de Salida
correpondientes a los valores Concretos de Entradas especificados en el
paso 1, y lo muestra en la figura a que hace referencia el paso anterior.
Adicionalmente, UNFUZZY indica que se ha efectuado el quinto de
cinco pasos ("Paso 5/5").
Los pasos 2 a 6 pueden efectuarse en un sólo paso, empleando el botón
Todos los Pasos; El botón Paso Inicial devuelve el cuadro de diálogo a su
estado inicial.

Figura 0.6 Cuadro de Diálogo Calcular Paso A Paso

Modificaciones al Universo de Entrada

En este punto es posible que el usuario esté interesado en averiguar cómo


se diseñaron las Variables Lingüísticas de los Universos de Entrada y
Salida, y quizás probar sus propios diseños; a continuación se muestra
cómo modificar el Universo de Entrada (para modificar el Universo de
Salida los pasos son muy similares): el usuario deberá efectuar una
cualquiera de las siguientes tres operaciones:

1. Ejecutar el Comando Definir Variable del Menú Entradas


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4
3. hacer doble 'click' en el figura que representa el Universo de Entrada en
la ventana de Trabajo (ver figura 4.3)

Con cualquiera de las tres opciones anteriores se despliega el cuadro de


Diálogo Definir Variable de Entrada, que se muestra en la figura 4.7. Las
figuras que allí se muestran corresponden a las funciones de pertenencia de
los valores lingüísticos de la variable de entrada seleccionada en la lista
Variable, y su difusor; el usuario puede entonces modificar el diseño del
Universo de Entrada de la siguiente forma:

1. Generalidades de las Variables Lingüísticas: Mediante el botón Definir


Variable se pueden modificar tanto el nombre de cada variable, como su
Universo de Discurso.
2. Número de Variables de Entrada: Mediante los botones Adicionar
Variable y Eliminar Variable se agregan o retiran Variables
Lingüísticas.
3. Tipo de difusor: Mediante la lista difusor se selecciona el difusor de cada
Variable Lingüística.
4. Función de pertenencia del difusor: Mediante el botón Definir Difusor se
ajusta la función de pertenencia del difusor.
5. Función de pertenencia de un valor Lingüístico: El usuario debe primero
seleccionar el Valor Lingüístico deseado mediante la lista Conjunto
(UNFUZZY dibuja con color verde el Conjunto seleccionado); después
de lo cuál el usuario puede:
- Editar gráficamente: presionar el botón izquierdo del ratón cuando el
cursor está ubicado sobre uno de los puntos de control (marcados por un
pequeño cuadrado verde) y arrastrar (con el botón presionado) el punto
hasta el lugar deseado.
- Editar los parámetros : Mediante el botón Definir Conjunto.
- Modificar el Tipo de Conjunto: Mediante la lista Tipo de Conjunto.

Para ver otras opciones de edición del Universo de Entrada, el lector puede
remitirse al numeral 4.3.1.
Figura 0.7 Cuadro de Diálogo Definir Variable de Entrada

Modificaciones a la Base de Reglas

Si el usuario está interesado en conocer la Base de Reglas, y en modificarla,


entonces deberá efectuar una cualquiera de las siguientes tres operaciones:

1. Ejecutar el Comando Reglas del Menú Inferencia


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4
3. hacer doble 'click' en el figura que representa la Base de Reglas en la
ventana de Trabajo (ver figura 4.3)

Con cualquiera de las tres opciones anteriores se despliega el cuadro de


Diálogo Definir Base de Reglas, que se muestra en la figura 4.8. Cada regla
se compone de un Antecedente y un Consecuente; las modificaciones que
pueden efectuarse son las siguientes:

Modificaciones en el Antecedente: Pueden introducirse Modificadores


Lingüísticos en cada uno de los términos del Antecedente; para ello debe
seleccionarse el término deseado en la lista que muestra la Regla, y luego
modificar la caja de edición Modificador Lingüístico con la barra de
desplazamiento ubicada a la derecha de la caja.

Modificaciones en el consecuente: Pueden cambiarse los términos del


consecuente; para ello debe seleccionarse el término deseado en la lista que
muestra la Regla, con lo cual la lista Consecuente muestra los posibles
valores lingüísticos que puede tomar el término deseado; el usuario debe
escoger el nuevo valor lingüístico.

Si el usuario desea cambiar los términos del Antecedente, debe emplear la


opción Ir A... (ver numeral 4.3.3.2.5); de esta forma se asegura que no se
escriban dos reglas con el mismo Antecedente y distinto Consecuente.

Para consultar o modificar otra Regla, el usuario debe emplear las opciones
Siguiente, Anterior, o Ir A.... Para ver otras opciones de edición de la Base
de Reglas, el lector puede remitirse al numeral 4.3.3.

Figura 0.8 Cuadro de Diálogo Definir Base de Reglas

Modificaciones a la Máquina de Inferencia

Si el usuario esté interesado en modificar alguna de las opciones


matemáticas de la Máquina de Inferencia, entonces deberá efectuar una
cualquiera de las siguientes tres operaciones:
1. Ejecutar el Comando Opciones Matemáticas del Menú Inferencia
2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4
3. hacer doble 'click' en el figura que representa la Máquina de Inferencia
en la ventana de Trabajo (ver figura 4.3)

Con cualquiera de las tres opciones anteriores se despliega el cuadro de


Diálogo Opciones Matemáticas para los procesos de Inferencia y
Concreción, que se muestra en la figura 4.9. Las cuatro listas que allí
aparecen permiten al usuario seleccionar distintos operadores para las
funciones AND, la Composición, la Implicación, y para la Unión o
Intersección que efectúan algunos Concresores.

Figura 0.9 Cuadro de Diálogo


Opciones Matemáticas para los procesos de Inferencia y Concreción

Generación de Tablas

La opción de Generación de Tablas permite al usuario crear un archivo de


texto en el que se tabulan las salidas concretas para todas las posibles
combinaciones de los valores concretos de entrada; para ello el usuario
deberá efectuar una cualquiera de las siguientes dos operaciones:

1. Ejecutar el Comando Generar Tabla del Menú Analizador


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Generar Tabla, que se muestra en la figura 4.10. Al empler el
botón Generar el programa calculará las salidas concretas para todas las
posibles entradas, y creará una tabla que se puede grabar en disco mediante
el botón Salvar.

Figura 0.10 Cuadro de Diálogo Generar Tabla

Generación de Código Fuente

La opción de Generación de Código Fuente permite al usuario crear un


archivo de texto con el código fuente C ó C++ necesario para implementar
el Sistema de Lógica Difusa diseñado; para ello el usuario deberá efectuar
una cualquiera de las siguientes dos operaciones:

1. Ejecutar el Comando Generar Código del Menú Analizador


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4
Con cualquiera de las dos opciones anteriores se despliega el cuadro de
Diálogo Generar Código, que se muestra en la figura 4.11. Al emplear el
botón Generar el programa generará el código fuente C ó C++ (según la
selección del usuario), que se puede grabar en disco mediante el botón
Salvar.

Para ver detalles sobre el código fuente generado, el lector puede remitirse
a los numerales 4.4.5. y 4.6.

Figura 0.11 Cuadro de Diálogo Generar Código

Opciones de Diseño

UNFUZZY permite que el usuario seleccione distintos parámetros del


Sistema de Lógica Difusa; las Tablas 4.1 a 4.6 resumen estas opciones,
clasificándolas en Tipo de Conjuntos Difusos, Tipo de Difusores, Tipo de
Concresores, Opciones Matemáticas, Normas e Implicaciones.

Implicación AND Composición Unión/Intersección


Mínimo Mínimo Mínimo Máximo
Producto Producto Producto Suma Acotada
Kleene-Dienes Producto Acotado Producto Acotado Suma Drástica
Lukasiewcz Producto Drástico Producto Drástico Mínimo
Zadeh Familia Tp Familia Tp Producto
Estocástica Familia Hamacher Familia Hamacher Producto Acotado
Goguen Familia Sugeno Familia Sugeno Producto Drástico
Gödel Familia Frank Familia Frank Familia Tp
Aguda Familia Yager Familia Yager Familia Hamacher
Familia Dubois-Prade Familia Dubois-Prade Familia Sugeno
Familia Frank
Familia Yager
Familia Dubois-Prade
Tabla 4.1
Opciones de la Máquina de Inferencia

Tipo Descripción1
Tipo L Conjunto Difuso con función de pertenencia
⎧1,x < a

f(x) = ⎨(b − x)/(b − a),a > x > b
⎪0,x > b

Triangulo Conjunto Difuso con función de pertenencia
⎧0,x < a
⎪(x − b)/(a − b),a > x > b

f(x) = ⎨
⎪(c − x)/(c − b),b > x > c
⎪⎩0,x > c
Pi Conjunto Difuso con función de pertenencia
⎧0,x < a
⎪(x − b)/(a − b),a > x > b
⎪⎪
f(x) = ⎨1, b > x > c
⎪(d − x)/(d − c),c > x > d

⎩⎪0,x > d
Tipo Gamma Conjunto Difuso con función de pertenencia
⎧0,x < a

f(x) = ⎨(x − a)/(b − a),a > x > b
⎪1,x > b

Tipo Z Conjunto Difuso con función de pertenencia
⎧1,x < a

⎪1 − 2((x − a)/(b − a)) , a > x > (a + b) / 2
2

f(x) = ⎨
⎪2((x − b)/(b − a)) ,(a + b) / 2 > x > b
2

⎪0,x > b

Campana Conjunto Difuso con función de pertenencia

1
En esta tabla, a,b,c,d son reales definidos dentro del Universo de Discurso
de la Variable Lingüística que contiene al ConjuntoDifuso, que satisfacen
a<b<c<d.
⎧0,x < a

⎪2((x − a)/(b − a)) ,a > x > (a + b) / 2
2

⎪⎪1 − 2((x − b)/(b − a)) 2 ,(a + b) / 2 > x > b


f(x) = ⎨
⎪1 − 2((x − b)/(c − b)) ,b > x > (b + c) / 2
2

⎪2((x − c)/(c − b)) 2 ,(b + c) / 2 > x > c



⎪⎩0,x > c
PiCampana Conjunto Difuso con función de pertenencia
⎧0,x < a

⎪2((x − a)/(b − a)) ,a > x > (a + b) / 2
2

⎪1 − 2((x − b)/(b − a)) 2 ,(a + b) / 2 > x > b


⎪⎪
f(x) = ⎨1, b > x > c

⎪1 − 2((x − c)/(d − c)) ,c > x > (c + d ) / 2
2

⎪2((x − d)/(d − c)) 2 ,(c + d ) / 2 > x > d



⎪⎩0,x > d
Tipo S Conjunto Difuso con función de pertenencia
⎧0,x < a

⎪2((x − a)/(b − a)) ,a > x > (a + b) / 2
2

f(x) = ⎨
⎪1 − 2((x − b)/(b − a)) ,(a + b) / 2 > x > b
2

⎪1,x > b

Singlenton Conjunto Difuso con función de pertenencia
⎧0,x ≠ x 0
f(x) = ⎨
⎩1,x = x 0
Tabla 4.2
Tipos de Conjuntos Difusos Disponibles

Tipo Descripción
Triangulo difusor que genera Conjuntos Difusos tipo Triangulo
Pi difusor que genera Conjuntos Difusos tipo Pi
Campana difusor que genera Conjuntos Difusos tipo Campana
PiCampana difusor que genera Conjuntos Difusos tipo PiCampana
Singlenton difusor que genera Conjuntos Difusos tipo Singlenton
Tabla 4.3
Tipos de Difusores Disponibles

Tipo Descripción
Mínimo T_Norma definida por la relación
f ( x , y ) = min( x , y )
Producto T_Norma definida por la relación
f ( x , y ) = xy
Producto Drastico T_Norma definida por la relación
⎧x, y = 1

f ( x, y) = ⎨ y, x = 1
⎪0, x ≠ 1 ANDy ≠ 1

Producto Acotado T_Norma definida por la relación
f ( x , y ) = max (0, x + y − 1)
Familia Tp T_Norma definida por la relación

[ ]
1/ p
f ( x , y ) = 1 − (1 − x ) p + (1 − y ) p − (1 − x ) p *(1 − y ) p
p ∈ℜ
Familia Hamacher T_Norma definida por la relación
xy
f ( x, y) =
p + (1 − p)( x + y − xy )
p≥0
Familia Sugeno T_Norma definida por la relación
f ( x , y ) = min(1, x + y + p − xy )
p ≥ −1
Familia Frank T_Norma definida por la relación
⎛ ( p x − 1)( p y − 1) ⎞
f ( x , y ) = log p ⎜ 1 + ⎟
⎝ p −1 ⎠
p>0
FamiliaYager T_Norma definida por la relación
f ( x , y ) = 1 − min(1, ((1 − a ) p + (1 − b) p ) 1/ p )
p≥0
Familia Dubois-Prade T_Norma definida por la relación
xy
f ( x, y) =
max ( x , y , p)
0≤ p≤1
Máximo T_Norma definida por la relación
f ( x , y ) = max ( x , y )
Suma Acotada T_Norma definida por la relación
f ( x , y ) = min(1, x + y )
Suma Drástica T_Norma definida por la relación
⎧x, y = 0

f ( x, y) = ⎨ y, x = 0
⎪1, x ≠ 1 ANDy ≠ 1

Tabla 4.4
Tipos de Normas Disponibles

Tipo Descripción
Producto Implicación de Ingeniería definida por la relación
f ( x , y ) = xy
Mínimo Implicación de Ingeniería definida por la relación
f ( x , y ) = min( x , y )
Kleene Dienes Implicación Lógica definida por la relación
f ( x , y ) = max(1 − x , y )
Lukasiewicz Implicación Lógica definida por la relación
f ( x , y ) = min(11
, − x + y)
Zadeh Implicación Lógica definida por la relación
f ( x , y ) = max (min( x , y ),1 − x )
Estocástica Implicación Lógica definida por la relación
f ( x , y ) = max (1 − x , xy )
Goguen Implicación Lógica definida por la relación
y
f ( x , y ) = min(1, )
x
Godel Implicación Lógica definida por la relación
⎧1, x ≤ y
f ( x, y) = ⎨
⎩ y, x > y
Aguda Implicación Lógica definida por la relación
⎧1, x ≤ y
f ( x, y) = ⎨
⎩0, x > y
Tabla 4.5
Tipos de Implicaciones Disponibles

Tipo Descripción2
Primer Máximo Concresor definido por la expresión
y * = inf { y ∈U | μ ( y) = sup μ B ( y )}
y ∈U

Último Máximo Concresor definido por la expresión


y * = sup{ y ∈U | μ ( y ) = sup μ B ( y )}
y ∈U

Media De Máximos Concresor definido por la expresión


y *1 = inf { y ∈U | μ ( y ) = sup μ B ( y )}
y ∈U

y *
2 = sup{ y ∈U | μ ( y ) = sup μ B ( y )}
y ∈U

( y *1 + y * 2 )
y* =
2
Centro De Gravedad Concresor definido por la expresión

∫ yμ B ( y )dy
y = * U

∫μ
U
B ( y )dy

Altura Concresor definido por la expresión

2
En esta tabla se supone que el Motor de Inferencia produce m Conjuntos
Difusos para la Variable de Salida en cuestión, que está definida sobre un
Universo de Discurso U; cada uno de los m conjuntos tiene una función de
pertenencia uBi(y), i=1,2,..m . Si el Concresor efectúa la Unión o la
Intersección de los m conjuntos, el resultado es un Conjunto Difuso B que
tiene función de pertenencia uB(y).
m

∑yμ
i i
Bi ( y)
i =1
y* = m

∑μ
i
Bi ( y )
i =1
i
y = centroAltura (i )
centroAltura(i) es un parámetro del Conjunto Difuso de la Variable de
Salida, que corresponde al Consecuente de la regla i; dicho parámetro
intenta representar el centro del Conjunto Difuso.
Tabla 4.6
Tipos de Concresores Disponibles

Diseño de un Sistema de Lógica Difusa

Para iniciar el diseño de un Sistema de Lógica Difusa, el usuario deberá


seleccionar la opción Nuevo del Menú Archivo, con lo cual aparecerá una
ventana como la mostrada en la figura 4.12; Esta ventana difiere de la que
se muestra en la figura 4.3, porque las figuras que representan a los
Universos de Entrada y Salida, así como la de la Base de Reglas muestran
que éstos no han sido diseñados aún.

Figura 0.12 Ventana de UNFUZZY para un Nuevo Sistema de Lógica


Difusa

El usuario debe entonces efectuar un proceso de cinco Pasos:

1. Diseñar el Universo de Entrada


2. Diseñar el Universo de Salida
3. Diseñar la Base de Reglas
4. Diseñar la Máquina de Inferencia
5. Asignar un comentario descriptivo

El orden en el que se deben efectuar estos pasos sólo está regido por las
siguientes reglas:

1. "El diseño de la base de reglas debe ser posterior al diseño de los


Universos de Entrada y de Salida".
2. "Algunos cambios en los Universos de Entrada o de Salida (como el
número de Valores Lingüísticos de alguna variable) implican una
redefinición de la Base de Reglas".

A continuación se presentan los cinco pasos arriba mencionados.

Paso 1 : Diseño del Universo de Entrada

El diseño del Universo de Entrada consiste en la definición de las Variables


Lingüísticas que lo forman, y de los difusores que acompañan a éstas.
UNFUZZY permite emplear tres caminos distintos para efectuar esta
definición:

Autodefinición de Universo Recto:

Con esta opción el usuario define cuántas Variables Lingüísticas desea en


su Universo de Entrada, y cuántos Valores lingüísticos desea para cada una
de ellas (todas las Variables tendrán igual número de Valores). Para ello el
usuario debe ejecutar el Comando Autodefinir Universo Recto del Menú
Entradas, con lo cual se despliega el cuadro de Diálogo Autodefinición de
Universos, que se muestra en la figura 4.13. UNFUZZY define entonces
cada Variable Lingüística con las siguientes especificaciones:

Nombre: Variable i (i es el número de la variable)


Universo de Discurso : [-1,1]
Intervalos de Evaluación : (n+1)*5 (n es el número de Valores
Lingüísticos)
Tipo de Difusor : Singlenton
Valores Lingüísticos:
Nombre : Conjunto j (j es el número del Conjunto)
Tipo : Triángulo para todos, salvo para el primero y el último, que
son tipo L y Gamma respectivamente.
Soporte : [-1+(j-1)(1-(-1))/(n+1) , -1+(j+1)(1-(-1))/(n+1)] (j es el
número del Conjunto, y n es el número de Valores Lingüísticos))

Figura 0.13 Cuadro de Diálogo Autodefinición de Universos

Autodefinición de Universo Curvo:

Esta opción es similar a la anterior, salvo por la forma de los Conjuntos


Difusos. Con esta opción el usuario define cuántas Variables Lingüísticas
desea en su Universo de Entrada, y cuántos Valores lingüísticos desea para
cada una de ellas (todas las Variables tendrán igual número de Valores).
Para ello el usuario debe ejecutar el Comando Autodefinir Universo Recto
del Menú Entradas, con lo cual se despliega el cuadro de Diálogo
Autodefinición de Universos, que se muestra en la figura 4.13. UNFUZZY
define entonces cada Variable Lingüística con las siguientes
especificaciones:

Nombre: Variable i (i es el número de la variable)


Universo de Discurso : [-1,1]
Intervalos de Evaluación : (n+1)*5 (n es el número de Valores
Lingüísticos)
Tipo de Difusor : Singlenton
Valores Lingüísticos:
Nombre : Conjunto j (j es el número del Conjunto)
Tipo : Campana para todos, salvo para el primero y el último, que
son tipo Z y S respectivamente.
Soporte : [-1+(j-1)(1-(-1))/(n+1) , -1+(j+1)(1-(-1))/(n+1)] (j es el
número del Conjunto, y n es el número de Valores Lingüísticos))
Definición de cada Variable Lingüística

Las opciones de Autodefinición de Universo Recto y Autodefinición de


Universo Curvo permiten efectuar una definición rápida, pero tiene como
inconveniente que UNFUZZY decide por el usuario todas los factores de
diseño. Si el usuario desea alterar esta definición, o si desea desde un
comienzo hacer su propia definición, debe entónces efectuar una cualquiera
de las siguientes tres operaciones:

1. Ejecutar el Comando Definir Variable del Menú Entradas


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4
3. hacer doble 'click' en el figura que representa al Universo de Entrada en
la ventana de Trabajo (ver figura 4.12)

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Variables del Universo de Entrada, que se muestra en la figura
4.14. La información que se despliega en ese Cuadro de Diálogo
corresponde a la Variable Lingüística seleccionada en la lista Nombre de la
Variable. Si no se ha definido previamente ningún Universo de Entrada, en
esta lista sólo debe aparecer la Variable Entrada 1.

En el Cuadro de Diálogo sobresalen dos figuras, una de ellas con el título


"Entrada 1", y la otra con el título "Difusor"; la primera corresponde a las
funciones de pertenencia de los valores lingüísticos de la variable de
entrada seleccionada en la lista Nombre de la Variable, y la segunda a la
función de pertenencia de su difusor.
Figura 0.14 Cuadro de Diálogo Definir Variable de Entrada

Para modificar el diseño del Universo de Entrada el usuario tiene las


siguientes opciones:

Definir Variable:

El botón Definir Variable invoca el cuadro de diálogo que se muestra en la


figura 4.15. El usuario puede entonces modificar:
Nombre: Es una etiqueta que se asigna a la Variable Lingüística
Valor Mínimo: es el límite inferior del Universo de Discurso de la Variable
Lingüística
Valor Máximo: es el límite superior del Universo de Discurso de la
Variable Lingüística
Intervalos de Evaluación: es el número de Intervalos en el que UNFUZZY
fraccionará el Universo de Discurso de las variables de Entrada, cuando se
emplee la opción Generar Tabla (ver numeral 4.4.4)
Figura 0.15 Cuadro de Diálogo Definción de Variable

Insertar Variable

El botón Insertar Variable permite adicionar una variable Lingüística más


al Universo de Entrada; para ello, invoca el mismo cuadro de diálogo de la
figura 4.15, autodefine tres valores lingüísticos con conjuntos difusos de
forma recta, y asigna un difusor Singlenton. La nueva Variable se ubica a
continuación de la que en ese momento esté seleccionada en la lista
Nombre de la Variable.

Eliminar Variable

El botón Eliminar Variable permite eliminar una variable Lingüística del


Universo de Entrada; UNFUZZY solicitá una confirmación antes de
proceder a eliminarla.

Tipo de Difusor

Mediante la lista Difusor se puede modificar el tipo de Difusor asociado a


la Variable Lingüística de Entrada.

Definir Difusor

El Difusor es un Conjunto Difuso cuyo centro cambia con cada Entrada


Concreta, pero cuya forma se mantiene. El botón Definir Difusor permite
modificar los parámetros que definen la forma del Conjunto Difuso; para
ello invoca un cuadro de diálogo como el que se muestra en la figura 4.16.
El cuadro de diálogo puede tener una apariencia diferente, dependiendo del
tipo de Difusor que se haya seleccionado (ver numeral 4.3.1.3.4).

Figura 0.16 Cuadro de Diálogo Definir Difusor

Puntos de Evaluación

En el proceso de Inferencia, UNFUZZY debe efectuar la composición de la


función de pertenencia de los conjuntos producidos por los Difusores, y las
funciones de pertenecia asociadas a las implicaciones (ver numeral 1.2.4);
Para calcular esta composición, debería evaluarse el máximo sobre todos
los valores de los Universos de Discurso de las Entradas, sin embargo, el
máximo sólo puede presentarse en los soportes de los conjuntos producidos
por los difusores; es por ello que UNFUZZY sólo evalúa en estos soportes,
y la evaluación la hace sobre un conjunto finito de puntos, que el usuario
puede determinar mediante el botón Puntos de Evaluación. Al emplear este
botón se abre un Cuadro de Diálogo como el que se muestra en la figura
4.17.

Figura 0.17 Cuadro de Diálogo Puntos de Evaluación

Edición gráfica de los Valores Lingüísticos


Uno de los Conjuntos Difusos cuyas funciones de pertenencia se muestran
en el Cuadro de Diálogo está dibujado en color verde, mientras los demás
lo están en amarillo. El conjunto en verde corresponde al seleccionado en la
lista Nombre del Conjunto; este conjunto presentará varios Puntos de
Control, señalizados por un pequeño cuadrado de color verde; el número de
puntos de control y su ubicación dependen del Tipo de Conjunto. Si el
usuario ubica el ratón en uno de los puntos de control y presiona el botón
izquierdo, notará que el cursor cambia de apariencia; si ahora el usuario
arrastra el ratón y luego libera el botón izquierdo, notará que la función de
pertenencia del conjunto ha sido modificada. De esta forma, puede tenerse
una edición gráfica de los Conjuntos Difusos asociados a cada Valor
Lingüístico.

Definir Conjunto

El botón Definir Conjunto invoca un cuadro de diálogo como el que se


muestra en la figura 4.16; el cuadro puede tener una apariencia diferente
según sea el Tipo de Conjunto seleccionado en la lista Nombre del
Conjunto (el mismo que se presenta en color verde). El usuario puede
entonces modificar a dicho conjunto:

Nombre: Es una etiqueta que se asigna a la Variable Lingüística


Parámetros: son los valores que determinan la forma de la función de
pertenencia, y cuyo significado se muestra en la figura del Cuadro de
Diálogo. El número de parámetros depende del tipo de Conjunto.

En el mismo Cuadro de Diálogo se muestran los valores mínimo y máximo


del Universo de Discurso de la Variable Lingüística; estos valores no
pueden modificarse aquí, pero sirven de referencia para la definición de los
parámetros.

Insertar Conjunto

El botón Insertar Conjunto permite adicionar un Valor Lingüístico más a la


Variable Lingüística; para ello, invoca el cuadro de diálogo de la figura
4.18. El usuario puede entonces seleccionar un nombre y un Tipo de
Conjunto para el valor Lingüístico.
Figura 0.18 Cuadro de Diálogo Insertar Conjunto

Eliminar Conjunto

El botón Eliminar Conjunto permite eliminar un Valor Lingüístico de la


variable lingüística; UNFUZZY solicitá una confirmación antes de
proceder a eliminarla.

Tipo de Conjunto

Mediante la lista Tipo de Conjunto el usuario puede modificar la forma de


la función de pertenencia del conjunto seleccionado en la lista Nombre del
Conjunto (el mismo que se presenta en color verde).

Autodefinir Variable

El botón Autodefinir permite efectuar una definición rápida de los Valores


Lingüísticos de la Variable; para ello invoca el cuadro de diálogo que se
muestra en la figura 4.19, para que el usuario decida cuántos Valores desea,
y si los quiere con funciones de pertenencia de forma recta o curva; a
continuación UNFUZZY efectuará una definición similar a la explicada en
los numerales 4.3.1.1 y 4.3.1.2, pero sólo para la Variable Lingüística
seleccionada en la lista Nombre de la variable.
Figura 0.19 Cuadro de Diálogo Autodefinición de Variables

Paso 2: Diseño del Universo de Salida:

El diseño del Universo de Salida consiste en la definición de las Variables


Lingüísticas que lo forman, y de los concresores que acompañan a éstas.
UNFUZZY permite emplear tres caminos distintos para efectuar esta
definición, que son del todo análogos a empleados para definir el Universo
de Entrada (ver numeral 4.3.1). Las diferencias existentes en las
definiciones de los dos Universos son las siguientes:

Autodefinición de Universos Rectos o Curvos

A cada variable de Salida se le asigna un concresor del tipo Altura, en lugar


de un difusor.

Intervalos de Evaluación

El item Intervalos de Evaluación al que se hace referencia en el numeral


4.3.1.3.1 tiene un significado diferente para las variables de Salida: Este
intervalo se refiere a la discretización que UNFUZZY hará para calcular el
valor concreto de los conjuntos difusos producidos por el Motor de
Inferencia.

Concresores en lugar de Difusores

Como las variables de salida no requieren de difusores, se han eliminado


las opciones a que hacen referencia los numerales 4.3.1.3.4, 4.3.1.1.5 y
4.3.1.3.6; en su lugar se ha incluido una lista Concresor, con la que el
usuario puede seleccionar el tipo de Concresor asociado a cada Variable
Lingüística de Salida.
Paso 3: Diseño de la Base de Reglas

El diseño de la Base de Reglas consiste en la definición de un conjunto de


reglas, cada una de las cuales está conformada por un Antecedente y un
Consecuente; éstos, a su vez, están definidos por términos de la fórma
Variable Lingüística i es Valor Lingüístico j; en donde Variable Lingüística
i es una de las variables que forman parte del Universo de Entrada (si se
trata de un Antecedente) o de Salida (si se trata de un consecuente), y Valor
Lingüístico j es uno de los Valores que puede tomar Variable Lingüística i;
adicionalmente, cada término del Antecedente puede estar acompañado de
un Modificador Lingüístico (que por defecto es 1.0), cuyo significado será
el de adicionar el calificativo muy (si es mayor que 1.0) o poco (si es menor
que 1.0).

Para definir la Base de Reglas, el usuario tiene dos posibles caminos:

Definición Rápida

Con esta opción UNFUZZY ayuda al usuario a definir una Base de Reglas
de forma rápida; para utilizar esta opción, el usuario debe ejecutar el
Comando Definición Rápida del Menú Inferencia, con lo cual se despliega
el cuadro de Diálogo Definición Rápida de Reglas, que se muestra en la
figura 4.20. Con este Cuadro el usuario puede efectuar las siguientes tareas:

Figura 0.20 Cuadro de Diálogo Definición Rápida de Reglas


Definición de una base completa de reglas

Al emplear el botón Definir Conjunto Completo de Reglas UNFUZZY


borra todas las reglas existentes en la base, y crea una Base con tantas
Reglas como posibles combinaciones de los Valores Lingüisticos de las
variables de Entrada sean posibles, y asigna a cada Regla un antecedente
con cada una de dichas combinaciones; otras características de la Base
creada son las siguientes:

- Los Modificadores Lingüísticos de todos los términos de los


Antecedentes de todas las Reglas se asignan en 1.0.

- Todos los términos de los Consecuentes de todas las reglas se asignan


en el primer Valor Lingüístico de la variable de Salida correspondiente.

Definición de una base con tendencia creciente

Al emplear el botón Tendencia Creciente UNFUZZY efectúa una


operación sobre todas las reglas definidas en ese momento, para asignar los
términos de los Consecuentes que se relacionan con la variable de salida
seleccionada en la lista Variable de Salida, según un algoritmo interno que
intenta incrementar el Valor Lingüístico de Salida, conforme se
incrementan los Valores Lingüísticos de las Entradas.

Definición de una base con tendencia decreciente

Al emplear el botón Tendencia Decreciente UNFUZZY efectúa una


operación sobre todas las reglas definidas en ese momento, para asignar los
términos de los Consecuentes que se relacionan con la variable de salida
seleccionada en la lista Variable de Salida, según un algoritmo interno que
intenta incrementar el Valor Lingüístico de Salida, conforme se
decrementan los Valores Lingüísticos de las Entradas.

Definición de una base con tendencia constante

Al emplear el botón Tendencia Constante UNFUZZY efectúa una


operación sobre todas las reglas definidas en ese momento, para asignar los
términos de los Consecuentes que se relacionan con la variable de salida
seleccionada en la lista Variable de Salida, fijándolo en el Valor
Lingüístico que este seleccionado en la lista que aparece en el Cuadro de
Diálogo.

Definición de Cada Regla

Con esta opción UNFUZZY ayuda al usuario a definir una a una las Reglas
que forman la Base; para utilizar esta opción, el usuario debe efectuar una
cualquiera de las siguientes tres operaciones:

1. Ejecutar el Comando Reglas del Menú Inferencia


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4
3. hacer doble 'click' en el figura que representa la Base de Reglas en la
ventana de Trabajo (ver figura 4.3)

Con cualquiera de las tres opciones anteriores se despliega el cuadro de


Diálogo Definición de las Reglas de la Máquina de Inferencia, que se
muestra en la figura 4.21. En la parte superior del Cuadro de Diálogo se
muestra el número de la regla cuya información se está desplegando, y el
número total de reglas definidas en la Base. En la lista principal del Cuadro
se despliga la Regla, empleando un renglón para cada uno de los términos
del Antecedente y del Consecuente; hay también dos renglones "muertos"
empleados por las palabras IF y THEN, que sirven de encabezados al
Antecedente y el Consecuente, respectivamente.
Figura 0.21 Cuadro de Diálogo Definición de Reglas

Las opciones que permite el Cuadro de Diálogo son las siguientes

Modificaciones en el Antecedente

Pueden introducirse Modificadores Lingüísticos en cada uno de los


términos del Antecedente; para ello debe seleccionarse el término deseado
en la lista que muestra la Regla, y luego modificar la caja de edición
Modificador Lingüístico con la barra de desplazamiento ubicada a la
derecha de la caja.

Modificaciones en el Consecuente

Pueden cambiarse los términos del consecuente; para ello debe


seleccionarse el término deseado en la lista que muestra la Regla, con lo
cual la lista Consecuente muestra los posibles valores lingüísticos que
puede tomar el término deseado; el usuario debe escoger el nuevo valor
lingüístico.

Siguiente Regla

El botón Siguiente despliega la información correspondiente a la siguiente


Regla en la Base

Anterior Regla

El botón Anterior despliega la información correspondiente a la anterior


Regla en la Base

Ir A....

El botón Ir A... permite ubicar rápidamente una regla dentro de la base y/o
adicionar nuevas reglas, para ello despliega el cuadro de diálogo Ir a... que
se muestra en la figura 4.22; La regla se identifica por los términos del
Antecedente, por lo tanto en este Cuadro de Diálogo no se incluye la
información del Consecuente.
Figura 0.22 Cuadro de Diálogo Ir A...

Para buscar una regla el usuario puede ubicarla por su número, mediante la
caja de edición Número de Regla, o mediante los términos del Antecedente
así:

1. Seleccione el primer término del Antecedente en la lista Antecedente; al


efectuar esta operación UNFUZZY desplegará los posibles Valores
Lingüísticos asociados a la Variable Lingüística del primer término en la
lista Conjuntos.
2. Seleccione el Valor Lingüístico deseado para el primer término, en la
lista Conjuntos.
3. Repita los pasos 1 y 2 con todos los términos del Antecedente.
4. Emplee el botón Buscar Regla

Como respuesta al último paso, UNFUZZY intentará ubicar en la Base de


Reglas cuál es la Regla cuyo antecedente coincide con el que se muestra en
la lista Antecedente; si no encuentra tal regla, le preguntará al usuario si
desea adicionarla a la Base.

De lo anterior es claro que para adicionar una regla, primero debe buscarse
en la Base, y si no existe, entonces aceptar cuando UNFUZZY le pregunte
si desea adicionarla.

Eliminar Regla

El botón Eliminar Regla elimina la regla actual de la base de reglas.

Eliminar Todas
El botón Eliminar Todas elimina todas las reglas de la base de reglas;
siempre subsistirá una regla, con lo que se impide que el programa entre en
inconsistencias internas.

Paso 4: Diseño del Motor de Inferencia

El diseño de la Máquina de Inferencia consiste en la selección de los


operadores matemáticos que debe emplear para los distintos cálculos
internos. Para llevar a acabo esta operación el usuario deberá efectuar una
cualquiera de las siguientes tres operaciones:

1. Ejecutar el Comando Opciones Matemáticas del Menú Inferencia


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4
3. hacer doble 'click' en el figura que representa la Máquina de Inferencia
en la ventana de Trabajo (ver figura 4.3)

Con cualquiera de las tres opciones anteriores se despliega el cuadro de


Diálogo Opciones Matemáticas, que se muestra en la figura 4.23. Las
cuatro listas que allí aparecen permiten al usuario seleccionar distintos
operadores para las funciones AND, la Composición, la Implicación, y para
la Unión o Intersección que efectúan algunos Concresores.

Al seleccionar algunas de las opciones (las familias de T_Normas)


UNFUZZY preguntará al usuario por un parámetro que permite especificar
completamente el operador (ver numeral 4.2)
Figura 0.23 Cuadro de Diálogo Opciones Matemáticas

Paso 5: Comentario Descriptivo

Para asignar un breve comentario descriptivo el usuario debe seleccionar la


opción Descripción del menú Archivo, con lo cual se desplegará un Cuadro
de Diálogo para que el usuario escriba un comentario de máximo 80
caracteres; dicho comentario se desplegará en la ventana de trabajo del
Sistema de Lógica Difusa.

Análisis e implementación de un Sistema de Lógica Difusa

Para acceder a las opciones de análisis e implementación, el usuario deberá


haber completado el proceso de diseño descrito en el numeral 4.3, luego de
lo cual el usuario tendrá las siguientes posibilidades:

Cálculo de Salidas

Esta opción permite calcular cuáles son los valores concretos de las
Variables de Salida para unos ciertos valores concretos de las Variables de
entrada; para ello, el usuario debe efectuar una cualquiera de las siguientes
dos operaciones:
1. Ejecutar el Comando Calcular del Menú Analizador
2. Utilizar el Ícono de la Barra de Herramientas que se muestraen la figura
4.4

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Calcular, que se muestra en la figura 4.24. Para calcular las salidas
concretas del Sistema de Lógica Difusa el usuario debe seguir los
siguientes pasos:

1. Informar al programa cuáles son los valores concretos de entrada: para


ello debe efectuar un doble 'click' sobre cada variable de Entrada de la
Lista Entradas, con lo que despliega un cuadro de diálogo en el que
puede editar el valor de entrada.
2. Hacer 'click' sobre el boton Calcular

como respuestas a estas acciones, UNFUZZY calculará las salidas y las


escribirá en la lista Salidas.

Figura 0.24 Cuadro de Diálogo Calcular

Cálculo Paso a Paso

Esta opción permite calcular cuáles son los valores concretos de las
Variables de Salida para unos ciertos valores concretos de las Variables de
entrada, mostrando los pasos intermedios que llevaron a obtener tal
resultado; para acceder a esta opción el usuario debe efectuar una
cualquiera de las siguientes dos operaciones:

1. Ejecutar el Comando Calcular Paso a Paso del Menú Analizador


2. Utilizar el Ícono de la Barra de Herramientas que se muestraen la figura
4.4

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Calcular Paso a Paso, que se muestra en la figura 4.25. Para
calcular paso a paso las salidas concretas del Sistema de Lógica Difusa el
usuario debe seguir los siguientes pasos:

1. Informar al programa cuáles son los valores concretos de entrada: para


ello debe efectuar un doble 'click' sobre cada variable de Entrada de la
Lista Entradas, con lo que despliega un cuadro de diálogo en el que
puede editar el valor de entrada.
2. Hacer 'click' sobre el botón Siguiente Paso; como respuesta a esta acción
UNFUZZY muestra los Conjuntos Difusos asociados a los Valores
Lingüísticos de las Variables de Entrada, y señala el Difusor
correpondiente a la entrada definida en el paso anterior. El usuario puede
seleccionar la Variable de Entrada que desea visualizar, mediante la lista
Difusor. Adicionalmente, UNFUZZY indica que se ha efectuado el
primero de cinco pasos ("Paso 1/5").
3. Hacer 'click' sobre el botón Siguiente Paso; como respuesta a esta acción
UNFUZZY muestra las reglas que se activan con los difusores a que se
refiere el paso 2. Adicionalmente, UNFUZZY indica que se ha efectuado
el segundo de cinco pasos ("Paso 2/5").
4. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acción
UNFUZZY muestra las funciones de pertenencia de los Conjuntos
Difusos producidos como resultado de la inferencia sobre las reglas
activadas; El usuario puede seleccionar la Regla que desea visualizar,
mediante la lista Reglas Activas. Adicionalmente, UNFUZZY indica que
se ha efectuado el tercero de cinco pasos ("Paso 3/5").
5. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acción
UNFUZZY muestra la funcion de pertenencia del Conjunto Difuso
producido como resultado de la Unión o Intersección de las reglas
activadas a que se refiere el paso anterior. Adicionalmente, UNFUZZY
indica que se ha efectuado el cuarto de cinco pasos ("Paso 4/5").
6. Hacer 'click' sobre el botón Siguiente Paso como respuesta a esta acción
UNFUZZY calcula los valores concretos de las Variables de Salida
correpondientes a los valores Concretos de Entradas especificados en el
paso 1, y lo muestra en la figura a que hace referencia el paso anterior.
Adicionalmente, UNFUZZY indica que se ha efectuado el quinto de
cinco pasos ("Paso 5/5").
Los pasos 2 a 6pueden efectuarse en un sólo paso, empleando el botón
Todos los Pasos; El botón Paso Inicial devuelve el cuadro de diálogo a su
estado inicial.

Figura 0.25 Cuadro de Diálogo Calcular Paso A Paso

Función de Transferencia

La opción de Función de Transferencia permite al usuario visualizar la


relación existente entre las Entradas y las Salidas; para ello el usuario
deberá efectuar una cualquiera de las siguientes dos operaciones:

1. Ejecutar el Comando Función de Transferencia del Menú Analizador


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Función de Transferencia, que se muestra en la figura 4.26.
Debido a que es imposible graficar simultáneamente la relación existente
entre varias entradas y varias salidas, UNFUZZY muestra la relación de
una Variable de Salida contra una Variable de Entrada, fijando las demás
entradas en valores que el usuario puede determinar.
Figura 0.26 Cuadro de Diálogo Función de Transferencia

Las opciones que brinda el Cuadro de Diálogo Función de Transferencia


son las siguientes

Selección de Entrada

Mediante la lista Entradas el usuario selecciona la Variable de Entrada que


quiere relacionar en la gráfica; al efectuar una nueva selección, se borran
las gráficas existentes.

Selección de Salida

Mediante la lista Salidas el usuario selecciona la Variable de Salida que


quiere relacionar en la gráfica; al efectuar una nueva selección, se borran
las gráficas existentes.

Entradas fijas

Al efectuar doble 'click' sobre la lista Entradas Fijas el usuario podrá


modificar los valores fijos de las entradas que no es está relacionando en la
gráfica; Estos valores también pueden modificarse empleando la barra de
desplazamiento que se encuentra a la derecha de la lista Entradas Fijas.
Calcular

Esta opción grafica la relación existente entre la Variable de Salida


seleccionada en la lista Salidas, y la Variable de Entrada seleccionada en la
lista Entradas; si se utiliza esta opción varias veces, en cada ocasión se
graficará con un color distinto, de forma tal que se puedan visualizar
familias de curvas.

Limpiar

Esta opción permite borrar las gráficas existentes en ese momento.

Generación de Tablas Entrada-Salida

La opción de Generación de Tablas permite al usuario crear un archivo de


texto en el que se tabulan las salidas concretas para todas las posibles
combinaciones de los valores concretos de entrada; para ello el usuario
deberá efectuar una cualquiera de las siguientes dos operaciones:

1. Ejecutar el Comando Generar Tabla del Menú Analizador


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Generar Tabla, que se muestra en la figura 4.27. Al emplear el
botón Generar el programa calculará las salidas concretas para todas las
posibles entradas, y creará una tabla que se puede grabar en disco mediante
el botón Salvar. Para determinar cuáles son las posibles combinaciones de
los valores concretos de la Variables de Entrada, UNFUZZY efectúa una
discretización de los Universos de Discurso de las Variables Lingüísticas
de Entrada, empleando tantos Intervalos de Discretización como haya
decidido el usuario en el Cuadro de Diálogo Definir Variable (ver numeral
4.3.1.3.1).
Figura 0.27 Cuadro de Diálogo Generar Tabla

Generación de Código Fuente

La opción de Generación de Código Fuente permite al usuario crear un


archivo de texto con el código fuente C ó C++ necesario para implementar
el Sistema de Lógica Difusa diseñado; para ello el usuario deberá efectuar
una cualquiera de las siguientes dos operaciones:

1. Ejecutar el Comando Generar Código del Menú Analizador


2. Utilizar el Ícono de la Barra de Herramientas que se muestra en la figura
4.4

Con cualquiera de las dos opciones anteriores se despliega el cuadro de


Diálogo Generar Código, que se muestra en la figura 4.28. Al emplear el
botón Generar el programa generará el código fuente C ó C++ (según la
selección del usuario), que se puede grabar en disco mediante el botón
Salvar.
Figura 0.28 Cuadro de Diálogo Generar Código

Si el usuario ha seleccionado la opción Codigo C++, entonces UNFUZZY


le preguntará por el nombre que le desea asignar a una Clase en la que se
encapsulará todo el comportamiento del Sistema de Lógica Difusa; por
defecto, UNFUZZY asigna a dicha Clase el nombre MiSistema.

El numeral 4.6 presenta algunos aspectos a tener en cuenta sobre la


utilización del código fuente C y C++ generado por UNFUZZY.

Entrenamiento de un Sistema de Lógica Difusa

La opción de Entrenamiento de un Sistema de Lógica Difusa permite al


usuario emplear los algoritmos presentados en el numeral 1.3, utilizando
como datos de entrada tablas como la 1.2, que pueden estar previamente
almacenadas como archivos de texto; para ello el usuario deberá ejecutar el
Comando Entrenamiento del Menú Inferencia, con lo cual se despliega el
cuadro de Diálogo Entrenamiento, que se muestra en la figura 4.29.
Figura 0.29 Cuadro de Diálogo Entrenamiento

El procedimiento completo para efectuar el entrenamiento es el siguiente :

1. El usuario debe escribir en el cuadro de diálogo la tabla con los patrones


de entrenamiento, o leerla de un archivo de texto con la opción Leer. El
formato en que debe escribirse la tabla es el siguiente 3:

Entrada11 ; Entrada21 ; ... ; Entradap1 ; Salida11 ; Salida21 ; ... ; Salidaq1 ;


Entrada12 ; Entrada22 ; ... ; Entradap2 ; Salida12 ; Salida22 ; ... ; Salidaq2 ;
.....
Entrada1w ; Entrada2w ; ... ; Entradapw ; Salida1w ; Salida2w ; ... ; Salidaqw ;

2. Utilizar la opción Validar, que permite comprobar si el formato


empleado es el correcto.
3. Seleccionar el algoritmo de entrenamiento deseado (Universos Fijos o
Universos Variables).
4. Seleccionar el Tipo de Algoritmo (Nuevo o Actualiza). Esta selección
consiste en decidir si el entrenamiento debe borrar las definiciones que
se hayan hecho con entrenamientos previos, o si por el contrario debe
actualizar el diseño del sistema de Lógica Difusa, sin borrar las
definiciones previas.

3
Ver Tabla 1.2
5. Emplear la opción Entrenar, para ejecutar el algoritmo de
Entrenamiento.

El Algoritmo de Entrenamiento de Universos Variables debe crear nuevos


Conjuntos Difusos en cada Variable Lingüística. UNFUZZY toma el
primer conjunto de cada Variable, lo reproduce, y lo centra en los valores
concretos de los patrones de entrenamiento. De esta forma, el usuario puede
decidir qué tipo de Conjuntos quiere que genere el algoritmo, creando un
modelo como primer (y si desea único) conjunto de cada Variable
Lingüística, antes de ejecutar el algortimo de entrenamiento4.

Utilización del Código Fuente generado por UNFUZZY

La opción de Generación de Código Fuente que se presenta en el numeral


4.4.5 permite que el usuario disponga de código en lenguaje C y/o C++,
para implementar en software el Sistema de Lógica Difusa diseñado. Para
poder utilizar este código el usuario debe disponer de un compilador para
lenguaje C y/o C++, y tener algunos conocimientos básicos sobre su
utilización, y sobre el lenguaje de programación.

Los dos principales objetivos del código fuente generado por UNFUZZY
son los siguientes:

1. Permitir que el software del usuario cree fácilmente (con una sola
instrucción) el Sistema de Lógica Difusa.
2. Permitir que el sofware del usuario consulte fácilmente (con una sola
instrucción) cuáles son las salidas concretas del Sistema de Lógica
Difusa, para unas ciertas entradas concretas.

En el código fuente se incluye tambien una función main() que permite


ejemplificar la utilización del código, con un pequeño programa para DOS
que solicita al usuario por teclado las entradas del Sistema de Lógica
Difusa, y entrega las salidas del mismo a través de la pantalla.

El código fuente ha sido probado empleando la herramienta de


programación BorlandC++ 4.52; no obstante, es posible que para Sistemas
de Lógica Difusa complejos (con muchas variables y/o muchas reglas), el
compilador arroje errores debidos a que algunas funciones resulten
excesivamente extensas; en tales casos, el usuario deberá fraccionarlas
adecuadamente para no exceder las capacidades del Compilador. También

4
Ver numerales 4.3.1.3.7 al 4.3.1.3.11
es posible que el encadenador detecte que el código generado exceda el
estándar de 64K, en cuyo caso el usuario deberá fraccionar el archivo.

A continuación se presentan algunos detalles adicionales sobre el código


generado C y C++

Código C

El código C generado corresponde a un enfoque de programación


estructurada. La concepción del software es tal, que existen algunas
variables, estructuras y vectores que son de ámbito global, y existen varias
funciones que acceden a dichas variables globales.

Estructuras y variables globales:

A continuación se presentan las principales variables globales del código C


generado por UNFUZZY:

1. define:
NUMEROREGLAS : Número total de Reglas
NUMEROVARIABLESENTRADA : Número de variables de Entrada
NUMEROVARIABLESSALIDA : Número de variables de Salida

NUMEROTOTALCONJUNTOSENTRADA : Número de Valores Lingüísticos de Entrada

2. struct
conjunto: incluye las siguientes variables
char nombre[40] : cadena con el nombre de la variable
float minimo : límite inferior del soporte del conjunto
float maximo : límite superior del soporte del conjunto

variable: incluye las siguientes variables


char nombre[40] : cadena con el nombre de la variable
float minimo : límite inferiror del Universo de Discurso
float maximo : límite superior del Universo de Discurso
int intervalos : número de intervalos de discretización
float intervalo : intervalo de discretización
int numeroConjuntos : número de Valores Lingüísticos de la variable

difusor: incluye las siguientes variables


float minimo : límite inferior del soporte del conjunto
float maximo : límite superior del soporte del conjunto
float centro : centro del difusor
float var1 : parámetro de la función de pertenencia del difusor
float var2 : parámetro de la función de pertenencia del difusor
float var3 : parámetro de la función de pertenencia del difusor
float var4 : parámetro de la función de pertenencia del difusor
int puntos : Número de puntos de evaluación
float intervalo : intervalo de evaluación
3. vectores
struct variable VariablesEntrada[NUMEROVARIABLESENTRADA]:
Conjunto de variables de Entrada, corresponde al Universo de Entrada.
struct variable VariablesSalida[NUMEROVARIABLESSALIDA]:
Conjunto de variables de Salida, corresponde al Universo de Salida.
struct conjunto Entradas[NUMEROTOTALCONJUNTOSENTRADA]:
Conjunto de Valores Lingüísticos del Universo de Entrada
struct difusor Difusores[NUMEROTOTALCONJUNTOSENTRADA]:
Conjunto de Difusores del Universo de Entrada
int
Reglas[NUMEROREGLAS][NUMEROVARIABLESENTRADA+NUMEROVARIABLESSALIDA]
Base de Reglas
float Modificadores[NUMEROREGLAS][NUMEROVARIABLESENTRADA]:
Conjunto de Modificadores Lingüísticos de la Base de Reglas
float CentrosAltura[NUMEROREGLAS][NUMEROVARIABLESSALIDA]:
Conjunto de los centros de los valores lingüísticos de salida, que se emplean cuando existen
concresores tipo Altura.

funciones:

A continuación se presentan las principales funciones del código C


generado por UNFUZZY:

void llenarDatos() : esta función crea el Sistema de Lógica Difusa; en rigor, lo que hace es asignar a las
variables, estructuras y vectores globales sus valores adecuados.

void calcular(float *ent, float * sal): esta función permite calcular cuáles son los valores concretos de
salida del Sistema de Lógica Difusa, cuando se especifican unos valores concretos de entrada; los valores
de entrada deben estar en el vector ent, y los valores de salida se archivan en el vector sal.

Código C++

El código C++ generado corresponde a un enfoque de programación


orientada a objetos. El código genera una clase concreta, cuyo nombre lo
decide el usuario (por defecto es MiSistema), de tal manera que el Sistema
de Lógica Difusa se genera cuando el software del usuario crea un objeto
de esa clase.

Una de las principales ventajas que se tiene al emplear el enfoque orientado


a objetos frente al enfoque estructurado, consiste en la facilidad de tener en
un mismo programa varios Sistemas de Lógica Difusa, bien sea por tener
diferentes instancias de la misma clase generada por UNFUZZY, o porque
se tengan instancias únicas de diferentes clases generadas por UNFUZZY,
cada una con un nombre diferente.
La clase generada hereda funciones y atributos de la clase
SistemaDeLogicaDifusa; la declaración de esa clase, y de otras también
necesarias se incluye en los archivos fuzzy.hpp y fuzzy.cpp, que se entregan
junto con UNFUZZY. Por esta razón el código del usuario debe contener la
instrucción #include<fuzzy.hpp>, y debe compilar su código junto con el
archivo fuzzy.cpp.

Las principales funciones que se heredan de la clase


SistemaDeLogicaDifusa son:

1. void calcular(float *entra,float *sale): esta función permite calcular cuáles son los valores concretos
de salida del Sistema de Lógica Difusa, cuando se especifican unos valores concretos de entrada; los
valores de entrada deben estar en el vector ent, y los valores de salida se archivan en el vector sal.

2. int numeroEntradas(): retorna en número de Variables de Entrada

3. int numeroSalidas(): retorna el número de Variables de Salida

4. char *nombreVariableEntrada(int numVar): retorna el nombre de la Variable de Entrada de número


numVar

5. char *nombreVariableSalida(int numVar): retorna el nombre de la Variable de Salida de número


numVar

6. void EntrenaUniversoFijo(float *antecedente, float *consecuente) : Efectúa el algoritmo de


entrenamiento presentado en el numeral 1.3.1, con los datos de entrenamiento archivados en los
vectores antecedente y consecuente

7. void EntrenaUniversoVariable(float *antecedente, float *consecuente) : Efectúa el algoritmo de


entrenamiento presentado en el numeral 1.3.2, con los datos de entrenamiento archivados en los
vectores antecedente y consecuente

Debido a que las clases incluidas en los archivos fuzzy.hpp y fuzzy.cpp son
versiones resumidas de las mismas clases empleadas para implementar
UNFUZZY, se recomienda al lector que desee profundizar en el
conocimiento de su diseño, remitirse a los capítulos 2 y 3.

Vous aimerez peut-être aussi