Entorno de desarrollo Xfuzzy 3

Herramienta de generación de código C++ - Xfcpp

La herramienta xfcpp genera una representación C++ del sistema difuso. Puede ser ejecutada desde la línea de comandos, con la expresión "xfcpp file.xfl [out_dir]", o desde el menú Synthesis de la ventana principal del entorno. Esta herramienta tampoco tiene una interfaz gráfica de usuario específica porque la generación de la representación C++ no necesita información adicional; sólo aparecerá una ventana para seleccionar el directorio de salida.

A partir de la especificación de un sistema difuso en formato XFL3, systemname.xfl, la herramienta genera cuatro ficheros: xfuzzy.hpp, xfuzzy.cpp, systemname.hpp y systemname.cpp. Los ficheros xfuzzy.hpp y xfuzzy.cpp contienen la descripción de las clases C++ que son comunes a todos los sistemas difusos. Los ficheros systemname.hpp y systemname.cpp contienen la descripción de las clases específicas del sistema systemname.xfl. Los ficheros con extensión '.hpp' son ficheros de cabecera que definen las estructuras de las clases, mientras que los ficheros con extensión '.cpp' contienen el cuerpo de las funciones de cada clase. Todos los ficheros son generados en el directorio output_dir, indicado al ejecutar la herramienta (por defecto, el mismo donde reside el fichero systemname.xfl).

El código C++ generado por xfcpp implementa un motor de inferencia difuso que puede ser utilizado con valores crisp y con valores difusos. Un valor difuso se encapsula en un objeto de clase MembershipFunction.

class MembershipFunction {
public:
 enum Type { GENERAL, CRISP, INNER };
 virtual enum Type getType() { return GENERAL; }
 virtual double getValue() { return 0; }
 virtual double compute(double x) = 0;
 virtual ~MembershipFunction() {}
};

La clase que define el sistema difuso es una extensión de la clase abstracta FuzzyInferenceEngine. Esta clase, definida en xfuzzy.hpp, contiene cuatro métodos que implementan el proceso de inferencia difuso.

class FuzzyInferenceEngine {
public:
 virtual double* crispInference(double* input) = 0;
 virtual double* crispInference(MembershipFunction* &input) = 0;
 virtual MembershipFunction** fuzzyInference(double* input) = 0;
 virtual MembershipFunction** fuzzyInference(MembershipFunction* &input) = 0;
};

El fichero systemname.cpp contiene la descripción de la clase systemname, que implementa el proceso de inferencia difuso del sistema. Además de describir los cuatro métodos de la clase FuzzyInferenceEngine, la clase del sistema contiene un método, llamado inference, que implementa el proceso de inferencia con variables en lugar de con arrays de variables. La función de inferencia para un sistema difuso con variables de entrada globales i0, i1, ..., y variables de salida globales o0, o1, ..., es:

void inference(double i0, double i1, ..., double *o0, double *o1, ...);

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

©IMSE-CNM 2018