Bibliotecas: Funciones de la Biblioteca Free Fuzzy Logic (Lógica Difusa) - página 2

 

Si alguien ha usado la librería en MT4, por favor que me diga que extensión debe tener el archivo FCL y donde ponerlo.

He escrito un indicador. La secuencia es como en el artículo.

1. crear un modelo (sin error)

IDm=ffll_new_model(); // crear modelo devuelve índice de modelo
if(IDm<0){
string txt=ffll_get_msg_textA(IDm); // obtener mensaje de error.
Alert("No se ha creado ningún modelo "+txt);return(0);}

2.Cargar el fichero con el programa (da error). El archivo se encuentra en el dir. \Archivo . He probado con la extensión .fcl .txt.

h=ffll_load_fcl_file(IDm, "Histo.txt"); // cargar el programa de lenguaje de modelado difuso
if(h<0){
txt=ffll_get_msg_textA(IDm); // obtener mensaje de error.
Alert("Archivo de programa no cargado "+txt);return(0);}

3.Crear una hija.

ID1=ffll_new_child(IDm); // crear un modelo hijo para el modelo dado devuelve el índice del modelo
if(ID1<0){
txt=ffll_get_msg_textA(IDm); // obtener mensaje de error.
Alert("No se ha creado ninguna hija "+txt);return(0);}

4.Introduce los datos de entrada trozo a trozo. Es decir

IN=ffll_set_value(IDm,ID1,0,X); // establecer el valor para la primera variable de entrada
IN=ffll_set_value(IDm,ID1,1,Y); // establecer el valor para la segunda variable de entrada

etc.

5. Obtén la salida.

Res=ffll_get_output_value(IDm,ID1); // obtener el valor de la variable de salida

Comparte tu experiencia.

 

Problema similar en MT5. No abre el archivo. Ejemplo de código:

#include <FuzzyLogic\Flc.mqh>
#property tester_file "model.fcl"

int OnInit()
{   
    string filename = "model.fcl";
    // Считываю строку из файла и убеждаюсь, что его можно открыть.
    int filehandle = FileOpen(filename,FILE_READ|FILE_ANSI);
    if(filehandle < 0)
    {
        Print("Error code ",GetLastError());
        Print(filename);
    }
    else
    {
        Print("Open success");
        Print(FileReadString(filehandle));   
        FileClose(filehandle);
    }
    
    // FFCL
    int model = ffll_new_model();
    if(model < 0)
    {
        Print("Ошибка создания модели!");
    }
    int ret_val = ffll_load_fcl_file(model,filename);
    if(ret_val < 0)
    {
        string txt = ffll_get_msg_textW(model);
        Print("Ошибка: " + txt);
    }
    ffll_close_model(model);
    return(0);
}

void OnDeinit(const int reason){}

void OnTick(){}

Obtengo la siguiente salida:

Ошибка: Error Opening File
FUNCTION_BLOCK
Open success

¿Por qué genera un error? Según tengo entendido, el problema está en pasar un parámetro a la función ffll_load_fcl_file. (probablemente algo con codificaciones o conversión de tipos).

Un gran pedido a quienes hayan trabajado con esta librería, por favor respondan.

 

Puede estar relacionado con la estructura del archivo .fcl/ No he encontrado un programa para comprobar si es correcto. El enlace en el texto no funciona. Quizás alguien que ya haya pasado por este rastrillo, por favor que me escriba.

La librería en principio es muy interesante (y si además funciona). El autor lamentablemente vislumbró y desapareció. En las preguntas no quiere responder. No misterio comprensible (o empleo).

TO: SergeyVP/ El modelo de hija no fue creado y las variables no fueron introducidas. ¿Entiendo que ha comprobado la posibilidad de carga?

¿Intercambiamos programas para comprobarlo?

 

Te llevará más tiempo tratar con la biblioteca que escribir tú mismo tres funciones elementales de lógica difusa en el código:

fussyOr(double a, double b)

   return  (MathMin(a, b));

}

fussyAnd(double a, double b)

   return  (MathMax(a, b));

}

fussyNot(double a)

   return  (1.0 - a);

}
 

No sólo eso. Funciones accesorias, defuzzificación, etc. No es más fácil.

 
Podría estar relacionado con la estructura del archivo .fcl

La verdad es que no. La función devuelve -1, lo que significa que no encuentra el archivo. Pensé que el problema estaba en la propia biblioteca, he comprobado en C ++ con dll - todo funciona. Tomé el código de ejemplo y el modelo del ejemplo en el sitio(en las descargas de ejemplo). En cuanto a la estructura del archivo fcl, si hay un error en la lógica, el modelo no se cargará y habrá algo así como un error crítico. Al menos en C++, si especificaba un modelo con un error explícito, el programa se bloqueaba:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid

TO: SergeyVP/ No se ha creado ningún modelo hijo y no se han introducido variables. ¿Así que entiendo que estabas probando la posibilidad de cargar?

Sí, por ahora sólo carga. No tiene sentido crear un modelo hijo si el modelo no está cargado.

¿Intercambiamos programas para comprobarlo?

Yo no compruebo de ninguna manera que el modelo fcl sea correcto. Hago el modelo en MATLAB, obtengo el fichero fis. Luego convierto fis a fcl utilizando el programa fuzzylite.

Me llevará más tiempo ocuparme de la biblioteca que escribir yo mismo tres funciones elementales de lógica difusa en el código:

Por desgracia, parece que va a ser así. Tendré que escribirlo yo mismo.
 
SergeyVP:

No exactamente. La función devuelve -1, lo que significa que no encuentra el archivo. Pensé que el problema estaba en la propia biblioteca, he comprobado en C ++ con dll - todo funciona. Tomé el código de ejemplo y el modelo del ejemplo en el sitio(en las descargas de ejemplo). En cuanto a la estructura del archivo fcl, si hay un error en la lógica, el modelo no se cargará y habrá algo así como un error crítico. Al menos en C++, si especificaba un modelo con un error explícito, el programa se bloqueaba, emitiendo:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid

Sí, sólo cargando por ahora. No tiene sentido crear un hijo si el modelo no está cargado.

No compruebo de ninguna manera si el modelo fcl es correcto. Hago un modelo en MATLAB, obtengo el archivo fis. Luego convierto fis a fcl usando el programa fuzzylite.
Desafortunadamente, parece que será así. Tendré que escribirlo yo mismo.

Entendido. Gracias.

"Tomé el código de ejemplo y el modelo del ejemplo en el sitio(en las descargas de ejemplo)".

No entiendo aquí, ¿de qué sitio? Por favor, indíquemelo.

Bueno, ¿tal vez es más fácil vincular MATLAB con MT4/MT5? Todas las soluciones más ya se han ofrecido.

Probablemente voy a mover en esta dirección, si esta biblioteca no funciona.

 

Тут не понял, с какого сайта? Ткните плз.

Desde el sitio oficial de la biblioteca - ffll.sourceforge.net.

Más concretamente: http://ffll.sourceforge.net/downloads.htm -> Descargar una aplicación de ejemplo que utiliza FFLL.

Hay código C++ y un modelo fcl simple.

¿Quizás sea más fácil enlazar MATLAB con MT4/MT5? Especialmente las soluciones ya se han propuesto.

¿Dónde leerlo?
 
SergeyVP:

Desde el sitio oficial de la biblioteca - ffll.sourceforge.net.

Más concretamente: http://ffll.sourceforge.net/downloads.htm -> Descargar una aplicación de ejemplo que utiliza FFLL.

Hay código C++ y un modelo fcl simple.

¿Dónde leer esto?
Aquí. https://www.mql5.com/es/articles/44
 

Me gustaría escuchar al "jefe de la tienda de transporte" que anunció este tema y escribió que todo funcionaba de maravilla en MT4.

El problema es que el archivo .fcl no se carga.

Por cierto: la librería no soporta totalmente el estándar. Hay excepciones, limitaciones, etc. Y la salida son sólo conjuntos de un solo elemento.