Entorno de desarrollo Xfuzzy 3

Herramienta de edición de sistemas - Xfedit

La herramienta xfedit proporciona una interfaz gráfica para facilitar la descripción de sistemas difusos, evitando al usuario la necesidad de conocer en profundidad el lenguaje XFL3. La herramienta está formada por un conjunto de ventanas que permiten al usuario crear y editar los conjuntos de operadores, los tipos de variables lingüísticas y las bases de reglas incluidas en el sistema difuso, así como describir la estructura jerárquica del sistema bajo desarrollo. La herramienta puede ser ejecutada directamente desde la línea de comandos con la expresión "xfedit file.xfl", o desde la ventana principal del entorno usando la opción System Edition del menú Design.

La figura muestra la ventana principal de xfedit. El menú File contiene las siguientes opciones: "Save", "Save As", "Edit XFL3 File" y "Close Edition". Las opciones "Save" y "Save As" se utilizan para salvar el estado actual de la definición del sistema. La opción "Edit XFL3 File" abre una ventana de texto para editar la descripción XFL3 del sistema. La última opción del menú se emplea para cerrar la herramienta. El campo Name bajo la barra de menús no es editable. El nombre del sistema bajo desarrollo puede cambiarse mediante la opción Save As. El cuerpo de la ventana está dividido en tres partes: la parte de la izquierda contiene las listas de las variables de entrada y salida globales; la parte de la derecha incluye las listas de los conjuntos de operadores, tipos de variables lingüísticas, bloques crisp y bases de reglas; por último, la zona central muestra la estructura jerárquica del sistema.

Los aceleradores para las diferentes listas son los habituales en el entorno: la tecla Insert crea un nuevo elemento para cada lista; la tecla Delete se utiliza para eliminar el elemento (cuando no ha sido usado); la tecla Enter o una doble pulsación permite la edición del elemento.

La creación de un sistema difuso en Xfuzzy usualmente comienza con la definición de conjuntos de operadores (operator sets). La figura muestra la ventana usada para editar conjuntos de operadores en xfedit. Tiene un comportamiento simple. El primer campo contiene el identificador del conjunto de operadores. Los restantes campos contienen listas desplegables para asignar funciones a los diferentes operadores difusos. Si la función seleccionada necesita la introducción de parámetros, se abrirá una nueva ventana para introducirlos. Las funciones disponibles en cada lista son las definidas en el paquete cargado. No es necesario seleccionar todos los campos. Una barra de comandos en la parte inferior de la ventana presenta cuatro opciones: "Ok", "Apply", "Reload" y "Cancel". La primera opción salva el conjunto de operadores y cierra la ventana. La segunda sólo salva los últimos cambios. La tercera opción recupera los últimos valores salvados para cada campo. La última cierra la ventana desechando los cambios realizados.

El siguiente paso en la descripción del sistema difuso es crear los tipos de las variables lingüísticas (linguistic variable types) mediante la ventana de Creación de tipos mostrada abajo. Un tipo nuevo necesita la introducción de su identificador y su universo de discurso (mínimo, máximo y cardinalidad). La ventana incluye varios tipos predefinidos correspondientes a las particiones más habituales del universo de discurso. Estos tipos predefinidos contienen distribuciones homogéneas de funciones triangulares, trapezoidales, en forma de campana y singularidades difusas. Otros tipos predefinidos son singularidades y campanas iguales que son habitualmente usadas como opción inicial para tipos de variables de salida. Cuando se selecciona uno de los tipos predefinidos es preciso introducir el número de funciones de pertenencia de la partición. Los tipos predefinidos también incluyen una opción vacía, que genera un tipo sin ninguna función de pertenencia, y la extensión de un tipo ya existente (seleccionado en el campo Parent), que implementa el mecanismo de herencia de XFL3.

Una vez que se ha creado un tipo, éste puede ser editado usando la ventana de Edición de tipos. Esta ventana permite la modificación del nombre del tipo y del universo de discurso, así como añadir, editar o borrar las funciones de pertenencia del tipo editado. La ventana muestra una representación gráfica de las funciones de pertenencia donde la función seleccionada se representa con un color diferente. La parte inferior de la ventana contiene una barra de comandos con los botones habituales para salvar o descartar los cambios y para cerrar la ventana. Debemos considerar que las modificaciones en la definición del universo de discurso pueden afectar a las funciones de pertenencia. Por ello, se realiza una validación de los parámetros de las funciones de pertenencia antes de salvar las modificaciones, apareciendo un mensaje de error cuando la definición de una función de pertenencia se convierte en inválida.

Una función de pertenencia puede ser creada o editada a partir de la lista de funciones de pertenencia con los aceleradores habituales (tecla Insert y tecla Enter o doble pulsación). La figura anterior muestra la ventana de edición de funciones de pertenencia. La ventana dispone de campos para introducir el nombre de la etiqueta lingüística, para seleccionar la clase de función de pertenencia y para incluir los valores de los parámetros. La parte de la derecha de la ventana muestra una representación gráfica de todas las funciones de pertenencia donde la función que está siendo editada aparece con un color diferente. La parte inferior de la ventana muestra una barra de comandos con tres opciones: Set, para cerrar la ventana y salvar los cambios; Refresh, para redibujar la representación gráfica; y Cancel, para cerrar la ventana sin salvar las modificaciones.

El tercer paso en la definición de un sistema difuso consiste en describir las bases de reglas que expresan las relaciones entre las variables del sistema. Las bases de reglas pueden ser creadas, editadas y eliminadas de la lista correspondiente mediante los aceleradores habituales (Insert, Enter o doble click y Delete). La siguiente ventana facilita la edición de bases de reglas.

La ventana de edición de bases de reglas está dividida en tres zonas: la parte de la izquierda contiene los campos para introducir los nombres de la base de reglas y del conjunto de operadores usado, y para introducir la lista de variables de entrada y salida. La zona de la derecha se utiliza para mostrar el contenido de las reglas incluidas en la base de reglas. La parte inferior de la ventana contiene la barra de comandos con los botones habituales para salvar o descartar las modificaciones y para cerrar la ventana.

Las variables de entrada y salida pueden ser creadas, editadas o eliminadas con las secuencias de teclas habituales. La información necesaria para definir una variable es el nombre y el tipo de la variable.

Los contenidos de las reglas pueden mostrarse en tres formatos: libre, tabular y matricial. El formato libre usa tres campos por cada regla. El primero contiene el peso o factor de confidencia de la regla. El segundo campo muestra el antecedente de la regla. Se trata de un campo auto-editable, en el que los cambios se llevan a cabo seleccionando el término a modificar (el símbolo "?" indica un término vacío) y usando los botones de la ventana. El tercer campo de cada regla contiene la descripción del consecuente. Es también un campo auto-editable que puede ser modificado pulsando el botón "->". Es posible generar reglas nuevas introduciendo valores en la última fila (marcada con el símbolo "*").

La barra de botones localizada en la parte inferior de la representación de la base de reglas en formato libre permite crear términos unidos por conjunciones (botón "&") y disyunciones (botón "|"), términos modificados por los modificadores lingüísticos not (botón "!"), more or less (botón "~"), slightly (botón "%") y strongly (botón "+"), y términos simples que relacionan una variable y una etiqueta con las cláusulas equal to ("=="), not equal to ("!="), greater than (">"), smaller than ("<"), greater or equal to (">="), smaller or equal to ("<="), approximately equal to ("~="), strongly equal to ("+=") y slightly equal to ("%=").  El botón "->" se utiliza para añadir la conclusión de una regla. El botón ">..<" se emplea para eliminar un término conjuntivo o disyuntivo (p.e. el término "v == l & ?" se transforma en "v == l"). El formato libre permite describir relaciones más complejas entre las variables que los otros formatos.

El formato tabular resulta útil para definir reglas cuyos antecedentes usan sólo los operadores and y equal. Cada regla dispone de un campo para introducir el factor de confidencia y una lista desplegable por cada variable de entrada y de salida. No es necesario seleccionar todos los campos de variables, pero al menos una variable de entrada y otra de salida deben ser seleccionadas siempre. Si una base de reglas contiene una regla que no puede ser expresada en formato tabular, la tabla no puede ser abierta y se genera un mensaje de error.

El formato matricial está diseñado específicamente para describir bases de reglas con dos entradas y una salida. Esta opción muestra el contenido de la base de reglas en un formato claro y compacto. El formato matricial genera reglas como "if(x==X & y==Y) -> z=Z", es decir, reglas con factor de confidencia 1.0 y formadas por la conjunción de dos igualdades. Aquellas bases de reglas que no tienen el número de variables adecuado o que contienen reglas con un formato diferente no pueden ser mostradas en formato matricial.

Una vez que los conjuntos de operadores, los tipos de variables y las bases de reglas han sido definidos, el siguiente paso en la definición de un sistema difuso es definir las variables de entrada y salida globales utilizando la ventana de Propiedades de las variables. La información necesaria para crear una variable es el nombre y el tipo de la variable.

El paso final en la definición de un sistema difuso es la descripción de su estructura (posiblemente jerárquica). La tecla utilizada para introducir un nuevo módulo (una llamada a una base de reglas) en una jerarquía es la tecla Insert. Para establecer enlaces entre módulos, el usuario debe presionar el botón izquierdo del ratón situando el puntero sobre el nodo que representa a la variable de origen y soltar el botón con el puntero situado sobre el nodo de la variable de destino. Para eliminar un enlace, el usuario debe seleccionarlo pulsando sobre el nodo de la variable de destino y presionar la tecla Delete. La herramienta no permite crear lazos entre módulos.

La herramienta permite la edición individualizada de las bases de reglas de un sistema jerárquico. Para ello es preciso desplegar la jerarquía del sistema en la ventana principal de Xfuzzy y pulsar dos veces sobre la base de reglas que se desea editar o seleccionarla y pulsar la tecla Insert. Al seleccionar una base de reglas, en el menú principal se observará que algunas de las herramientas de Xfuzzy aparecen deshabilitadas. Ello se debe a que el uso de bases de reglas de sistemas jerárquicos está limitado a tareas de edición, ajuste, representación y síntesis.

En la ventana de xfedit se pueden añadir nuevos conjuntos de operadores, cambiar los tipos de las variables de salida de la base de reglas y modificar las reglas.

Las opciones habilitadas en la ventana de edición funcionan de forma similar a las utilizadas al editar el sistema completo. Como observación, conviene añadir que para cambiar de nombre a una base de reglas hay que acceder a la ventana de edición de base de reglas y cambiar el nombre allí.

Para comentarios, sugerencias, notificación de bugs, etc. contacte con nosotros en:   xfuzzy-team@imse-cnm.csic.es

©IMSE-CNM 2018