Campeonato de optimización de algoritmos.

 

El Campeonato de Optimización de Algoritmos está concebido como una competición para gente buscadora, curiosa, para la que quedarse quieto significa ir hacia atrás.

El Campeonato es una gran oportunidad para poner a prueba sus algoritmos en condiciones de competencia difíciles, más duras y exigentes que las que se dan en la vida cotidiana. Es una oportunidad para asegurarse de que su algoritmo no puede ser mejor, lo que significa confianza para resolver los retos de la vida que se avecinan, o para asegurarse de que su algoritmo necesita o puede ser más refinado y mejorado.

Reglas:

1. Se admiten en el campeonato algoritmos de optimización basados en cualquier principio y teoría de búsqueda, absolutamente cualquiera.

2. Cada participante podía representar sólo un algoritmo en código fuente o en forma compilada de biblioteca *.ex5.

3. Al final del campeonato, los participantes se clasificarán según los siguientes criterios: velocidad del algoritmo, número de ejecuciones de la función de aptitud, precisión de la búsqueda de soluciones.

Condiciones:

1. El organizador se reserva el derecho de rechazar la participación de cualquier persona sin explicar los motivos.

2. el organizador tiene derecho a participar en el campeonato.

3. el organizador rechazará los premios a favor de los participantes en caso de que el fondo de premios de los posibles patrocinadores esté disponible en el momento de anunciar los premios.

Organizador del Campeonato de Algoritmos de Optimización: Joo.

Sé valiente, participa y gana. Puede ocurrir que su algoritmo se utilice en el futuro en el optimizador interno de MT, ¿por qué no?

 

La inscripción está abierta.

Todos aquellos que deseen participar, por favor, inscríbanse aquí. El 20 de junio de 2016 se presentarán los códigos de los scripts ejecutables de ejemplo con interfaces para conectar algoritmos. En otras 3 semanas, el 11 de julio de 2016, comenzará el campeonato propiamente dicho.

 
En general. Por favor, discuta sólo sobre el tema "Algoritmos de optimización". Un paso a la derecha, un paso a la izquierda - pelotón de fusilamiento :)
 
Andrey Dik:

La inscripción está abierta.

Todos aquellos que deseen participar, por favor inscríbanse aquí. El 20 de junio de 2016 se presentarán los códigos de los scripts ejecutables de ejemplo con interfaces para conectar algoritmos. Y en 3 semanas comenzará el campeonato propiamente dicho.

Y en general hay ideas, o todos en el proceso de pensar en ello. En todo caso, puedo compartir mis pensamientos.
 

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Andrey Dik, 2016.06.10 17:24

Andrey Dik
Etiqueta Konow
Igor Volodin
Dmitry Fedoseev
Sergey Chalyshev
Ghenadie Tumco
Igor Volodin

 
¿Debemos posponerlo por un tiempo? Escribe un artículo. Poner una plantilla de clase en el código base. Creo que tengo una plantilla muy buena:)
 
¿Son suficientes siete personas para un campeonato? (Desde el punto de vista de MQ)
 
Dmitry Fedoseev:
Y en general, hay ideas, o todo está en proceso de ser pensado. En todo caso, puedo compartir mis pensamientos.

Por supuesto que hay ideas.

Un artículo es muy bueno. ¿En qué dirección quiere escribir el artículo?

Es posible aplazar el campeonato, si hay una necesidad real de hacerlo. Pero aún queda mucho tiempo antes de que empiece, el campeonato comienza el 11 de julio de 2016.

 
Andrey Dik:

Por supuesto que sí.

Escúpelo. Vamos a condenar.

El artículo es muy bueno. Pero no puedes esperar más. La gente tiene poca memoria, por lo general, y olvida rápidamente dónde empieza todo....

class CFF{
   public:
   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}
   virtual double value(){return(0);}
   virtual string note(){return("");}
};

class CFF1:public CFF{
   public:
   double fun(double & x[]){
      int c=ArraySize(x);
      double s=0;
      for(int i=0;i<c;i++){
         s+=MathPow(x[i],2);
      }
      return(s);   
   }
   virtual string type(){
      return("min");
   }
   virtual double value(){
      return(0);
   }
   virtual string note(){
      return("");
   }   
};

class CFF2:public CFF{
   public:
   double fun(double & x[]){
      int c=ArraySize(x);
      double s=0;
      double p=0;
      for(int i=0;i<c;i++){
         s+=MathAbs(x[i]);
         p*=MathAbs(x[i]);
      }
      return(s+p); 
   }
   virtual string type(){
      return("min");
   }
   virtual double value(){
      return(0);
   }
   virtual string note(){
      return("");
   }   
};

He aquí una construcción para seleccionar una función a investigar (ff). Una clase base con métodos virtuales y clases hijas con diferentes funciones.

Lo declaro así:

CFF * ff=new CFF1();

O así, dependiendo de la función que se necesite:

CFF * ff=new CFF2();

En la función de optimización, tenemos un parámetro del tipo CFF para pasar un puntero a la clase con el ff seleccionado.

***

Métodos de la clase base:

   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}   

fun - función propiamente dicha, los parámetros se pasan en un array de tipo double.

type - tipo de función: min o max - qué buscar en la función mínimo o máximo.

El resto no es necesario, los hacía para mí... Para la memoria: valor - valor en el extremo, nota - alguna descripción. No son necesarios para el Campeonato, especialmente el valor.

***

Ahora no tengo una función, sino una clase y en ella un método para establecer el ff:

   
      void SetFF(CFF * aff){
         this.ff=aff;
      }  
Entonces uso this.ff.fun(...) en todas partes;
 

Para el campeonato, la clase tendrá que situarse en una biblioteca. Haga una función en la biblioteca, que será llamada desde fuera, esta función hará todo: crear una instancia de la clase, establecer todos los parámetros pasados a la función, etc.

El nombre de la función es estándar para todos. Cada uno tiene sus propios nombres de archivo de la biblioteca.

El comprobador tiene un guión. El comprobador cambia el nombre de la biblioteca importada, la compila y la ejecuta.

Eso es todo:

CFF * ff=new CFF1();

En el script del verificador.

 
Dmitry Fedoseev:

La clase tendrá que ser colocada en una biblioteca para el campeonato. Haga una función en la biblioteca, que será llamada desde fuera, esta función hará todo: crear una instancia de la clase, establecer todos los parámetros pasados a la función, etc.

El nombre de la función es estándar para todos. Cada uno tiene sus propios nombres de archivo de la biblioteca.

El comprobador tiene un guión. El comprobador cambia el nombre de la biblioteca importada, compila y ejecuta.

¿Cree que podemos prescindir de la POO para resolver la tarea que se nos ha asignado? Estoy acostumbrado a resolver todo con mi propio método. (Bueno, no me gusta la OOP). :)