Fuzzy Control Language Parser

English

I have created a parser for the FCL (Fuzzy Control Language) using the Flex and Bison tools. The program can scan a file written it using the standard and verify it syntax. In the (near) future this parser will be added to the UNFUZZY v2 (http://unfuzzy.sourceforge.net) program I’m creating, and will increase the functionality for Free Fuzzy Logic Library (http://ffll.sourceforge.net)

Download

Español:

He creado un parser para el FCL (Lenguaje de Control Difuso) usando las herramientas Flex y Bison. El programa puede verificar la sintaxis en un archivo escrito usando el estandar. En el futuro (cercano) este parser va a ser incorporado en UNFUZZY v2 (http://unfuzzy.sourceforge.net) y va a incrementar la funcionalidad de Free Fuzzy Logic Library (http://ffll.sourceforge.net)

Descargar

Proyecto reactivado

El desarrollo de UNFUZZY v2, estuvo detenido por un poco de tiempo, pero es grato para mi decir que ha sido reactivado. Aunque aun no esta listo para ser publicado, quiero informar que las siguientes funciones han sido implementadas y probadas:

* Entrenamiento de sistemas de logica difusa por el metodo de Wang & Mendel

* Autodefinicion de reglas, por metodos algebraicos.

* Interfaz gráfica amigable y sencilla de usar.

Entre otras pequeñas cosas.

Ciclo de desarrollo 3

El ciclo de desarrollo 3 que tiene el desarrollo del metodo de entrenamiento conocido con el nombre Wang – Mendel Method, basado en el siguiente paper:

Li-Xin Wang. The WM Method Completed: A Flexible Fuzzy System Approach to Data Mining. IEEE, transactions on fuzzy systems. Vol. 11, No. 6, december 2003

El desarrollo consiste en un software de consola el cual sera integrado a el ambiente grafico de UNFUZZY v2.

La forma de ejecutar el programa es dando por parametro:

  • El archivo con los datos, el cual debe de tener en su primera linea el numero de variables y el numero de muestras, los valores deben de estar separador por espacios.
  • Otro archivo debe de tener el numero de conjuntos difusos por cada variable de entrada y la salida
  • El siguiente parametro es el nombre del archivo en el cual se va a generar todo el programa de lógica difusa en el lenguaje de control difuso
  • wmmethod -din datatrain.txt -cvin sets.txt -cout  programa.fcl

Documentacion Free fuzzy logic library

Hola, mientras he estado trabajando en este proyecto he trabajado con FFLL es una libreria de logica difusa que esta el momento ha funcionado muy bien, el problema que tuve es que la documentacion en linea es poca, las fuentes estan muy bien documentadas, pero no es muy comodo estar abriendo archivos y cerrando para ir de un lado a otro. Por eso me puse en la tarea de generar una documentacion en doxygen para la libreria, lo cual queda mucho mas facil de explorar desde su salida HTML.

Creo que este resultado es muy interesante para cualquiera que use la libreria de logica difusa. Lo pueden encontrar en: http://pwp.etb.net.co/iyhernandezo/index.html, esperando que proximamente este en la pagina principal de FFLL.

Esperen proximamente algunos tutoriales con esta libreria. Chao

Ciclo de desarrollo 2

Se han realizado avances en el ciclo de desarrollo 2, simultaneamente con el 3 y 4.

Este ciclo de desarrollo esta enfocado principalmente en la visualizacion grafica de la aplicacion, para el diseno de los sistemas de logica difusa por medio de un lenguaje grafico.

Los avances a los cuales se ha llegado, esta en todo lo que es el posicionamiento de los elementos, y las gráficas de las funciones de pertenencia. Como se muestra en las siguientes imagenes.

UNFUZZY en MSW

UNFUZZY en GTK2

Características:

  • Permite crear elementos como entradas, salidas, sistemas de inferencias y texto. Aplicando sus propiedades.
  • Permite mover y conectar los elementos entre si.
  • Ajustar parametros de los elementos.

Entradas en MSW

Entrada en GTK2

Ciclo de desarrollo 1

El ciclo de desarrollo 1, concerniento al caso de usos: Disenar FLS usando FCL ha sido terminado.

Se pueden apreciar imagenes de el primer prototipo ejecutado en GNU/Linux y en Windows.

dc1.png

MSW

Caracteristicas:

  • Funciones de coloreo para las palabar clave del Fuzzy Control Language
  • Funciones de cortar, copiar, pegar, seleccionar todo, funcionando adecuadamente
  • Funciones de nuevo, abrir, guardar etc…
  • Funciones de impresion funcionando

En general este prototipo es un editor de texto al cual se ha modificado wxStyledTextCtrl para crear una clase unfSTC que maneje todas las funciones del editor.

Fase de planeación y elaboración

Requerimientos

 

Presentación general

 

  • Este proyecto tiene por objeto crear una nueva versión del software UNFUZZY 1.2 con una interfaz gráfica más amigable incorporando una metodología de diseño para sistemas de lógica difusa y basándose en un lenguaje de control difuso utilizado internacionalmente.

 

Clientes

 

Estudiantes e investigadores en el campo de la lógica difusa

 

Metas

  • Desarrollar UNFUZZY v2 el cual podrá ser ejecutado en arquitecturas de procesador x86 y sistemas operativos de 32 bits GNU/Linux y Windows
  • Diseñar una nueva interfaz grafica de modo que sea más amigable e intuitiva con el usuario permitiendo ajustar los parámetros del procedimiento de diseño de un sistema de control difuso
  • Incorporar una metodología de diseño para sistemas de lógica difusa como el planteado en la referencia [7]
  • Implementar un lenguaje de control difuso basado en el creado por el comité electrotécnico internacional (IEC) definido en [1]
  • Realizar ejemplos de aplicación de lógica difusa demostrando la versatilidad de UNFUZZY v2.

 

Funciones del sistema

 

  • Permitir el diseño de sistemas de control difusos de múltiples entradas y múltiples salidas, ajustando diferentes opciones en los parámetros.
  • Generar después del proceso de diseño y análisis código para ser utilizado en la implementación real del sistema
  • A través de la simulación del sistema de control realizar el análisis del comportamiento

Atributos del sistema

  • Diseño a través del uso del FCL
  • Diseño a través de un formato gráfico.
  • Entrenamiento de sistemas de lógica difusa.
  • Posibilidad de ejecutarse en GNU/Linux y Windows

Caso de usos

Caso de uso: Diseñar FLS usando el FCL

Participantes: Usuario, interfaz gráfica

Descripción: El usuario del software esta interesado en diseñar un sistema de lógica difusa, para lo cual define el numero de entradas y salidas del sistemas, junto con sus funciones de pertenencia y opciones de fusificador y defusicador.

 

Caso de uso: Diseñar FLS usando el FGL

Participantes: Usuario, interfaz gráfica

Descripción: El usuario del software esta interesado en diseñar un sistema de lógica difusa, para lo cual define el numero de entradas y salidas del sistemas, junto con sus funciones de pertenencia y opciones de fusificador y defusicador.

 

Caso de uso: Entrenamiento de un FLS

Participantes: Usuario, interfaz gráfica, librería de entrenamiento

Descripción: Al tener las entradas y salidas definidas el usuario debe de ingresar la base de reglas al sistema, lo cual lo puede hacer usando su propio conocimiento del sistema o utilizando un algoritmo de entrenamiento basado en datos del sistema adquiridos anteriormente.

 

Caso de uso: Implementación del FLS

Participantes: Usuario, interfaz gráfica, librería de lógica difusa

Descripción: Después de tener el sistema de lógica difusa diseñado y entrenado el usuario procede a su simulación y análisis para lo cual se utiliza la librería de lógica difusa.

 

Caso de uso: Implementación del FLS

Participantes: Usuario, interfaz gráfica, librería de generación de código

Descripción: El usuario esta satisfecho con el diseño luego de su simulación y análisis y se dispone a implementarlo en hardware especifico para lo cual espera obtener un código en C++, para su implementación.

 

Diagrama caso de usos

Caso de usos

 

Ciclos de desarrollo

Ciclo de desarrollo 1:

Caso de uso: Diseñar FLS usando FCL

Ciclo de desarrollo 2:

Caso de uso: Diseñar FLS usando FGL

Ciclo de desarrollo 3:

Caso de uso: Entrenamiento FLS, versión 1. Incluye los métodos de universos fijos y universos variables

Ciclo de desarrollo 4:

Caso de uso: Entrenamiento FSL, versión 2. Incluye el método constructivo

Ciclo de desarrollo 5:

Caso de uso: Simulación y análisis, versión 1.

Ciclo de desarrollo 6:

Caso de uso: Simulación y análisis, versión 2.

Ciclo de desarrollo 7:

Caso de uso: Generación de codigo.

Glosario

  • FCL: Fuzzy Control Language definido por IEC
  • IEC: Comité electrotécnico internacional
  • FLS: Fuzzy logic system

Estructura UNFUZZY v2

El desarrollo de UNFUZZY v2 se ha dividido en dos modulos, con el fin de separarlas bastante e integrarlas al final del proyecto. Las partes son: ambiente de desarrollo grafico y algoritmos de logica difusa.

Algoritmos

En cuanto a los algoritmos de logica difusa se ha avanzado con los algoritmos de entrenamiento teniendo en C++ el metodo de wang-mendel tambien llamado universos fijos.

El siguiente algoritmo de entrenamiento a implementar basado en el paper de Requena y otros, esta en desarrollo actualmente, debido a que este compone de varios pasos, se ha avanzado en los metodos de clustering con fuzzy cmeans y Fuzzy Kohonen Clustering Network. Realizando la inicializacion de los clusters por el metodo de Chiu.

Grafico

En la parte grafica se trabajo con wxWidgets y ya se tiene un manejo bueno de la libreria grafica, se definio la estructura del software teniendo como resultado los siguientes puntos:

  • El programa actuara como un SDI (single document interface), solo se podra editar un proyecto de logica difusa por cada UNFUZZY abierto.
  • La estructura contiene un TreeControl el cual mostrara las variables (entrada y salida), sistemas de inferencia y demas elementos que se puedan agregar al desarrollo del proyecto.
  • Se tiene una barra de herramientas, un menu y una barra de estado, permitiendo acceder a las funciones basicas de configuracion del software.

A continuacion se muestra un pantallazo con la estructura del software.

Estructura de unfuzzy v2
En la parte grafica se trabajo con wxArt2D el cual permite la interaccion de graficos unidas por lineas y se pueden crear sistemas como el siguiente:

pantallazo-unfuzzy-v2-1.png

En la parte grafica se utilizo el wxStyledTextCtrl el cual permite el trabajo con lexer y efecto de coloreo, ademas se creo un parser para crear automaticamente las variables a medida que se escriben.

FGL

Hola Mundo!!

Este blog es con el fin de llevar una bitacora del trabajo diario en UNFUZZY v2.