XFL3: El lenguaje de especificación de Xfuzzy 3


XFL3: El lenguaje de especificación de Xfuzzy 3

La definición de lenguajes formales para la especificación de sistema difusos presenta varias ventajas. Sin embargo, pueden plantearse dos objetivos contradictorios. Por una parte es deseable disponer de un lenguaje genérico y altamente expresivo, capaz de aplicar todos los formalismos basados en lógica difusa, pero, al mismo tiempo, las (posibles) restricciones impuestas por la implementación final del sistema deben ser consideradas. En este sentido, algunos lenguajes están enfocados hacia la expresividad, mientras otros están enfocados hacia las implementaciones software o hardware.

Uno de nuestros principales objetivos al comenzar a desarrollar un entorno de diseño de sistemas difusos fue obtener un entorno abierto, que no estuviera restringido por los detalles de implementación, pero que ofreciera al usuario un amplio conjunto de herramientas que permitieran diferentes implementaciones a partir de una descripción general del sistema. Esto nos llevó a la definición del lenguaje formal XFL. Las principales características de XFL fueron la separación entre la definición de la estructura del sistema y la definición de las funciones asignadas a los operadores difusos, y su capacidad para definir sistemas complejos. XFL es la base de varias herramientas de desarrollo orientadas al hardware y al software que constituyen el entorno de diseño Xfuzzy 2.0.

Como punto de partida para la versión 3 de Xfuzzy, ha sido definido un nuevo lenguaje, XFL3, que extiende las ventajas de XFL. XFL3 permite al usuario definir nuevas funciones de pertenencia y operadores paramétricos, y admite el uso de modificadores lingüísticos que permiten describir relaciones más complejas entre las variables. Con objeto de incorporar estas mejoras se han introducido algunas modificaciones en la sintaxis de XFL. Además, el nuevo lenguaje XFL3, así como las herramientas basadas en él, emplean Java como lenguaje de programación. Esto significa el uso de una ventajosa metodología orientada a objetos y flexibilidad para ejecutar la nueva versión de Xfuzzy en cualquier plataforma que tenga instalado JRE (Java Runtime Environment).

XFL3 divide la descripción de un sistema difuso en dos partes: la definición lógica de la estructura del sistema, que es incluida en ficheros con extensión ".xfl", y la definición matemática de las funciones difusas, que son incluidas en ficheros con extensión ".pkg" (packages).

El lenguaje permite la definición de sistemas complejos. XFL3 no limita el número de variables lingüísticas, funciones de pertenencia, reglas difusas, etc. Los sistemas pueden ser definidos mediante una jerarquía de módulos (bases de reglas o bloques no difusos) y las bases de reglas pueden expresar relaciones complejas entre las variables lingüísticas usando los conectivos AND y OR y modificadores lingüísticos como mayor que, más pequeño que, distinto a, etc. XFL3 permite al usuario definir sus propias funciones difusas por medio de paquetes (packages). Estas nuevas funciones pueden ser usadas como funciones de pertenencia, familias de funciones de pertenencia, conectivos difusos, modificadores lingüísticos, bloques no difusos y métodos de defuzzificación. El paquete estándar xfl contiene las funciones más habituales.

La descripción de la estructura de un sistema difuso, incluida en ficheros ".xfl", emplea una sintaxis formal basada en 8 palabras reservadas:  operatorset, type, extends, rulebase, using, if, crisp y system. Una especificación XFL3 contiene varios objetos que definen conjuntos de operadores, tipos de variables, bases de reglas, bloques no difusos y la descripción del comportamiento global del sistema. Un conjunto de operadores (operator set) describe la selección de las funciones asignadas a los diferentes operadores difusos. Un tipo de variable contiene la definición del universo de discurso, las etiquetas lingüísticas y las funciones de pertenencia relacionadas con una variable lingüística. Una base de reglas define las relaciones lógicas entre las variables lingüísticas. Un bloque no difuso describe una operación matemática entre variables del sistema. Por último, el comportamiento global del sistema incluye la descripción de la jerarquía de bases de reglas.

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

©IMSE-CNM 2018