Guía de Usuario de Xfuzzy

FUZZY LOGIC DESIGN TOOLS

Guía de Usuario de Xfuzzy


English

Comenzando con Xfuzzy

Xfuzzy es un entorno compuesto por un conjunto de herramientas que facilitan el diseño, la verificación y la síntesis de sistemas difusos. Proporciona una interfaz gráfica de usuario basada en el toolkit Athena-3D sobre X-window. Todas las herramientas incluidas en el entorno Xfuzzy pueden también ser ejecutadas independientemente. De este modo el usuario puede utilizar las herramientas interactivamente desde la línea de comandos Unix, llamarlas desde un fichero script, o integrarlas con otros entornos de desarrollo. Las opciones de los comandos que invocan a las diferentes herramientas se describen en las páginas de manual de herramientas basadas en XFL.

Para ejecutar Xfuzzy el usuario sólo necesita incluir la localización de los ficheros ejecutables de Xfuzzy en la variable de entorno path. Por ejemplo, en csh:

set path = ($path:$XFUZZY/bin)

Xfuzzy puede ser ahora ejecutado con el comando:

xfuzzy &

La ventana principal de Xfuzzy aparecerá en la pantalla. La siguiente figura muestra la apariencia de esta ventana donde, de arriba a abajo, se distinguen tres zonas: un área de botones, una lista seleccionable y un área de texto.

Cuando el usuario pulsa sobre uno de los botones de la parte superior se abre un menú desplegable. Hay 6 menús diferentes para manipulación de ficheros (files), diseño (design), verificación (verification), síntesis (synthesis), definición de operaciones difusas (fuzzy operations) y setup del entorno. La lista de especificaciones disponibles (available specifications) muestra los ficheros cargados en el sistema. La zona inferior de la ventana (log area) es usada para mostrar mensajes del entorno Xfuzzy. Al iniciar el programa esta zona de la ventana muestra la versión actual de Xfuzzy e información relativa a las operaciones realizadas por las opciones de la línea de comandos.

El usuario puede acceder a las facilidades de ayuda pulsando el botón help. El help de Xfuzzy está basado en ficheros HTML, de forma que se arrancará un navegador de Web.

Manejo de Ficheros

El menú file muestra una lista de items que realizan diferentes operaciones sobre ficheros. Estas operaciones están relacionadas con ficheros de especificación XFL: cargar, salvar, renombrar, cerrar un fichero de especificación y salir de Xfuzzy. La carga de un fichero de especificación XFL puede hacerse seleccionando un fichero ya existente (load) o creando uno nuevo (new). Si el usuario decide cargar un fichero de especificación preexistente aparecerá una ventana de selección que muestra los ficheros del directorio de trabajo actual. Al salvar una especificación a un fichero el usuario puede indicar un nombre nuevo (save as...) o mantener el actual (save).

Cuando se carga una especificación XFL su nombre interno (derivado del nombre del fichero fuente) aparecerá en la lista de especificaciones disponibles y se escribirá el mensaje correspondiente en el área de log.

Al iniciar Xfuzzy el usuario puede cargar cualquier número de especificaciones XFL dando sus nombres como parámetros al comando que llama al programa. En este caso, la lista de nombres de ficheros de especificaciones debe ser el último parámetro usado al invocar a Xfuzzy.

Menú de Setup

El menú setup permite realizar tres operaciones básicas: navegar a través de los directorios, manipular información de log y especificar las operaciones difusas a utilizar. El item "Working directory" desplegará una ventana de selección de ficheros de forma que el usuario pueda moverse a través del árbol de directorios y seleccionar el directorio de trabajo por defecto. Este directorio de trabajo define la localización de todos los ficheros usados o producidos por Xfuzzy.

Los items de manipulación de logs permiten al usuario borrar el área de log, así como manipular un fichero que almacena la información mostrada en el área de log.

Operaciones Difusas

El menú fuzzy operations permite la selección de las operaciones difusas con las que trabajarán las herramientas integradas en el entorno Xfuzzy. Al iniciarse, Xfuzzy intentará cargar la definición de operaciones para C y Java desde:

Si no se encuentra ninguno de los ficheros anteriores, el entorno proporciona un conjunto mínimo de operaciones por defecto.

Usando la ventana de definición de operaciones el usuario puede ver las operaciones definidas actualmente en el entorno, modificarlas editando el fichero de definición o cargar un nuevo fichero. Ver la sección Definición de operaciones difusas en la Guía de XFL para obtener más información sobre la forma en que se definen las operaciones en Xfuzzy.

Herramientas de Diseño

La descripción de un sistema difuso en XFL consiste esencialmente de tres partes:

Para cada una de estas partes el entorno Xfuzzy ofrece editores gráficos que facilitan la definición del sistema. El usuario puede también acceder directamente al código fuente XFL utilizando un editor de texto convencional mediante el item "Edit XFL file".

Como paso previo a cualquier operación de diseño el usuario debe seleccionar una de las especificaciones XFL disponibles (pulsando sobre ella). Xfuzzy proporciona mecanismos para evitar interferencias cuando se usan diferentes editores sobre la misma especificación: Cuando se inicia un editor para una especificación el resto de los editores serán iniciados en modo de sólo-lectura, es decir, el usuario será capaz de visualizar las definiciones pero no podrá salvar los cambios.

Editor de Operaciones

Las operaciones difusas pueden ser seleccionadas de la lista de operaciones definidas en ese momento en el entorno. Así mismo, es posible visualizar las definiciones de las operaciones actuales o incluir nuevas operaciones (ver el menú fuzzy operations y la sección Defininición de operaciones difusas de la Guía de XFL).

La ventana lista las operaciones asignadas actualmente en la especificación seleccionada. El valor <None> indica que se utilizarán los defectos del sistema. Para cambiar cualquiera de estas operaciones basta con seleccionar el correspondiente botón y aparecerá la lista de operaciones disponibles, de la que puede seleccionarse la opción deseada.

Editor de Tipos

El item Types en el menú Design proporciona un editor específico para realizar de forma gráfica las operaciones usuales de creación y modificación de tipos XFL.

Antes de definir las funciones de pertenencia el usuario debe seleccionar o crear el tipo correspondiente. Los comandos relacionados con la definición de tipos son: new (crea un tipo nuevo), remove (elimina el tipo seleccionado), rename (cambia el nombre del tipo seleccionado), e inherit (copia todas las definiciones del tipo seleccionado a un tipo nuevo).

La definición de funciones de pertenencia (FPs) requiere la selección previa de un tipo. Los comandos relacionados con la definición de FPs son: new (crea una FP nueva), remove (elimina la FP seleccionada), rename (cambia el nombre de la FP seleccionada), copy (copia la FP seleccionada), y antonym (rota la FP seleccionada con respecto a un eje vertical localizado en el centro de su universo de discurso).

También es posible modificar una FP ya existente. Una vez seleccionada una FP es posible desplazarla manteniendo su forma (pulsando el botón central del ratón), o mover los puntos que definen la FP (con el botón izquierdo del ratón). De este modo es posible modificar tanto la posición como la forma de la función. Los puntos que definen una función pueden ser movidos también introduciendo sus valores en las áreas de texto de la zona inferior derecha de la ventana de edición. Si se presiona el botón denominado "Adjust to cardinality" (Ajuste a Cardinalidad) aparecerá un grid correspondiente a la cardinalidad definida para el tipo de la FP y el movimiento de las funciones y sus puntos se ajustará a la línea del grid más próxima.

Si las funciones están definidas en términos de aproximaciones lineales a tramos (funciones de la clase points en XFL), es posible añadir o eliminar puntos pulsando dentro de la ventana gráfica con los botones "Add point" o "Delete point" previamente seleccionados.

Editor de Módulos

La versión actual del item Modules en el menú Design proporciona un conjunto de ventanas que permiten editar y modificar la base de reglas del sistema. Dichas ventanas ofrecen facilidades para añadir, cambiar o eliminar variables del sistema, así como para escribir reglas sintácticamente correctas.

La versión del editor de módulos que está actualmente en proceso de integración en Xfuzzy proporcionará un método de acceso más unificado a las bases de reglas del sistema. Además, las próximas versiones de la herramienta incluirán un editor para especificaciones multimódulo (la implementación actual no soporta este tipo de especificaciones).

Herramientas de Verificación

La verificación de un sistema es usualmente un proceso iterativo que puede ser realizado en Xfuzzy utilizando dos estrategias diferentes, aunque no incompatibles: simulación del comportamiento del sistema dentro de su contexto de operación y ajuste de sus parámetros mediante un conjunto de datos de entrenamiento.

XFSIM: Simulación de sistemas basados en XFL

El módulo de simulación xfsim permite la integración de una o más especificaciones XFL en un sistema en lazo cerrado que simula el comportamiento global del o de los elementos difusos y su contexto de operación. El módulo de simulación proporciona una interfaz para especificar:

A partir de estas definiciones xfsim genera un fichero ejecutable que puede ser inicializado por el usuario y que se ejecuta bajo el control del entorno Xfuzzy. Una vez terminada la simulación se muestran los resultados por medio de diferentes visualizadores.

La función principal de la simulación sigue los siguientes pasos:

La interfaz de la ventana de simulación ofrece control directo sobre todas las opciones de la definición que describe el comportamiento de la simulación. Las diferentes áreas de la ventana corresponden a las diferentes secciones del fichero de definición. Para más detalles ver la página de manual de xfsim.

Los botones de la parte inferior de la ventana de simulación permiten realizar diferentes operaciones sobre las definiciones de simulación: borrar las definiciones existentes (New), cargar un fichero de definiciones de simulación (Load), salvar las definiciones actuales a un fichero (Save), construir el ejecutable para la simulación (Make) o ejecutarlo (Run). Al ejecutar una simulación el usuario tiene que proporcionar los valores iniciales para las variables del sistema. Una vez iniciada la simulación aparece una ventana que muestra el estado actual del proceso de simulación. Dicha ventana incorpora un botón para abortar la ejecución de la simulación.

XFBPA: Ajuste de sistemas basados en XFL

El módulo xfbpa ajusta los parámetros de un sistema difuso basado en XFL, usando algoritmos de aprendizaje supervisado que emplean el valor de una función de error definida para el sistema:

donde r es el número de datos de entrenamiento, n el número de salidas del sistema, wj el factor de peso asociado a la variable de salida j en la función de error (1/n por defecto), yji el valor actual de la salida j producido por el sistema para la entrada i, Yji el valor ideal para la salida j cuando la entrada es i, y rangej el rango de la salida j. Esta función de error representa la desviación cuadrática media de las salidas ponderada por sus correspondientes factores de peso. La función está normalizada, de forma que siempre toma valores entre 0 y 1.

El módulo de aprendizaje permite ajustar la función de error, dando más peso a aquellas variables de salida que se consideren más significativas en las desviación del sistema. Además puede aplicar un mecanismo de "podado" de reglas, eliminando aquellas cuyo grado de activación no supere un determinado umbral (configurable por el usuario). Si durante el proceso de aprendizaje se produce eliminación de reglas se inicia un nuevo ciclo de aprendizaje tras la finalización del ciclo original, ya que la modificación de la base de reglas puede interferir los resultados de aprendizaje.

El usuario puede especificar una de las siguientes cuatro posibles condiciones de fin:

El proceso de aprendizaje termina al alcanzarse uno de los límites anteriores.

El usuario puede seleccionar entre los siguientes algoritmos de aprendizaje:

En todos los casos, los cálculos de las derivadas parciales utilizadas por los algoritmos de aprendizaje son realizados por el programa en tiempo de ejecución.

También se ha implementado un mecanismo de aprendizaje específico que permite al usuario seleccionar aquellas variables, funciones de pertenencia o parámetros que van a ser ajustados. De esta forma es posible probar diferentes estrategias de aprendizaje antes de seleccionar la más adecuada para cada problema particular. Dicho mecanismo proporciona directivas que aseguran el cumplimiento de las restricciones impuestas por algunas de las herramientas de síntesis de Xfuzzy en la distribución de las funciones de pertenencia y su grado de solapamiento.

La interfaz de la ventana de aprendizaje proporciona control directo sobre todas las opciones de xfbpa que describen el comportamiento del proceso de aprendizaje. Las diferentes zonas de la ventana corresponden a las diferentes opciones de la herramienta. Para más detalles ver la página de manual de xfbpa. La interfaz de usuario permite configurar y ejecutar el proceso de aprendizaje (botón Run), así como modificar dinámicamente su configuración (botones Stop y Restart) y supervisar su evolución. Las facilidades de monitorización incluyen la representación gráfica en tiempo real de la desviación media y máxima del sistema.

XFPLOT: Representación Gráfica de Superficies

xfplot es una utilidad que permite representar mediante gnuplot superficies relacionadas con variables de sistemas difusos. El usuario dispone de tres opciones para cada variable de entrada del sistema: asignarla al eje X, asignarla al eje Y o fijar un valor constante para la variable. Asimismo el usuario debe seleccionar una de las variables de salida del sistema para asignarla al eje Z. Para más detalles consulte la página de manual de xfplot.

La siguiente figura muestra un ejemplo de la salida generada por xfplot:

Herramientas de Síntesis

El entorno Xfuzzy incluye facilidades para la síntesis software y hardware de sistemas difusos. La elección entre ambos procedimientos depende tanto de la complejidad del problema como de sus restricciones temporales. Las soluciones software ofrecen mayor flexibilidad para definir la base de datos de conocimiento, seleccionar los operadores difusos y elegir el mecanismo de inferencia. Por otra parte, las soluciones hardware son imprescindibles en aquellos problemas que requieren una velocidad de operación elevada.

Síntesis Software

XFC: Compilador de XFL a C

La solución obvia para la síntesis software consiste en usar un lenguaje de programación estándar y ampliamente utilizado como C. Esto permite que las implementaciones software producidas por Xfuzzy puedan ser ejecutadas en cualquier arquitectura, desde microcontroladores a ordenadores de propósito general.

xfc toma un fichero XFL y genera un fichero fuente C que implementa el motor de inferencia difuso como una función C. Este fichero puede ser libremente combinado con otros módulos para producir aplicaciones de lógica difusa. La interacción entre el motor de inferencia difuso y el módulo que lo invoque se realiza a través de parámetros correspondientes a las variables de entrada y salida del sistema difuso. Dichos parámetros pertenecen a un tipo de dato C específico (FUZZY) definido en el fichero de salida por medio de una construcción typedef. Puede utilizarse cualquier tipo de dato C capaz de mantener un valor numérico. Los parámetros son pasados al motor de inferencia difuso por referencia (tipo FUZZY *).

xfc utiliza un conjunto de operaciones difusas predefinidas que son aplicadas cuando la especificación no las define explícitamente. Estas operaciones son:

T-norma _sd_min (mínimo).
T-conorma _sd_max (máximo).
Negación _sd_not (complemento a 1).
Función de implicación _sd_min (mínimo).
Método de defuzzificación _sd_CoA (Centro de Área).

La ventana de síntesis C proporciona una interfaz para definir el tipo de dato de las variables difusas (el objetivo de la construcción "typedef FUZZY"), el nombre de la función que implementa el motor de inferencia y el prefijo usado para construir el nombre del fichero de salida. Consulte la página de manual de xfc para obtener más detalles.

XFJ: Compilador de XFL a Java

El compilador de XFL a Java, xfj, es un programa capaz de generar un conjunto de ficheros fuente Java que implementan los tipos y la base de reglas definidos para un sistema difuso mediante un fichero fuente XFL. Las características del lenguaje destino permiten en este caso que la implementación software del sistema difuso se corresponda más directamente con la estructura de la definición de acuerdo con XFL. El resultado de ejecutar xfj son varios ficheros Java, uno para cada una de las clases que constituyen la salida del compilador. Las clases Java que produce xfj se corresponden, por un lado, con los tipos definidos en la especificación XFL (cada tipo da lugar a una clase) y, por otro, con la definición del comportamiento definida por la base de reglas: se genera una clase adicional que implementa la base de reglas.

A diferencia de xfc, xfj no permite seleccionar el tipo de aritmética empleada en la representación interna de los valores difusos. Dado que Java garantiza la portabilidad total de sus representaciones numéricas entre diferentes plataformas, toda la aritmética se realiza en doble precisión, utilizando el tipo Java nativo double. Sin embargo, el tratamiento de los tipos es diferente (al igual que pasa con la salida de xfc) según el tipo base XFL de los mismos: en los tipos con tipo base integer se efectúan operaciones de redondeo que no se aplican sobre los tipos cuyo tipo base sea real.

xfj permite emplear las facilidades de autodocumentación que ofrece el lenguaje Java (a través de la herramienta javadoc) para ofrecer facilidades adicionales de identificación de las clases que produce. Al igual que el compilador de XFL a C, xfj debe disponer de una especificación de cómo se implementan las operaciones difusas. Si el fichero fuente no contiene directivas que seleccionen operaciones concretas, se emplean un conjunto de operaciones difusas predefinidas, que tienen los mismos identificadores y la misma semántica que en el caso de xfc. De hecho, dadas las similitudes sintácticas entre C y Java, la definición de las misma es prácticamente igual en ambos casos.

La ventana de síntesis Java contiene campos de texto similares a los del compilador a C para asignar un prefijo común a los ficheros Java de salida (Output file prefix), para proporcionar el nombre de la clase que implementa la base de reglas del sistema (IE class name) y para declarar el paquete al que pertenecen las clases generadas por el compilador (Package declaration). Además de los campos de texto, el interface ofrece dos botones que permiten controlar las clases Java que se desea generar, y si se incluyen o no comentarios para la herramienta javadoc en los ficheros de salida. El interface incluye también dos botones de control: uno para llevar a cabo la traducción de la especificación XFL a Java (Compile) y otro para cerrar la ventana (Cancel). Consulte la página de manual de xfj para obtener más detalles.

Síntesis Hardware

La síntesis hardware de sistemas difusos usando el entorno Xfuzzy puede ser llevada a cabo siguiendo dos estrategias diferentes. En la primera de ellas los valores de salida son calculados off-line para cada una de las posibles combinaciones de entrada y, posteriormente, el proceso de inferencia se realiza mediante una tabla de búsqueda (look-up table). Este procedimiento permite total flexibilidad en la definición del sistema difuso. Sin embargo, su principal inconveniente es el crecimiento exponencial de los recursos de hardware necesarios que se produce al incrementar el número de entradas o el número de elementos del universo de discurso. Para eliminar este inconveniente, el segundo de los procedimientos incluidos en Xfuzzy sigue una estrategia on-line, donde se implementa hardware dedicado para evaluar el proceso de inferencia concurrentemente con los cambios en las entradas del sistema.

Los módulos de síntesis hardware de Xfuzzy soportan dos técnicas de implementación diferentes. Por una parte, el uso de FPGAs proporciona capacidad de prototipado rápido. Además, los sistemas construidos con FPGAs exhiben una capacidad de programación intrínseca, proporcionando de este modo un mecanismo simple para cambiar o ajustar su funcionalidad. Por otra parte, las implementaciones de ASICs son más eficientes en términos de área de silicio y velocidad de inferencia, resultando ventajosas cuando el número de unidades a fabricar es elevado.

XFTL: Síntesis mediante Tabla Look-up

xftl recibe como entrada una descripción XFL y la convierte en una tabla entrada-salida con el formato PLA de la Universidad de Berkeley. Utilizando cualquier herramienta de síntesis lógica compatible con dicho formato es posible minimizar la tabla y extraer las ecuaciones lógicas correspondientes. Si el usuario dispone además de las herramientas de síntesis de Synopsys y Xilinx (y el recurso xfuzzyHasSynopsys ha sido definido True) xftl puede automatizar los procesos de minimización de la tabla y su implementación en una FPGA.

La ventana de síntesis mediante tabla look-up proporciona una interfaz para controlar las distintas funciones de xftl. Ver la página de manual de xftl para más detalles. Ya que la generación de la tabla se realiza mediante un programa separado generado por xftl, la ventana proporciona opciones para construir el programa (Build C source), para construirlo y ejecutarlo con objeto de obtener la tabla (Build PLA file), y para minimizar e implementar la tabla con las opciones de síntesis y la FPGA seleccionadas (Synthesize to FPGA). En los dos últimos casos aparecerá una ventana que muestra la evolución del proceso y permite al usuario detenerlo.

XFVHDL: Síntesis Mediante Hardware Dedicado

xfvhdl lee una especificación XFL y genera una descripción VHDL sintetizable basada en una arquitectura específica para sistemas difusos (consultar Artículos relacionados para obtener una descripción detallada de esta arquitectura). Las diferentes opciones arquitecturales y el número de bits de precisión son definidos por el usuario al ejecutar xfvhdl.

xfvhdl utiliza una librería de celdas parametrizadas que contiene las descripciones de los bloques básicos que constituyen el sistema difuso. El código empleado en esta librería es compatible con las implementaciones de VHDL de las herramientas de Synopsys y Mentor Graphics.

De acuerdo con condicionantes económicos o temporales el usuario puede elegir entre construir el sistema como un ASIC o mediante una FPGA. En este último caso xfvhdl también genera ficheros script para dirigir los procesos de síntesis de Synopsys y Xilinx.

La ejecución de esta herramienta produce como salida los siguientes ficheros que describen el sistema:

La ventana de síntesis VHDL proporciona una interfaz para definir las diferentes opciones utilizadas en el proceso de síntesis. Para obtener más detalles ver la página de manual de xfvhdl.

[Xfuzzy Home Page]

xfuzzy-team@imse.cnm.es

©IMSE-CNM 1997-2001
Last update: Thu Oct 18 17:55:59 2001