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

 

Если кто-то пользовал библиотеку в МТ4 подскажите с каким расширением должен быть файл программы FCL и куда его положить. 

Написал индикатор. Последовательность как в статье.

1. создаем модель (ошибку не выдает) 

IDm=ffll_new_model(); // сoздает модель возвращает индекс модели
if(IDm<0){
string txt=ffll_get_msg_textA(IDm); // получить сообщение об ошибке.
Alert("Не создалась модель"+txt);return(0);} 

2.Грузим файл с программой (выдает ошибку). Файл лежит в дир. \Expert\File . Пробовал с расширением .fcl  .txt.

h=ffll_load_fcl_file(IDm,"Histo.txt"); // загружает программу на языке нечеткого моделирования
if(h<0){
txt=ffll_get_msg_textA(IDm); // получить сообщение об ошибке.
Alert("Не загрузился файл программы"+txt);return(0);} 

3.Создаем дочку.

ID1=ffll_new_child(IDm); // создает дочернюю модель для заданной возвращает индекс модели
if(ID1<0){
txt=ffll_get_msg_textA(IDm); // получить сообщение об ошибке.
Alert("Не создалась дочка"+txt);return(0);} 

4.Подаем входные данные  поштучно. Т.е. 

IN=ffll_set_value(IDm,ID1,0,Х); // устанавливает значение для первой входной переменной
 IN=ffll_set_value(IDm,ID1,1,Y);   // устанавливает значение для второй входной переменной 

ну и т.д.  

5. Получаем выход.

Res=ffll_get_output_value(IDm,ID1); // получить значение для выходной переменной 

Поделитесь опытом. 

 

Аналогичная проблема в 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.

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