Entorno de desarrollo Xfuzzy 3

Herramienta de generación de modelo SysGen - Xfsg

La herramienta de síntesis hardware xfsg (Xfuzzy to System Generator) permite trasladar de manera automática la especificación XFL3 de un sistema difuso jerárquico, compuesto por la combinación de distintos módulos de inferencia y bloques crisp, en un modelo Simulink que puede ser simulado en el entorno MATLAB e implementado en FPGAs de Xilinx. Sin embargo, no todas las especificaciones XFL3 son susceptibles de ser implementadas mediante xfsg. En concreto, los sistemas difusos que pueden ser implementados por esta herramienta deben emplear funciones o familias de funciones de pertenencia triangulares con grado de solapamiento 2 y usar métodos de defuzzificación simplificados.

La interfaz gráfica de xfsg puede ser ejecutada desde la ventana principal del entorno Xfuzzy, utilizando la opción "To Sysgen" del menú Synthesis, o a través del icono correspondiente de la barra de botones. La ventana principal de xfsg está dividida en cinco partes: una zona con información sobre la localización y el nombre de los ficheros utilizados, la estructura en árbol que desglosa las bases de reglas y bloques crisp que componen el sistema, un área en la que inicialmente se muestra la interconexión de los distintos componentes del sistema, una zona de opciones globales, y una serie de botones situados en la parte inferior de la ventana.

La zona de información sobre ficheros y directorios está dividida en tres campos. El campo Input XFL file contiene la ruta absoluta del fichero de especificación XFL3 seleccionado al lanzar la herramienta. Este campo es informativo, no puede ser modificado por el usuario. El campo Name for Output files permite configurar el prefijo de los ficheros de salida de xfsg. Por defecto aparece el nombre del sistema difuso de entrada. Finalmente, el campo Output directory indica la ruta absoluta del directorio donde se ubicarán los ficheros de salida que genera la herramienta. En este caso aparece por defecto el directorio que contiene la especificación del sistema.

La zona superior de la ventana también incluye un botón (identificado por el texto XFSG) que, al ser pulsado, muestra un cuadro de diálogo donde se enumeran los distintos operadores, métodos de defuzzificación, tipos de funciones de pertenencia y bloques crisp que pueden aparecer en los sistemas difusos sintetizados por la herramienta. Estas funciones se encuentran definidas en lo que en la terminología de Xfuzzy se denomina el “paquete xfsg”. A la derecha del botón aparece un texto que aconseja al usuario usar solo las funciones incluidas en dicho paquete para asegurar que no se produzca ningún problema al implementar el sistema.

En la zona central izquierda de la ventana se muestra la estructura del sistema difuso en forma de árbol, con los elementos que lo componen agrupados bajo las categorías RuleBases y CrispBlocks. Inicialmente, o siempre que se seleccione el nivel superior de la especificación del sistema, en la zona de la derecha aparece una ventana con los componentes que forman el sistema y su interconexión. Cuando se selecciona una base de reglas concreta dentro de la categoría RuleBases, aparece en esta zona la interfaz que se muestra en la siguiente figura. En ella el usuario puede definir los distintos parámetros que dimensionan el módulo de inferencia. En concreto se puede introducir el número de bits con el que se codifican las entradas, la salida, el grado de pertenencia de los antecedentes y las pendientes de las funciones de pertenencia. También en esta zona se pueden visualizar ciertos valores calculados a partir de la especificación del sistema. Concretamente, el número de funciones de pertenencia y los valores de los puntos de corte y las pendientes por cada entrada, aí como la representación matricial de la base de reglas correspondiente.

Cuando se selecciona un bloque crisp en la estructura de árbol, la parte central derecha de la interfaz muestra un solo campo a rellenar relativo al número de bits definidos para la salida del bloque.

Cuando todos los parámetros relativos a la base de reglas o al bloque crisp han sido configurados es necesario pulsar el botón Apply para guardar los cambios realizados (en caso contrario se perderá la información introducida en el formulario). Tras ello, el icono rojo que aparecía inicialmente junto a la base de conocimiento se sustituye por el icono verde que se observa en la figura. Cuando los parámetros de todas las bases de reglas y bloques crisp que componen el sistema han sido definidos, aparece también un icono verde junto al nivel superior de la especificación del sistema y se habilitan los botones Save Configuration y Generate Files de la zona inferior de la interfaz.

El botón Save Configuration permite guardar la configuración del sistema mediante un fichero XML que almacena información relativa a las opciones de implementación de los distintos componentes del sistema (ver sección Fichero de configuración). Las configuraciones guardadas mediante esta opción pueden ser cargadas en un momento posterior utilizando el botón Load Configuration.

Antes de pulsar el botón Generate Files el usuario puede configurar las opciones que aparecen en la zona Global Options de la interfaz gráfica. La funcionalidad de cada una de las opciones es la siguiente:

  • Include Rule’s Confidence Factors: Al activar esta opción se incluirá en el fichero de salida ".m", para cada una de las bases de reglas del sistema, una matriz con los grados de certeza de las reglas. Esta opción está contemplada en el lenguaje de especificación XFL3 aunque de momento no se utiliza para implementaciones hardware de sistemas de inferencia.

  • Generate txt file: Al activarla se creará un fichero ".txt" que contiene información textual sobre la estructura del sistema.

  • Generate Simulink model: Si esta opción está activada se creará el fichero ".mdl" correspondiente al modelo Simulink del sistema difuso.

  • Use Simplified Components: Si se activa esta opción se usarán componentes simplificados siempre que sea posible, es decir, cuando el método de defuzzificación sea Fuzzy Mean o Takagi-Sugeno, el conectivo de antecedentes sea el operador producto y la base de reglas esté completamente especificada.

Ficheros de salida

Una vez definidos los parámetros de los distintos componentes del sistema y las opciones globales, se puede pulsar el botón Generate Files para generar los siguientes ficheros en el directorio de salida indicado:

  • <FLC>.m es un fichero ".m" de MATLAB que contiene la inicialización de las variables de cada uno de los bloques de la librería XfuzzyLib que se usan para implementar el sistema difuso. Este fichero siempre se genera con independencia de las opciones escogidas en la zona Global Options .

  • <FLC_aux>.mdl contiene el modelo Simulink del sistema difuso utilizando los módulos incluidos en la librería XfuzzyLib.

  • <FLC>.txt contiene una descripción en formato texto de las entradas y salidas de cada base de reglas y bloque crisp. También incluye el componente que se utiliza de la librería XfuzzyLib. Si no existe dicho componente, se especifica con null.

Fichero de configuración

La configuración del proceso de síntesis con xfsg puede guardarse en un fichero XML para ser recuperada en un momento posterior. Debe tenerse en cuenta que la sintaxis del fichero de configuración puede cambiar en las sucesivas versiones de Xfuzzy y que sólo se pueden cargar ficheros de configuración generados con la versión actual, por lo que los ficheros XML antiguos se deben adaptar al formato correcto agregando las nuevas etiquetas.

La apariencia del fichero de configuración refleja la estructura en forma de árbol que representa al sistema. La raíz de dicho fichero es la etiqueta denominada system, que tiene tres atributos: name, rulebases y crisps. El primero indica el nombre del sistema, mientras que los otros dos indican el número de bases de reglas y de bloques crisps, respectivamente. (Si el sistema no contiene ningún bloque crisp no aparece este atributo).

El fichero incluye tres elementos principales rulebases, crisps y options. La etiqueta rulebases contiene información sobre las bases de reglas, cada una de ellas identificada con la etiqueta rulebase. Este elemento tiene como atributos: name, que indica el nombre de la base de reglas; inputs, que indica el número de entradas; y outputs, que indica el número de salidas. Los elementos hijos de esta etiqueta definen cada uno de los parámetros de la base de reglas: (número de bits para las entradas), bits_output (número de bits para las salidas), bits_membership_degree (número de bits para el grado de pertenencia) y bits_MF_slopes (número de bits para las pendientes).

El elemento crisps aparece vacío cuando el sistema no incluye ningún bloque de este tipo. En caso contrario, cada bloque es definido mediante una etiqueta crisp que incluye los atributos: name, que indica el nombre del bloque; inputs, que indica el número de entradas; y outputs, que indica el número de salidas. El único parámetro que puede definirse para este tipo de elementos es el número de bits con el que se codifica la salida (bitsize_output).

<?xml version="1.0" encoding="UTF-8" ?> 
<system name="Backward" rulebases="2" crisps="1">
  <rulebases>
  <rulebases>
    <rulebase name="interpolacion" inputs="2" outputs="1">
      <bits_input>10</bits_input> 
      <bits_output>10</bits_output> 
      <bits_membership_degree>10</bits_membership_degree> 
      <bits_MF_slopes>10</bits_MF_slopes> 
    </rulebase>
    <rulebase name="suavizado" inputs="1" outputs="1">
      <bits_input>10</bits_input> 
      <bits_output>10</bits_output> 
      <bits_membership_degree>10</bits_membership_degree> 
      <bits_MF_slopes>2</bits_MF_slopes> 
    </rulebase>
  </rulebases>
  <crisps>
    <crisp name="Resta" inputs="2" outputs="1">
      <bitsize_output>10</bitsize_output> 
    </crisp>
  </crisps>
  <options>
    <include_rule_confidence_factor_mfile>false</include_rule_confidence_factor_mfile>
    <gen_txtfile>false</gen_txtfile>
    <gen_simmodel>true</gen_simmodel>
    <use_simp_components>true</use_simp_components>
    <outputFile>Backward</outputFile>
    <outputDirectory>C:\Xfuzzy\examples\Tools\xfsg\OUT</outputDirectory>
</system>    
 

Por último, la etiqueta options se utiliza para identificar las distintas opciones que aparecen en las secciones Global Options y Files and directory information de la interfaz gráfica de xfvhdl. Los elementos hijos de dicha etiqueta son: include_rule_confidence_factor_mfile, gen_txtfile, gen_simmodel, use_simp_components, outputFile y outputDirectory. los cuatro primeros admiten un valor booleano (true o false) que indica la activación o no de la correspondiente opción.

Las configuraciones guardadas pueden ser posteriormente cargadas utilizando el botón Load Configuration, sin necesidad de introducir nuevamente todos los valores.

Mensajes de error

Si se produce algún error o warning durante la generación de los ficheros de salida de xfsg, se comunicará al usuario en el área de mensajes de Xfuzzy. El listado de los posibles errores junto a la descripción de las causas que los motivan se ilustra en la siguiente tabla.

Error
Descripción

Can´t create output directory

Aparece cuando la herramienta no puede crear el directorio indicado como salida

There isn´t a Simulink component to this rulebase. You must creat it !!!

Se produce cuando no existe una arquitectura tipo dentro de XfuzzyLib para implementar una de las bases de reglas del sistema

You can´t use a simplified component

Se produce cuando se ha seleccionado la opción Use Simplified Components, pero una base de reglas no puede utilizar el componente simplificado

Invalid membership function to calculate the weight of the rules

Aparece cuando se usa el defuzzificador Weighted Fuzzy Mean y en la definición de las funciones de pertenencia de salida falta el segundo parámetro característico de estos métodos

Membership functions incorrect for inputs

Aparece cuando se usa un tipo de función de pertenencia no permitida. La herramienta admite triángulos libres normalizados y familias de triángulos, donde el primer y/o el último elemento pueden ser trapecios

The rulebase is not complete

Se produce cuando no está definido el consecuente para todas las posibles combinaciones de las etiquetas de las entradas

Invalid name system, Invalid name rulebase, Invalid name crisp

Se produce cuando se carga un fichero de configuración y los nombres de las bases de reglas, bloques crisp o del sistema no se corresponden con los que aparecen en la especificación en Xfuzzy

Invalid rule

Indica que una regla incluye algún operador que no se ha tenido en cuenta dentro de la herramienta


--------------------------------------------------------------------------------------
S. Sánchez-Solano, E. del Toro, M. Brox, P. Brox, I. Baturone
Model-Based Design Methodology for Rapid Development of Fuzzy Controllers on FPGAs
IEEE Transactions on Industrial Informatics, 2012
DOI: 10.1109/TII.2012.2211608

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

©IMSE-CNM 2018