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

 
Andrey Dik:

Un ejemplo sencillo. El algoritmo de optimización está colgado en un gráfico en alguna parte. El Asesor Experto se optimiza en el probador incorporado mediante una búsqueda completa. Así que puede utilizar su propio algoritmo de optimización en lugar del habitual.

Otro ejemplo. El Asesor Experto trabaja en el gráfico y las operaciones. Guarda los resultados de la operación después de algún tiempo al algoritmo (puede estar dentro o fuera del Asesor Experto) junto con sus parámetros y recibe los nuevos parámetros de vuelta y luego continúa el comercio (en su caso tendríamos que ejecutar un histórico, mientras que en mi caso podemos utilizar la optimización "en vivo").

Y así sucesivamente. Es decir, en estos ejemplos el algoritmo es completamente independiente de la tarea.

He aplicado deliberadamente estos ejemplos al comercio. Somos comerciantes.

Algo fuera de lo común.

El Asesor Experto ya ha sido optimizado en el probador, así que ¿qué tiene que ver esto con su propio algoritmo de optimización?

El segundo caso es un poco más claro. Sí, si proporciona llamadas individuales independientes, puede llamarlas una a una. Y puedes hacerlo todo a la vez mediante un proceso separado. Ya veo, pero es una complicación del algoritmo y nos alejamos del objetivo del Campeonato. El objetivo del Campeonato es el algoritmo de optimización, no su aplicación. Hay mucha gente que no lo entiende, y ahora se está complicando aún más.

 
Andrey Dik:

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

En este código, no se trata de una llamada única, sino que la parte principal del algoritmo se pone ahí, con un poco de imposición de parte del algoritmo al participante. Según las condiciones iniciales, el participante tiene derecho a ocultar todo el algoritmo.
 
Dmitry Fedoseev:

1. Algo fuera de lo común. La optimización del Asesor Experto ya se ha ejecutado en el probador, ¿y qué tiene que ver con su propio algoritmo de optimización?

2. El segundo caso es un poco más claro. Sí, si proporciona llamadas individuales independientes, puede llamarlas una por una. Y puedes hacerlo todo a la vez mediante un proceso separado. Ya veo, pero esto es una complicación del algoritmo y una desviación del propósito del Campeonato. El objetivo del Campeonato es el algoritmo de optimización, no su aplicación. Hay mucha gente que no lo ha entendido, y ahora se está complicando.

1. Nada fuera de lo común, es una situación de la vida real. Un probador interno realiza una prueba tras otra (un parámetro - contador se hace cargo) y controlamos la optimización de todos los parámetros y en cantidad ilimitada.

2. Hemos decidido utilizar 2 variantes de trabajo con FF. Así que todo está bien, no hay ningún problema, el que quiera, así utilizará la optimización.

Los participantes son libres de elegir con qué guión de prueba quieren trabajar, el primero o el segundo.

 
Dmitry Fedoseev:
En este código, no se trata de una llamada única, sino que la parte principal del algoritmo se traslada al exterior, con cierta imposición de parte del algoritmo al participante. En las condiciones originales, el participante tiene derecho a ocultar todo el algoritmo.

¿Dónde está la imposición? Pregunte al algoritmo cuántas veces y qué debe contar, el algoritmo del participante decide esas cosas. Los algoritmos pueden tener una arquitectura muy diferente del mismo AG, y el ejemplo permite utilizar un algo en cualquier principio de funcionamiento.

Allí mostré las funciones de servicio, que pueden estar vacías si el participante no las necesita.

 
Andrey Dik:

¿Dónde está la imposición? Pregunte al algoritmo cuántas veces y qué debe contar, el algoritmo del participante decide esas cosas. Los algoritmos pueden tener una arquitectura muy diferente del mismo AG, y el ejemplo permite utilizar un algo en cualquier principio de funcionamiento.

Mostré las funciones de servicio allí - pueden estar vacías si no las necesita el participante.

Sólo hay que dar a los participantes un puntero a una función o a un objeto con un método. Estamos en el tercer milenio.
 
Pase también el número permitido de llamadas ff a la función participante, para poder asignar el número de épocas y el número de individuos.
 
Dmitry Fedoseev:
Además, pasa en la función del participante el número permitido de llamadas FF, para que podamos distribuir el número de épocas y el número de individuos.

Por ejemplo, se le dice al algoritmo que puede tener un máximo de 100 llamadas FF... Aha! - él (el algoritmo) pensó, voy a engañar a todo el mundo y llamar a lamúsica para 50 notas, voy a llamar a la FF sólo 50 veces. :)

No, que cuente todos los que necesite. Y nosotros decidiremos cuándo detenerlo. Al fin y al cabo, el número de llamadas de FF se evaluará como indicador de la calidad del trabajo.

 
Andrey Dik:

Por ejemplo, se le dice al algoritmo que puede tener un máximo de 100 llamadas FF... Aha! - él (el algoritmo) pensó, voy a engañar a todo el mundo y llamar a lamúsica para 50 notas, voy a llamar a la FF sólo 50 veces. :)

No, que cuente todos los que necesite. Y nosotros decidiremos cuándo detenerlo. Al fin y al cabo, el número de veces que se llame a la FF se juzgará como una medida de rendimiento.

¿Qué sentido tiene llamarlo astutamente menos veces? Puedes hacer menos, no puedes hacer más. ¿Cuál es el problema?

La función FF cuenta las llamadas. Si es más de lo permitido, descalificación.

 

Esta es aproximadamente la plantilla de la biblioteca de un miembro:

#property library
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

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

здесь участник пишет свои классы, если надо 

void function(CFF * aff,int n,double & params[],double & value) export{

    Здесь участник пишет свой код и вызывает функцию так - aff.value(x); // x - это массив double

//по окончанию поиска вернуть params (параметры соответствующие лучшему результату), value (лучший результат)

}

здесь участник создает свои вспомогательные функции
 
Dmitry Fedoseev:

¿Qué sentido tiene ser tan astuto y llamar menos veces? Puedes hacer menos, no puedes hacer más. ¿Cuál es el problema?

La función ff cuenta las llamadas. Si se permite más, descalificación.

Menos carreras de ff es mejor, esa es la cuestión. Esto puede ser un poco complicado.

No hay necesidad de limitar el algoritmo, que cuente. O bien decidirá detenerse por sí mismo, o bien será detenido a la fuerza. El algoritmo no necesita saber cuántas carreras es el techo - nadie sabrá el techo. No habrá descalificaciones. El algoritmo resolverá el problema como pudo hacerlo.

La única descalificación es el intento de guardar los resultados y utilizarlos en posteriores ejecuciones del script de comprobación.