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

 
Andrey Dik:

Puedes ir donde quieras. Pero este campeonato se llevará a cabo como dije antes. De acuerdo con estas reglas, puedes competir conmigo y con otros competidores y sin mí.

Otros campeonatos pueden ser diferentes, organice el suyo propio y haga lo que crea conveniente. Es un país libre.

¡Voilà!

¡Todo lo mejor, querido teórico!

 
Реter Konow:

¡Voilà!

¡Adiós, respetado teórico!

No me tomes el pelo. Prepárate y compite según las reglas, en lugar de intentar cambiar las reglas a tu medida... Y no se limite a balbucear, mejor empiece a leer la literatura pertinente sobre la optimización.

¡Todo lo mejor, querido teórico!

 

Saludos.

Transferí mi código del editor de cuatro al de cinco. Sólo un error. ¡Sustituyó a TRUE por uno y todo funcionó! Gratamente sorprendido.

Este es mi primer código en F. ¿Podría decirme qué tengo que poner en mi código para conectarme al 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:

Saludos.

Transferí mi código del editor de cuatro al de cinco. Sólo un error. ¡Sustituyó a TRUE por uno y todo funcionó! Gratamente sorprendido.

Este es mi primer código en F. ¿Podría decirme qué tengo que insertar en mi código para conectarme al campeonato?

Hola.

No, eso no es bueno.

Tienes que hacerlo así

Script -> BiblAO.ex5 -> ff.ex5

Anteriormente en la rama había ejemplos de códigos, por favor, echa un vistazo. No hay tiempo ahora, mostraré enlaces a ejemplos un poco más tarde.

 

Script ejecutable del campeonato:

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

A continuación, prepararé un ejemplo de biblioteca FF (para demostrar la interfaz) y un ejemplo de algoritmo de optimización de un participante (que funciona, se puede aplicar en cualquier lugar).

Por favor, tenga en cuenta: el script anterior ya es autosuficiente, para entender lo que se requiere de los participantes, conecte su algo por interfaces y funciones depreciadas y esté listo para participar. El guión fue entregado hace muchas páginas ....

 

Ejemplo de un campeonato FF (todo será igual, excepto el contenido de la función FF y respectivamente la variableG_paramCount- no serán conocidos por los concursantes, el árbitro 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:

Ejemplo de campeonato FF (todo será igual, excepto el contenido de la función FF y, en consecuencia, la variableG_paramCount- no serán conocidos por los competidores, el árbitro compilará):

Increíble.

Cuando pedí este ejemplo, hiciste todo lo posible por no proporcionarlo.

Ahora me he ido, y por favor - ejemplo de FF.

¿Qué significa esto?

 
Реter Konow:

Increíble.

Cuando pedí este ejemplo, hiciste todo lo posible por no proporcionarlo.

Ahora me he ido, y ahí tienes un ejemplo de FF.

¿Qué quieres decir con eso?

Es sólo un ejemplo, lo mismo que en el problema del texto, te lo he dicho muchas veces. Fíjate bien: la interfaz de conexión es exactamente igual, como dos gotas de alcohol de la luna.

Pero estás pidiendo el código del campeonato de FF, claro que no lo vas a conseguir, nadie lo va a conseguir, y ahora no está en el ejemplo y no lo voy a saber. Lo único que se conoce es la interfaz de conexión de FF a través de la función de importación, y esto es lo que se muestra en el ejemplo. ¿Está claro? Bueno, cuánto más podemos explicar ya... No lo sé.

Estos códigos ya han sido mostrados en la rama, sólo estoy reuniendo todo para la conveniencia.

Así que entiende, y preferiblemente para no tener que explicarlo de nuevo, y a la misma persona....

Si finalmente lo entiendes todo, adelante, escribe el algoritmo y ve a la batalla. Deberías haberlo hecho hace tiempo, todo el mundo ha terminado casi de escribir sus algoritmos (sin contar los que los tienen ya hechos).

 
Andrey Dik:

Esto es sólo un ejemplo, lo mismo que en el problema del texto, te lo he dicho muchas veces. Fíjate bien: la interfaz de conexión es exactamente igual, como dos gotas de alcohol de la luna.

Pero estás pidiendo el código FF, por supuesto que no lo vas a conseguir, nadie lo va a conseguir, y no está en el ejemplo ahora, y no lo voy a saber. Lo único que se conoce es la interfaz de conexión de FF a través de la función de importación, y esto es lo que se muestra en el ejemplo. ¿Está claro? Bueno, cuánto más podemos explicar ya... No lo sé.

Estos códigos ya han sido mostrados en la rama, sólo estoy reuniendo todo para la conveniencia.

Así que entiende, y preferiblemente para no tener que explicarlo de nuevo, y a la misma persona....

Sólo necesitaba un ejemplo así.

El del problema con el texto es diferente a este.

Había una cadena, y aquí - una función analítica.

Por eso he pedido un ejemplo.