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

 
Andrey Dik:

La biblioteca *.ex debería ser esencialmente una forma unificada de acceder al algoritmo. El algoritmo puede estar incrustado en esta biblioteca estándar, o puede llamar a su algoritmo desde esta biblioteca con sus propias funciones.

¿Y qué función dar al participante? ¿El participante se lo dará o le pasará algo? Juego de palabras, no estoy seguro de lo que quieres decir.

El participante debe recibir la función (ff) que está investigando. El que buscará el máximo o el mínimo. Su algoritmo de búsqueda estará, por supuesto, en su biblioteca.

Es decir, no dar la función en sí (enviar el código), sino pasarla de alguna manera al código del concursante durante el campeonato.

 

y no es necesario dar el algoritmo FF.

La secuencia de comandos solicita un conjunto de parámetros optimizables de la biblioteca a través de la importación

el script envía esta matriz a la biblioteca FF, que devuelve el resultado

el script envía el resultado a la biblioteca miembro

el script llama a la función de servicio de la biblioteca de miembros, si es necesario, el algoritmo hará algo, o es sólo una función vacía dentro de ella.

Estoy escribiendo desde mi móvil, lo siento

 
Andrey Dik:

y no es necesario dar el algoritmo FF.

La secuencia de comandos solicita un conjunto de parámetros optimizables de la biblioteca a través de la importación

el script envía esta matriz a la biblioteca FF, que devuelve el resultado

el script envía el resultado a la biblioteca miembro

el script llama a la función de servicio de la biblioteca de miembros, si es necesario, el algoritmo hará algo, o es sólo una función vacía dentro de ella.

Estoy escribiendo desde mi móvil, lo siento

No está claro. Esperaremos un ejemplo en el código.
 

Aunque está parcialmente claro, está específicamente claro que es a través de la jo)).

Resulta que cuando se llama a una función miembro, esa función debe hacer un paso de su trabajo. Es necesario poner todo patas arriba. No tengo ganas de pensar en ello. Así que la tarea ya es complicada, y tenemos que añadirle aún más complicaciones artificiales.

Hay dos formas posibles de hacerlo:

1. Una clase con ffs, como he descrito anteriormente.

2. Un participante importa una biblioteca en su biblioteca con ff. El revisor lo sustituirá por el suyo.

No hay otras opciones. A menos que se pueda pasar un puntero a la función, si es que es posible (pero hasta ahora nadie ha sugerido dónde buscar en la ayuda). El participante debe tener plena capacidad para llamar a una función ff.

 

en general, así, y por supuesto habrá un contador de tiempo. esquema:

#import "oa.ex5" // алгоритм оптимизации участника
void   ServiceFunc1 (); 
int    GetReplaysCount (); // запрос количества запусков ФФ (у участника может быть свой размер колонии или нечто подобное если это не ГА 
void   GetOptParam (double &param []); 
void   ServiceFunc2 (); 
bool   StopAlgo ();        // этой функцией участник по желанию может остановить оптимизацию
int    GetEpochCount ();   // если участник желает использовать своё фиксированное значение "эпох"
void   SendFFvolue (double &volue); 
double GetMaxFF (); 
#import

#import "ff.ex5" // тестовая фитнес функция чемпионата, не известна участникам 
double GetFFvolue (double &param []); // передаём в ФФ оптимизируемые параметры, получаем результат ФФ 
#import

void OnStart () 
{ 
  bool   stopAlgo = false; 
  int    epoch = GetEpochCount (); 
  int    maxEpochPossible = 1000; 
  double param []; 
  double volue; 
  int    epochCNT = 0; 
  int    ffCNT = 0; 
  
  double FFvolue = -DBL_MAX; 
  
  ServiceFunc1 (); 
  while(!stopAlgo) 
  {
    for(int i = 0; i < GetReplaysCount (); i++) 
    {
      GetOptParam (param); 
      volue = GetFFvolue (param); 
      ffCNT++; 
      SendFFvolue (volue);
    }
    ServiceFunc2 (); 
    
    epochCNT++; 
    
    if(epochCNT >= epoch) 
      stopAlgo = true; 
    
    if(epochCNT >= maxEpochPossible) 
      stopAlgo = true;
  }
  
  Print ("Epoch: " + (string)epochCNT + " ; FF starts: " + (string)ffCNT + " ; MaxFF: " + (string)GetMaxFF ());
} 
 
Dmitry Fedoseev:

Un participante debe tener la capacidad total de llamar a una función ff.

No, no debería. Y no debería porque si no debería, puede utilizar la optimización interna en el EA en el probador incorporado, y si debería, entonces habrá muy poco uso práctico para los comerciantes.

Mi artículo muestra un ejemplo en el que el FF se llama desde el algoritmo. Esto reduce el campo de aplicación. Si tomas el algoritmo del artículo (lo que no está prohibido por las normas), tendrás que aplicar tu ingenio para librarte de tal llamada interna del FF.

 
Andrey Dik:

en general, así, y por supuesto habrá un contador de tiempo. esquema:

No, no es bueno)) tal enfoque. Un participante debe poder hacer un ciclo, es decir, su única acción implica varias llamadas al ffs.
 
Andrey Dik:
No, no debería. Y no debería porque si no lo es, entonces se puede utilizar la optimización interna en el EA en el probador incorporado, y si debería, entonces habrá muy poco uso práctico para los comerciantes.
Fíjate en el método universal expuesto anteriormente. Y si una llamada única a través de un intermediario, requerirá una adaptación muy seria de la función de búsqueda, eso es exactamente lo que nadie va a hacer, porque tendrá que sacar el cerebro y ponerlo en su lugar a través de la EA.
 
Dmitry Fedoseev:
No, no funciona)) tal enfoque. Un participante debe ser capaz de girar ciclos, es decir, su única acción implica varias llamadas a ffs.
Lo siento, los ciclos serán controlados externamente. Todo vale. :)
 
Andrey Dik:
Lo siento, los ciclos serán controlados externamente. Todo es justo. :)
No. La función ff debe contar las llamadas.