Campeonato de optimización de algoritmos. - página 132

 

Y, de hecho, un ejemplo de biblioteca de miembros. Algoritmo de optimización de trabajo, basado en RNG. Es bastante bueno (para RNG) para la búsqueda máxima de funciones con parámetros de 1...5 (tal vez más, sin restricciones en el código, pero los resultados serán decepcionantes). No es bueno para el campeonato, pero servirá de ejemplo:

#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)));
}
//+------------------------------------------------------------------+
 

El resultado medio del HSS para el FF del ejemplo anterior es -3,9699791274683918.

Hice 5 ejecuciones del script con el parámetro 1000 llamadas FF.

Compila los ejemplos y comprueba. En el lugar de la pruebaao.ex5 en el campeón será su biblioteca.

Recordatorio:

En el campeonato el script seguirá siendo el mismo sin ningún cambio, el contenido del FF en ff.ex5 será diferente, y la librería competidora debe ser ao.ex5, se puede ver por las funciones importadas declaradas.

Si es necesario añadir funciones exportadas a la biblioteca de participantes, se avisará con antelación. En este momento se muestran todos los códigos de los scripts y las interfaces necesarias (una vez más), prepárate.

 
Andrey Dik:

El resultado medio del HSS para el FF del ejemplo anterior es -3,9699791274683918.

Hice 5 ejecuciones del script con el parámetro 1000 llamadas FF.

Compila los ejemplos y comprueba. En el lugar de la pruebaao.ex5 en el campeón será su biblioteca.

Recordatorio:

En el campeonato el script seguirá siendo el mismo sin ningún cambio, el contenido de FF en ff.ex5 será diferente, y la librería competidora debería ser ao.ex5, se puede ver por las funciones importadas declaradas.

Si es necesario añadir funciones exportadas a la biblioteca de participantes, se avisará con antelación. En este punto se muestran todos los códigos de los scripts y las interfaces necesarias (una vez más), prepárate.

H La interfaz funciona. Transferir los tres códigos anteriores a cincos.

1. Llamó al script ejecutable como Ch Script.

2. la biblioteca de la función de aptitud se denomina ff. Así es como debería llamarse. De lo contrario, el script no lo verá.

3. La biblioteca del algoritmo de ejemplo se llama ao. La biblioteca debería llamarse así. De lo contrario, el script no lo verá.

He ejecutado el script en el gráfico. Antes de eso, cambié la función de aptitud en la biblioteca a doble ffVolue = 2+exp(-MathAbs(x1+x2+x3)); el máximo real es tres. Lo tengo.


Según entiendo, tengo que reescribir mi algoritmo en el formato del algoritmo de ejemplo, renombrar mis funciones en el código a los nombres que están en el ejemplo y comprobar que funcionan.

No es necesario estudiar la interfaz de conexión y el ejemplo dado FF.

Archivos adjuntos:
ff.mq5  2 kb
ao.mq5  5 kb
 
Yuri Evseenkov:

H La interfaz funciona. Transferido estos tres códigos a la 5.

1. nombrar el script ejecutable como Ch Script.

2. la biblioteca de la función de aptitud se denomina ff. Así es como debería llamarse. De lo contrario, el script no lo verá.

3. La biblioteca del algoritmo de ejemplo se llama ao. La biblioteca debería llamarse así. De lo contrario, el script no lo verá.

He ejecutado el script en el gráfico. Antes de eso, cambié la función de aptitud en la biblioteca a doble ffVolue = 2+exp(-MathAbs(x1+x2+x3)); el máximo real es tres. Lo tengo.


Según entiendo, tengo que reescribir mi algoritmo en el formato del algoritmo de ejemplo, renombrar mis funciones en el código a los nombres del ejemplo y comprobar que funcionan.

No es necesario estudiar la interfaz de conexión y el ejemplo dado FF.

¡Genial! Has hecho todo correctamente.

Sólo una pequeña corrección en lo destacado: en el algoritmo del participante, hay queasegurarse de declarar (exactamente como en el ejemplo) las funciones exportables obligatorias, el contenido de esas funciones exportables y la presencia de otras personalizadas quedan a criterio del participante .Eso es lo que dice en los comentarios.

Es sencillo, ¿no? ))

 
Ah, y sí... Los ejemplos funcionarán también en MT4. No lo he comprobado, pero no hay nada ahí que no funcione en MT4. Eso es lo que he dicho para los que son alérgicos (o emtapáticos) a la MT5, el campeonato también está abierto para ellos.
 
Andrey Dik:
Ah, y sí... Los ejemplos también funcionan en MT4. No lo he comprobado, pero no hay nada que no funcione en MT4. Eso es lo que dije para aquellos que son alérgicos (o emtapy miedo) a MT5, el campeonato está abierto para ellos también.

Para que funcione en foursquare, sustituye #import "ff.ex5" y #import "ao.ex5" por #import "ff.ex4" y #import "ao.ex4" en el script ejecutable y en el algoritmo del miembro de ejemplo.

También puedes escribir en 4 . Por ejemplo, cuando compilé el código MQL4 en MQL5, sólo hubo un error. He cambiado TRUE por true o one y ha funcionado. Debería escribirlo como se muestra en el ejemplo. Todavía no he arreglado mi propio código. Lo intentaré.


Archivos adjuntos:
Ch_script.mq4  2 kb
ff.mq4  2 kb
ao.mq4  5 kb
 

¡Buenas tardes!

Estoy preparando una plataforma (página web) dedicada a los algoritmos de optimización, donde habrá concursos, información útil y muchas otras cosas interesantes y útiles.

Todo el mundo podrá poner a prueba su solidez en la redacción de algoritmos y probarlos contra otros participantes. El participante no necesitará enviar el algoritmo al servidor, toda la interacción con el FF, ubicado en el servidor, se produce a través de REST, el participante envía un conjunto de argumentos al servidor, y obtiene el resultado de vuelta FF, no se requiere ningún árbitro, ya que todo es extremadamente transparente, mientras que sigue siendo secreto para los algoritmos de los participantes.

No se pierdan la oportunidad.

 
Andrey Dik:

...

¡Esperen las noticias!

Esperando


 
Andrey Dik:

¡Buenas tardes!

Estoy preparando una plataforma (página web) dedicada a los algoritmos de optimización, donde habrá concursos, información útil y muchas otras cosas interesantes y útiles.

Todo el mundo podrá poner a prueba su solidez en la redacción de algoritmos y probarlos contra otros participantes. El participante no necesitará enviar el algoritmo al servidor, toda la interacción con el FF, ubicado en el servidor, se produce a través de REST, el participante envía un conjunto de argumentos al servidor, y obtiene el resultado de vuelta FF, no se requiere ningún árbitro, ya que todo es extremadamente transparente, mientras que sigue siendo secreto para los algoritmos de los participantes.

¡Esperen las noticias!

¡Interesante!

No escuches a los asesores y críticos del foro, haz lo que se te ocurra, si no nada funcionará ))

 
Andrey F. Zelinsky:

Esperando

Sergey Chalyshev:

¡Interesante!

Simplemente no escuches a los consejeros y críticos del foro, haz lo que quieras o no volverá a funcionar ))

Gracias)