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

 
Andrey Dik:

Você pode ir aonde você quiser. Mas este campeonato acontecerá como eu disse anteriormente. De acordo com estas regras, você pode competir comigo e com outros concorrentes e sem mim.

Outros campeonatos podem ser diferentes, organize o seu próprio campeonato e faça o que achar melhor. É um país livre.

Voilà!

Tudo de bom, caro teórico!

 
Реter Konow:

Voilà!

Adeus, respeitado teórico!

Não me chateie. Prepare-se e concorra pelas regras, em vez de tentar mudar as regras para se adequar a você... E não apenas balbuciar, é melhor começar a ler a literatura relevante sobre otimização.

Tudo de bom, caro teórico!

 

Saudações.

Transferi meu código do editor de quatro para o de cinco editores. Apenas um erro! Substituiu TRUE por um e tudo funcionou! Agradavelmente surpreendido.

Este é meu primeiro código em F. Você poderia me dizer o que eu preciso colocar em meu código para me conectar ao campeonato?

//+------------------------------------------------------------------+
//|                                                 Yuri skript.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//----------Блок глобальных переменных кода-----
Глобальные переменные кода не должны совпадать с 
именами глобальных переменных интерфейса?
//----------------------------------------------

//---------- Блок ввода начальных значений------
input double xmin=0;//min диапазона поиска
input double xmax=100;//max диапазона поиска
input double Xnz=10;// начальные значения X[]
input int N=3;     // число параметров
input double e=0.01; // погрешность поиска
Будет ли известен диапазон поиска, число параметров ?
//----------------------------------------------
void OnStart()
  {
OC();
}
//--------------ОСНОВНАЯ ФУНКЦИЯ---------------
void OC()
{
//---------
// ЗДЕСЬ РАСПОЛОЖЕН АЛГОРИТМ ПОИСКА.ИМЕЕТСЯ НЕСКОЛЬКО ПОДФУНКЦИЙ.
// ФУНКЦИЯ ФОРМИРУЕТ МАССИВ ЗНАЧЕНИЙ X[x1,x2...xn]. 
// ФУНКЦИЯ РАСЧЕТА F() ВЫСЧИТЫВАЕТ И ВОЗВРАЩАЕТ ЗНАЧЕНИЕ ЗАДАННОЙ ФУНКЦИИ И ДАЛЕЕ ПО АЛГОРИТМУ
F();
//----------
}
//------ФУНКЦИЯ РАСЧЕТА ЗАДАННОЙ ФУНКЦИИ НАПРИМЕР F=(exp(X[1]+X[2]+X[3]))/(X[1]*X[2]*X[2]*X[3]*X[3]*X[3]);
double F()
{
if(X[1]==0||X[2]==0||X[3]==0){zn=0;return(F);}
F=(exp(X[1]+X[2]+X[3]))/(X[1]*X[2]*X[2]*X[3]*X[3]*X[3]);
return (F);
}
 
Yuri Evseenkov:

Saudações.

Transferi meu código do editor de quatro para o editor de cinco. Apenas um erro! Substituiu TRUE por um e tudo funcionou! Agradavelmente surpreendido.

Este é meu primeiro código em F. Você poderia me dizer o que eu preciso inserir em meu código para me conectar ao campeonato?

Hi.

Não, isso não é bom.

Você tem que fazer isso assim

Roteiro -> BiblAO.ex5 -> ff.ex5

Anteriormente, no ramo, havia exemplos de códigos, por favor, dê uma olhada. Não há tempo agora, vou mostrar links para exemplos um pouco mais tarde.

 

Roteiro de campeonato executável:

#property script_show_inputs
#property strict

//+------------------------------------------------------------------+
// алгоритм оптимизации участника
#import "ao.ex5"
// инициализация АО
void   InitAO (int paramCount, int maxFFruns);
// запуск АО 
void   StartAlgo (); 
// получить максимальное значение ФФ       
double GetMaxFF (); 
#import
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
// тестовая фитнес функция чемпионата, не известна участникам
#import "ff.ex5"
// запросить количество параметров ФФ 
int    GetParamCount (); 
// запуск ФФ, получеие значения соответствующее параметроам ФФ
double FF (double &array []); 
// произведённое количество запусков ФФ
int    GetCountRunsFF (); 
#import
//+------------------------------------------------------------------+

//--- input parameters
input int MaxFFruns_P = 1000; 


//+------------------------------------------------------------------+
void OnStart () 
{ 
  // узнаем, сколько параметров нужно оптимизировать
  int    paramCount = GetParamCount (); 

  ulong  startTime = GetMicrosecondCount (); 
  
  //------------------------------------------------------------------
  InitAO (paramCount, MaxFFruns_P);
  StartAlgo ();
  //------------------------------------------------------------------
  
  startTime = GetMicrosecondCount () - startTime; 
  
  Print ("Макс: " + DoubleToString (GetMaxFF (), 16)); 
  Print ("Запусков ФФ: " + (string)GetCountRunsFF ()); 
  Print ("Время: " + (string)startTime + " мкс; " + DoubleToString ((double)startTime / 1000000.0, 8) + " c"); 
  Print ("---------------------------------");
}
//+------------------------------------------------------------------+
 

Vou agora preparar uma biblioteca FF de amostra (para demonstrar a interface) e um exemplo de algoritmo de otimização de um participante (funcionando, pode ser aplicado em qualquer lugar).

Observe: o roteiro acima já é auto-suficiente para entender o que é exigido dos participantes, conectar seu algo por interfaces e funções depreciadas e estar pronto para participar. O roteiro foi dado há muitas páginas....

 

Exemplo de um campeonato FF (tudo será o mesmo, exceto o conteúdo da função FF e respectivamente a variávelG_paramCount- eles não serão conhecidos pelos concorrentes, o árbitro irá compilar):

#property library
#property strict

int G_countRuns  = 0; 
int G_paramCount = 3; 

//+------------------------------------------------------------------+
int GetParamCount () export
{ 
  return (G_paramCount);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void GetParamProperties (double &min, double &max, double &step) export
{ 
  min  = 0.1; 
  max  = 10.0; 
  step = 0.1;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
int GetCountRunsFF () export
{ 
  return (G_countRuns);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double FF (double &param []) export
{ 
  G_countRuns++; 
  
  int sizeArray = ArraySize (param); 
  if(sizeArray != G_paramCount) 
    return (-DBL_MAX); 
  
  double x1 = param [0];
  double x2 = param [1];
  double x3 = param [2];

  double ffVolue = (-exp(x1+x2+x3))/(x1*x2*x2*x3*x3*x3);
  
  return (ffVolue);
}
//+------------------------------------------------------------------+
 
Andrey Dik:

Exemplo de campeonato FF (tudo será o mesmo, exceto o conteúdo da função FF e, portanto, a variávelG_paramCount- eles não serão conhecidos pelos concorrentes, o árbitro irá compilar):

Incrível.

Quando eu pedi este exemplo, você fez tudo para não fornecê-lo.

Agora eu fui, e por favor - FF exemplo.

Qual é o significado disto?

 
Реter Konow:

Incrível.

Quando eu pedi este exemplo, você fez tudo para não fornecê-lo.

Agora eu fui, e lá vai você - um exemplo de FF.

O que você quer dizer com isso?

É apenas um exemplo, o mesmo que no problema do texto, eu já lhe disse isso muitas vezes. Veja com atenção - a interface de conexão é exatamente a mesma, como duas gotas de luar.

Mas você está pedindo o código do campeonato FF, é claro que você não vai conseguir, ninguém vai, e não está no exemplo agora, e eu não vou saber disso. A única coisa conhecida é a interface de conexão FF via função importação, e isto é o que é mostrado no exemplo. Está claro? Bem, quanto mais podemos explicar já... Eu não sei.

Estes códigos já foram mostrados no ramo, estou apenas reunindo tudo por conveniência.

Então entenda, e de preferência para que eu não tenha que explicar novamente, e à mesma pessoa....

Se você finalmente entender tudo, vá em frente, escreva o algoritmo e vá para a batalha. Você já deveria ter feito isso há muito tempo, todos já quase terminaram de escrever seus algoritmos (sem contar aqueles que os têm prontos).

 
Andrey Dik:

Este é apenas um exemplo, o mesmo que no problema do texto, já lhes disse isto muitas vezes. Veja com atenção - a interface de conexão é exatamente a mesma, como duas gotas de luar.

Mas você está pedindo o código do campeonato FF, é claro que você não receberá, ninguém receberá, e agora ele não está no exemplo e eu não o saberei. A única coisa conhecida é a interface de conexão FF via função importação, e isto é o que é mostrado no exemplo. Está claro? Bem, quanto mais podemos explicar já... Eu não sei.

Estes códigos já foram mostrados no ramo, estou apenas reunindo tudo por conveniência.

Então entenda, e de preferência para que eu não tenha que explicar novamente, e para a mesma pessoa....

Eu só precisava de um exemplo desses.

O problema com o texto é diferente deste.

Havia um fio, e aqui - uma função analítica.

Foi por isso que pedi um exemplo.

Razão: