Campeonato de Otimização de Algoritmos. - página 132

 

E, na verdade, um exemplo de uma biblioteca membro. Algoritmo de otimização de trabalho, baseado em RNG. É bastante bom (para RNG) para procurar no máximo funções com parâmetros de 1...5 (talvez mais, sem restrições em código, mas os resultados serão decepcionantes). Não é bom para o campeonato, mas serve, por exemplo:

#property library
#property strict

//+------------------------------------------------------------------+
// тестовая фитнес функция чемпионата, не известна участникам
#import "ff.ex5"
int    GetParamCount (); 
void   GetParamProperties (double &min, double &max, double &step); 
int    GetCountRunsFF (); 
double FF (double &array []); 
#import
//+------------------------------------------------------------------+


///////////////////////////////////////////////////////////////////////////////| 
//  Здесь список экспортируемых функций библиотеки оптимизации, которые
//обязаны объявлены именно так как показано ниже, для того, что проверочный скрипт
//мог корректно обратится к библиотеке, содержимое этих функций на усмотрение
//участников 
/* 
//+------------------------------------------------------------------+
// алгоритм оптимизации участника
#import "ao.ex5"
// инициализация АО
void   InitAO (int paramCount, int maxFFruns);
// запуск АО 
void   StartAlgo (); 
// получить максимальное значение ФФ       
double GetMaxFF (); 
#import
//+------------------------------------------------------------------+
*/

//+------------------------------------------------------------------+
void InitAO (int paramCount, int maxFFruns) export
{ 
  G_MaxFFruns  = maxFFruns; 
  G_ParamCount = paramCount; // можно и так: G_ParamCount = GetParamCount ();
  GetParamProperties (G_MinParam, G_MaxParam, G_StepParam);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void StartAlgo () export
{ 
  bool   stopAlgo = false; 
  int    ffRuns   = 0; 
  double temp     = 0.0; 
  double param []; 
  ArrayResize (param, G_ParamCount); 
  
  //------------------------------------------------------------------
  while(!stopAlgo) 
  {
    GetOptParam (param); 
    temp = FF (param); 
    
    if(temp > G_BestResult) 
    {
      G_BestResult = temp; 
      Comment (G_BestResult);
    } 

    ffRuns++; 
    
    if(ffRuns == G_MaxFFruns) 
      stopAlgo = true; 
  }
  //-----------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double GetMaxFF () export
{ 
  return (G_BestResult);
}
//+------------------------------------------------------------------+
///////////////////////////////////////////////////////////////////////////////| 


///////////////////////////////////////////////////////////////////////////////|
// Ниже - функции участников, объявление и содержимое на их усмотрение 

int    G_MaxFFruns  = 0; 
double G_BestResult = -DBL_MAX; 
int    G_ParamCount = 0; 
double G_MinParam   = -DBL_MAX; 
double G_MaxParam   = DBL_MAX; 
double G_StepParam  = 0.0; 

//+------------------------------------------------------------------+
void GetOptParam (double &param []) 
{ 
  int size = ArraySize (param); 
  for(int i = 0; i < size; i++) 
    param [i] = SeInDiSp (RNDfromCI (G_MinParam, G_MaxParam), 
                          G_MinParam, 
                          G_MaxParam, 
                          G_StepParam);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double SeInDiSp (double in, double inMin, double inMax, double step) 
{ 
  if(in <= inMin) 
    return (inMin); 
  if(in >= inMax) 
    return (inMax); 
  if(step == 0.0) 
    return (in); 
  else 
    return (inMin + step * (double)MathRound ((in - inMin) / step));
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double RNDfromCI (double min, double max) 
{ 
  if(min == max) 
    return (min); 
  double Min, Max; 
  if(min > max) 
  {
    Min = max; 
    Max = min;
  }
  else 
  {
    Min = min; 
    Max = max;
  }
  return (double(Min + ((Max - Min) * (double)MathRand () / 32767.0)));
}
//+------------------------------------------------------------------+
 

O resultado médio do HSS para o FF do exemplo acima é -3,9699791274683918.

Fez 5 execuções do roteiro com o parâmetro 1000 FF chamadas.

Compilar exemplos e verificar. No lugar do testeao.ex5 no campeonato estará sua biblioteca.

Lembrete:

No campeonato o roteiro permanecerá o mesmo sem nenhuma alteração, o conteúdo do FF em ff.ex5 será diferente, e a biblioteca concorrente deverá ser ao.ex5, pode ser vista pelas funções declaradas importadas.

Se for necessário acrescentar funções exportadas à biblioteca participante, haverá um aviso prévio. No momento em que todos os códigos de script e interfaces necessárias são mostrados (mais uma vez), prepare-se.

 
Andrey Dik:

O resultado médio do HSS para o FF do exemplo acima é -3,9699791274683918.

Fez 5 execuções do roteiro com o parâmetro 1000 FF chamadas.

Compilar exemplos e verificar. No lugar do testeao.ex5 no campeonato estará sua biblioteca.

Lembrete:

No campeonato o roteiro permanecerá o mesmo sem nenhuma alteração, o conteúdo do FF em ff.ex5 será diferente, e a biblioteca concorrente deverá ser ao.ex5, pode ser vista pelas funções declaradas importadas.

Se for necessário acrescentar funções exportadas à biblioteca participante, haverá um aviso prévio. Neste ponto todos os códigos de script e interfaces necessárias são mostrados (mais uma vez), prepare-se.

H A interface funciona. Transferiu os três códigos acima para fives.

1. Chamou o roteiro executável de Ch Script.

2. A biblioteca da função fitness é denominada ff. É assim que deve ser chamado. O roteiro não o verá de outra forma.

3. a biblioteca do algoritmo do exemplo é chamada ao. A biblioteca deve ser assim nomeada. Caso contrário, o roteiro não o verá.

Eu corri o roteiro na tabela. Antes disso, mudei a função de adequação na biblioteca para dobrar ffVolue = 2+exp(-MathAbs(x1+x2+x3)); o máximo real é três. Entendi.


Pelo que entendi, preciso reescrever meu algoritmo no formato do algoritmo do exemplo, renomear minhas funções no código para os nomes que estão no exemplo e verificar se elas funcionam.

Não há necessidade de estudar a interface de conexão e o exemplo dado FF.

Arquivos anexados:
ff.mq5  2 kb
ao.mq5  5 kb
 
Yuri Evseenkov:

H A interface funciona. Transferiu estes três códigos para a 5.

1. nomeou o script executável como Ch Script.

2. A biblioteca da função fitness é denominada ff. É assim que deve ser chamado. O roteiro não o verá de outra forma.

3. a biblioteca do algoritmo do exemplo é chamada ao. A biblioteca deve ser assim nomeada. Caso contrário, o roteiro não o verá.

Eu corri o roteiro na tabela. Antes disso, mudei a função de adequação na biblioteca para dobrar ffVolue = 2+exp(-MathAbs(x1+x2+x3)); o máximo real é três. Entendi.


Pelo que entendi, preciso reescrever meu algoritmo no formato do algoritmo do exemplo, renomear minhas funções no código para os nomes que estão no exemplo e verificar se elas funcionam.

Não há necessidade de estudar a interface de conexão e o exemplo dado FF.

Ótimo! Você fez tudo corretamente.

Apenas uma pequena correção no destaque: no algoritmo do participante,você precisa garantir que declara (exatamente como no exemplo) as funções exportáveis obrigatórias, o conteúdo dessas funções exportáveis e a presença de outras funções personalizadas ficam a critério do participante .Isso é o que diz nos comentários.

É simples, não é? ))

 
Ah, e sim... Os exemplos também funcionarão no MT4. Não chequei, mas não há nada lá dentro que não funcionasse no MT4. Foi o que eu disse para aqueles que são alérgicos (ou emtapáticos) ao MT5, o campeonato também está aberto a eles.
 
Andrey Dik:
Ah, e sim... Os exemplos também funcionarão no MT4. Eu não verifiquei, mas não há nada que possa não funcionar no MT4. Foi o que eu disse para aqueles que são alérgicos (ou com medo de empatizar) ao MT5, o campeonato também está aberto para eles.

Para fazê-lo funcionar em quadrado, substituir #importar "ff.ex5" e #importar "ao.ex5" por #importar "ff.ex4" e #importar "ao.ex4" no script executável e no algoritmo de membro de exemplo.

Você também pode escrever em 4 . Por exemplo, quando compilei o código MQL4 em MQL5, houve apenas um erro. Eu mudei VERDADEIRO para verdadeiro ou um e funcionou. Eu deveria apenas escrevê-lo como mostra o exemplo. Eu ainda não consertei meu próprio código. Vou tentar.


Arquivos anexados:
Ch_script.mq4  2 kb
ff.mq4  2 kb
ao.mq4  5 kb
 

Boa tarde!

Estou preparando uma plataforma (website) dedicada a algoritmos de otimização, onde haverá concursos, informações úteis e muitas outras coisas interessantes e úteis.

Todos serão capazes de testar sua força em algoritmos de escrita e testá-los contra outros participantes. O participante não precisará enviar o algoritmo para o servidor, toda interação com o FF, localizado no servidor, ocorre via REST, o participante envia um conjunto de argumentos para o servidor, e recebe o resultado FF de volta, nenhum árbitro é necessário, pois tudo é extremamente transparente, enquanto permanece em segredo para os algoritmos dos participantes.

Fique atento!

 
Andrey Dik:

...

Aguarde por novidades!

Aguardando


 
Andrey Dik:

Boa tarde!

Estou preparando uma plataforma (website) dedicada a algoritmos de otimização, onde haverá concursos, informações úteis e muitas outras coisas interessantes e úteis.

Todos serão capazes de testar sua força em algoritmos de escrita e testá-los contra outros participantes. O participante não precisará enviar o algoritmo para o servidor, toda interação com o FF, localizado no servidor, ocorre via REST, o participante envia um conjunto de argumentos para o servidor, e recebe o resultado FF de volta, nenhum árbitro é necessário, pois tudo é extremamente transparente, enquanto permanece em segredo para os algoritmos dos participantes.

Aguarde por novidades!

Interessante!

Não escute os conselheiros e críticos do fórum, faça o que você pensa, senão nada vai funcionar))

 
Andrey F. Zelinsky:

Aguardando

Sergey Chalyshev:

Interessante!

Apenas não escute os conselheiros e críticos do fórum, faça o que quiser ou não vai funcionar novamente ))

Obrigado!)