Bibliothèque: Bibliothèque de mise en œuvre de la logique floue - page 2

 

Si quelqu'un a utilisé la bibliothèque dans MT4, merci de me dire quelle extension doit avoir le fichier FCL et où le mettre.

J'ai écrit un indicateur. La séquence est celle de l'article.

1. créer un modèle (pas d'erreur)

IDm=ffll_new_model() ; // créer le modèle renvoie l'index du modèle
if(IDm<0){
string txt=ffll_get_msg_textA(IDm) ; // obtenir le message d'erreur.
Alert("Aucun modèle créé "+txt);return(0);}

2. charger le fichier avec le programme (il donne une erreur). Le fichier se trouve dans le répertoire \{Expert\Fichier . J'ai essayé avec l'extension .fcl .txt.

h=ffll_load_fcl_file(IDm, "Histo.txt") ; // charger le programme du langage de modélisation floue
if(h<0){
txt=ffll_get_msg_textA(IDm) ; // obtenir un message d'erreur.
Alert("Program file not loaded "+txt);return(0);}

3. créer une fille.

ID1=ffll_new_child(IDm) ; // créer un modèle enfant pour le modèle donné renvoie l'index du modèle
if(ID1<0){
txt=ffll_get_msg_textA(IDm) ; // obtenir un message d'erreur.
Alert("No daughter created "+txt);return(0);}

4. alimenter les données d'entrée morceau par morceau. Ie.

IN=ffll_set_value(IDm,ID1,0,X) ; // définit la valeur de la première variable d'entrée
IN=ffll_set_value(IDm,ID1,1,Y) ; // définit la valeur de la deuxième variable d'entrée

etc.

5. Obtenez la sortie.

Res=ffll_get_output_value(IDm,ID1) ; // obtient la valeur de la variable de sortie.

Partagez votre expérience.

 

Problème similaire avec MT5. Le fichier ne s'ouvre pas. Exemple de code :

#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(){}

J'obtiens le résultat suivant :

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

Pourquoi une erreur est-elle générée ? Si je comprends bien, le problème se situe au niveau du passage d'un paramètre à la fonction ffll_load_fcl_file. (probablement quelque chose avec les encodages ou la conversion de type).

Une grande demande à ceux qui ont travaillé avec cette bibliothèque, s'il vous plaît répondre.

 

Cela peut être lié à la structure du fichier .fcl/ Je n'ai pas trouvé de programme pour vérifier si c'est correct. Le lien dans le texte ne fonctionne pas. Peut-être que quelqu'un qui a déjà parcouru ce râteau peut me répondre.

La bibliothèque est en principe très intéressante (et si elle fonctionne aussi). L'auteur a malheureusement été aperçu et a disparu. Il ne veut pas répondre aux questions. Un mystère (ou un emploi) incompréhensible.

TO : SergeyVP/ Le modèle fille n'a pas été créé et les variables n'ont pas été introduites. Si j'ai bien compris, vous avez vérifié la possibilité de chargement ?

Devrions-nous échanger des programmes pour la vérification ?

 

Il faudra plus de temps pour gérer la bibliothèque que pour écrire soi-même trois fonctions élémentaires de logique floue dans le code :

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);

}
 

Mais pas seulement. Fonctions accessoires, défuzzification, etc. Rien de plus facile.

 
Cela pourrait être lié à la structure du fichier .fcl.

Pas vraiment. La fonction renvoie -1, ce qui signifie qu'elle ne trouve pas le fichier. Je pensais que le problème venait de la bibliothèque elle-même, j'ai vérifié en C++ avec la dll - tout fonctionne. J'ai pris le code et le modèle de l'exemple sur le site(dans les téléchargements de l'exemple). En ce qui concerne la structure du fichier fcl, s'il y a une erreur dans la logique, le modèle ne sera pas chargé et il y aura quelque chose comme une erreur critique. Au moins en C++, si je spécifiais un modèle avec une erreur explicite, le programme se plantait :

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

TO : SergeyVP/ Aucun modèle enfant n'a été créé et aucune variable n'a été saisie. J'ai donc cru comprendre que vous testiez la possibilité de chargement ?

Oui, uniquement le chargement pour l'instant. Il est inutile de créer un modèle enfant si le modèle n'est pas chargé.

Devrions-nous échanger des programmes pour vérifier ?

Je ne vérifie en aucune façon l'exactitude du modèle fcl. Je crée un modèle dans MATLAB et j'obtiens un fichier fis. Ensuite, je convertis le fichier fis en fichier fcl à l'aide du programme fuzzylite.

Il me faudra plus de temps pour gérer la bibliothèque que pour écrire moi-même trois fonctions élémentaires de logique floue dans le code :

Malheureusement, il semble que c'est ce qui va se passer. Je vais devoir l'écrire moi-même.
 
SergeyVP:

Ce n'est pas exactement le cas. La fonction renvoie -1, ce qui signifie qu'elle ne trouve pas le fichier. Je pensais que le problème venait de la bibliothèque elle-même, j'ai vérifié en C++ avec la dll - tout fonctionne. J'ai pris le code et le modèle de l'exemple sur le site(dans les téléchargements de l'exemple). En ce qui concerne la structure du fichier fcl, s'il y a une erreur dans la logique, le modèle ne sera pas chargé et il y aura quelque chose comme une erreur critique. Au moins en C++, si je spécifiais un modèle avec une erreur explicite, le programme se plantait, en émettant :

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

Oui, on ne fait que charger pour l'instant. Il est inutile de créer un enfant si le modèle n'est pas chargé.

Je ne vérifie pas l'exactitude du modèle fcl de quelque manière que ce soit. Je crée le modèle dans MATLAB, j'obtiens le fichier fis. Ensuite, je convertis le fichier fis en fichier fcl à l'aide du programme fuzzylite.
Malheureusement, il semble que ce sera ainsi. Je vais devoir l'écrire moi-même.

J'ai compris. Je vous remercie.

"L'exemple de code et de modèle a été pris à partir de l'exemple sur le site(dans les téléchargements de l'exemple)".

Je ne comprends pas, de quel site s'agit-il ? Veuillez m'indiquer.

Peut-être est-il plus facile de relier MATLAB à MT4/MT5 ? Toutes les autres solutions ont déjà été proposées.

Je m'orienterai probablement dans cette direction, si cette bibliothèque ne fonctionne pas.

 

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

Depuis le site officiel de la bibliothèque - ffll.sourceforge.net.

Plus précisément : http://ffll.sourceforge.net/downloads.htm -> Télécharger un exemple d'application qui utilise FFLL.

Il y a du code C++ et un modèle fcl simple.

Peut-être est-il plus facile de lier MATLAB à MT4/MT5 ? Surtout que les solutions ont déjà été proposées.

Où les lire ?
 
SergeyVP:

Depuis le site officiel de la bibliothèque - ffll.sourceforge.net.

Plus précisément : http://ffll.sourceforge.net/downloads.htm -> Télécharger un exemple d'application qui utilise FFLL.

Il y a du code C++ et un modèle fcl simple.

Où lire cela ?
Ici. https://www.mql5.com/fr/articles/44
 

J'aimerais entendre le "chef du magasin de transport" qui a annoncé ce sujet et qui a écrit que tout fonctionnait à merveille dans MT4.

Le problème est que le fichier .fcl n'est pas chargé.

Soit dit en passant, la bibliothèque ne prend pas entièrement en charge la norme. Il y a des exceptions, des limitations, etc. Et la sortie n'est constituée que d'ensembles à un seul élément.