Bibliotecas: Funções da Biblioteca Free Fuzzy Logic (Lógica Difusa) - página 2

 

Se alguém já usou a biblioteca no MT4, por favor, diga-me qual a extensão do arquivo FCL e onde colocá-lo.

Escrevium indicador. A sequência é a mesma do artigo.

1. criar um modelo (sem erro)

IDm=ffll_new_model(); // criar modelo retorna o índice do modelo
if(IDm<0){
string txt=ffll_get_msg_textA(IDm); // obter mensagem de erro.
Alert("No model created "+txt);return(0);}

2) Carregue o arquivo com o programa (ele dá um erro). O arquivo está localizado no diretório. \{Expert\File . Tentei com a extensão .fcl .txt.

h=ffll_load_fcl_file(IDm, "Histo.txt"); // carregue o programa da linguagem de modelagem fuzzy
if(h<0){
txt=ffll_get_msg_textA(IDm); // obtenha a mensagem de erro.
Alert("Program file not loaded "+txt);return(0);}

3. criar uma filha.

ID1=ffll_new_child(IDm); // criar um modelo filho para o modelo fornecido retorna o índice do modelo
if(ID1<0){
txt=ffll_get_msg_textA(IDm); // receber mensagem de erro.
Alert("No daughter created "+txt);return(0);}

4. alimente os dados de entrada, parte por parte. Por exemplo.

IN=ffll_set_value(IDm,ID1,0,X); // defina o valor para a primeira variável de entrada
IN=ffll_set_value(IDm,ID1,1,Y); // defina o valor para a segunda variável de entrada

etc.

5. Obtenha a saída.

Res=ffll_get_output_value(IDm,ID1); // obter o valor da variável de saída

Compartilhe sua experiência.

 

Problema semelhante no MT5. Não abre o arquivo. Exemplo 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(){}

Recebo o seguinte resultado:

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

Por que ele gera um erro? Pelo que entendi, o problema está na passagem de um parâmetro para a função ffll_load_fcl_file. (provavelmente algo relacionado a codificações ou conversão de tipos).

Um grande pedido àqueles que já trabalharam com essa biblioteca, por favor, respondam.

 

Pode estar relacionado à estrutura do arquivo .fcl/ Não encontrei um programa para verificar se está correto. O link no texto não funciona. Talvez alguém que já tenha passado por esse rake possa me responder.

Em princípio, a biblioteca é muito interessante (e se também estiver funcionando). O autor, infelizmente, foi visto e desapareceu. Não quer responder às perguntas. Não é um mistério compreensível (ou emprego).

TO: SergeyVP/ O modelo filho não foi criado e as variáveis não foram inseridas. Pelo que entendi, você verificou a possibilidade de carregamento?

Vamos trocar programas para verificação?

 

Levará mais tempo para lidar com a biblioteca do que para escrever três funções lógicas fuzzy elementares no 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);

}
 

Bem, não é só isso. Funções acessórias, defuzzificação, etc. Não é mais fácil.

 
Pode estar relacionado à estrutura do arquivo .fcl

Não é bem assim. A função retorna -1, o que significa que ela não encontra o arquivo. Achei que o problema estava na própria biblioteca, verifiquei em C++ com a dll - tudo funciona. Peguei o código e o modelo de amostra do exemplo no site(nos downloads de amostra). Quanto à estrutura do arquivo fcl, se houver um erro na lógica, o modelo não será carregado e haverá algo como um erro crítico. Pelo menos em C++, se eu especificasse um modelo com um erro explícito, o programa travaria:

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

TO: SergeyVP/ Nenhum modelo filho foi criado e nenhuma variável foi inserida. Pelo que entendi, você estava testando a possibilidade de carregamento?

Sim, apenas o carregamento por enquanto. Não faz sentido criar um modelo filho se o modelo não estiver carregado.

Vamos trocar os programas para verificar?

Eu não verifico a exatidão do modelo fcl de forma alguma. Eu crio um modelo no MATLAB e obtenho o arquivo fis. Depois, converto o fis em fcl usando o programa fuzzylite.

Levará mais tempo para lidar com a biblioteca do que para escrever eu mesmo três funções elementares da lógica fuzzy no código:

Infelizmente, parece que é assim que vai ser. Terei que escrevê-lo eu mesmo.
 
SergeyVP:

Não exatamente. A função retorna -1, o que significa que ela não encontra o arquivo. Achei que o problema estava na própria biblioteca, verifiquei em C++ com a dll - tudo funciona. Peguei o código e o modelo de amostra do exemplo no site(nos downloads de amostra). Quanto à estrutura do arquivo fcl, se houver um erro na lógica, o modelo não será carregado e haverá algo como um erro crítico. Pelo menos em C++, se eu especificasse um modelo com um erro explícito, o programa travaria, emitindo:

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

Sim, apenas carregando por enquanto. Não faz sentido criar um filho se o modelo não estiver carregado.

Não verifico a correção do modelo fcl de forma alguma. Eu crio um modelo no MATLAB e obtenho o arquivo fis. Em seguida, converto fis em fcl usando o programa fuzzylite.
Infelizmente, parece que é assim que será. Terei que escrevê-lo eu mesmo.

Entendi. Obrigado.

"Peguei o código e o modelo de amostra do exemplo no site(nos downloads de amostra)".

Não estou entendendo, de qual site? Por favor, me indique.

Bem, talvez seja mais fácil vincular o MATLAB ao MT4/MT5? Todas as outras soluções já foram oferecidas.

Provavelmente seguirei nessa direção, caso essa biblioteca não funcione.

 

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

Do site oficial da biblioteca - ffll.sourceforge.net.

Mais precisamente: http://ffll.sourceforge.net/downloads.htm -> Faça o download de um aplicativo de amostra que usa a FFLL.

Há um código C++ e um modelo fcl simples.

Bem, talvez seja mais fácil vincular o MATLAB ao MT4/MT5? Especialmente as soluções já foram propostas.

Onde ler?
 
SergeyVP:

Do site oficial da biblioteca - ffll.sourceforge.net.

Mais precisamente: http://ffll.sourceforge.net/downloads.htm -> Faça o download de um aplicativo de amostra que usa a FFLL.

Há um código C++ e um modelo fcl simples.

Onde ler isso?
Aqui. https://www.mql5.com/pt/articles/44
 

Eu gostaria de ouvir o "chefe da loja de transportes" que anunciou este tópico e escreveu que tudo funcionou maravilhosamente no MT4.

O problema é que o arquivo .fcl não está carregado.

A propósito: a biblioteca não é totalmente compatível com o padrão. Há exceções, limitações, etc. E a saída é apenas conjuntos de um único elemento.