Библиотеки: Библиотека, реализующая нечеткую логику - страница 2

 

Аналогичная проблема в MT5. Не открывает файл. Пример кода:

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

Получаю следующий вывод:

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

Почему выдает ошибку? Как я понимаю проблема в передаче параметра в функцию ffll_load_fcl_file. (наверное что-то с кодировками или с приведением типов)

Большая просьба к тем, кто работал с этой библиотекой, ответьте пожалуйста.


 

Может быть связано со структурой файла .fcl/ Я так и не нашел программу которой можно было бы проверить правильность её. Ссылка в тексте нерабочая. Может кто уже проходил эти грабли отпишитесь.

Библиотека  в принципе очень интересна (а если ещё и рабочая ). Автор к сожалению мелькнул и исчез. На вопросы отвечать не желает. Не понятная таинственность(или занятость).

TO: SergeyVP/ Дочерную модель не создавали и переменные не вводили. Так понимаю проверяли возможность загрузки?

обменяемся программами для проверки? 

 

 


С библиотекой разбираться, больше времени уйдет, нежели самостоятельно в коде прописать три элементарные функции нечеткой логики:

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

}


 

Ну не только. Функции принадлежности, дефазификация и т.д. Не  легче.

 

 

Может быть связано со структурой файла .fcl

Не совсем так. Функция возвращает -1, это говорит о том, что она не находит файла. Думал проблема в самой библиотеке, проверил на C++ с dll - все работает. Код примера и модель брал из примера на сайте (в загрузках sample). Что касается структуры файла fcl, то если есть ошибка в логике, модель не будет загружена и будет что-то вроде critical error. По крайней мере на С++, если я задавал модель с явной ошибкой, то программа падала, выдав:

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

TO: SergeyVP/ Дочерную модель не создавали и переменные не вводили. Так понимаю проверяли возможность загрузки?

Да, пока только загрузку. Смысла нету создавать дочерную, если модель не загружена.

обменяемся программами для проверки? 

Я на правильность модель fcl никак не проверяю. Делаю модель в MATLAB, получаю fis файл. Дальше делаю конверт fis в fcl с помощью программы fuzzylite.

С библиотекой разбираться, больше времени уйдет, нежели самостоятельно в коде прописать три элементарные функции нечеткой логики:

К сожалению, похоже все так и будет. Придется самому писать..
 
SergeyVP:

Не совсем так. Функция возвращает -1, это говорит о том, что она не находит файла. Думал проблема в самой библиотеке, проверил на C++ с dll - все работает. Код примера и модель брал из примера на сайте (в загрузках sample). Что касается структуры файла fcl, то если есть ошибка в логике, модель не будет загружена и будет что-то вроде critical error. По крайней мере на С++, если я задавал модель с явной ошибкой, то программа падала, выдав:

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

Да, пока только загрузку. Смысла нету создавать дочерную, если модель не загружена.

Я на правильность модель fcl никак не проверяю. Делаю модель в MATLAB, получаю fis файл. Дальше делаю конверт fis в fcl с помощью программы fuzzylite.
К сожалению, похоже все так и будет. Придется самому писать..

Понял. Благодарю.

 "Код примера и модель брал из примера на сайте (в загрузках sample)".  

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

Ну может легче связать МАТЛАБ с МТ4/МТ5? Тем более решения уже предлагались.

Наверное буду двигаться в этом направлении, если не заработает эта библиотека. 

 

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

С оф сайта библиотеки - ffll.sourceforge.net.

Точнее: http://ffll.sourceforge.net/downloads.htm -> Download a sample application that uses FFLL.

Там код на С++ и простая fcl модель.

Ну может легче связать МАТЛАБ с МТ4/МТ5? Тем более решения уже предлагались.

Это где почитать?
 
SergeyVP:

С оф сайта библиотеки - ffll.sourceforge.net.

Точнее: http://ffll.sourceforge.net/downloads.htm -> Download a sample application that uses FFLL.

Там код на С++ и простая fcl модель.

Это где почитать?
Вот здесь. https://www.mql5.com/ru/articles/44
 

Хотелось бы всетаки услышать "начальника транспортного цеха" объявившего эту тему и писавшего о том, что у него всё чудесно работало в МТ4.

Проблема- не грузится файл .fcl.

Попутно: библиотека не полностью поддерживает стандарт. Есть исключения, ограничения и т.п. Да и выход - только одноэлементные множества.

 

 
vlad1949:

Хотелось бы всетаки услышать "начальника транспортного цеха" объявившего эту тему и писавшего о том, что у него всё чудесно работало в МТ4.

Проблема- не грузится файл .fcl.

Попутно: библиотека не полностью поддерживает стандарт. Есть исключения, ограничения и т.п. Да и выход - только одноэлементные множества.

 

Заработало после указания полного пути расположения файла.

string path=StringConcatenate(TerminalPath(),"\experts\files\Histo1.fcl");

 

Причина обращения: