Discusión sobre el artículo "Métodos de optimización de la biblioteca ALGLIB (Parte II)" - página 4

 
Maxim Dmitrievsky #:

He estado mirando las fi guras de prueba aquí. Las fotos coinciden.

Todavía no he entendido el truco de las multidimensionales, tengo que averiguarlo.

Este es el primer artículo de la serie. El pensamiento no se detiene, el conjunto de funciones de prueba se ha cambiado en la dirección de la complicación y la lucha contra los falsos éxitos de los métodos y los falsos positivos que se inicializan por cero. Por eso deberías mirar artículos recientes, por ejemplo este.

Siempre hay fuentes actualizadas en github.

Probando métodos de gradiente:

https://www.mql5.com/ru/forum/475597/page2#comment_55006029

GitHub - JQSakaJoo/Population-optimization-algorithms-MQL5: Population optimization algorithms
GitHub - JQSakaJoo/Population-optimization-algorithms-MQL5: Population optimization algorithms
  • JQSakaJoo
  • github.com
https://t.me/+vazsAAcney4zYmZi A list of implemented optimization algorithms (M - is a modified improved version, joo - is an algorithm of my development):
 
Andrey Dik #:

Este es el primer artículo de la serie. El pensamiento no se detiene, el conjunto de funciones de prueba se ha modificado para hacerlo más complicado y para contrarrestar los falsos éxitos de los métodos que se inicializan con cero, y en general para contrarrestar los falsos positivos. Por eso deberías echar un vistazo a artículos recientes, por ejemplo éste.

Las fuentes están siempre actualizadas.

Ya veo. Si habrá tiempo y ganas - haré para multidimensional.

En tres dimensiones ya mostró imágenes que gradiente incluso en ellos se atascan en las localidades. Si se divide el espacio de búsqueda en lotes, es fijo. Esta es la forma de trabajar con solucionadores de gradiente y no de otra manera.

 
Añadida la función LBFGS Multivariante Megaciudad

Resultado para 1000 mediciones. Tiempo perdido del servidor - 9 minutos.

Parece que no hay errores, hecho de acuerdo con los moldes del artículo.


 
Andrey Dik #:

Este es el primer artículo de la serie. El pensamiento no se detiene, el conjunto de pruebas de las funciones se ha modificado para hacerlo más complejo y contrarrestar los falsos éxitos de los métodos y los falsos positivos que se inicializan con cero. Por eso deberías echar un vistazo a los artículos recientes, por ejemplo este.

Siempre hay fuentes actualizadas en github.

Probando métodos de gradiente:

https://www.mql5.com/ru/forum/475597/page2#comment_55006029

Hay un f-ya en el includnik, ¿se usa?

¿Es la misma f-ya, cómo determinar los límites correctos? He entendido que se toma una parte de ella.

Si no he reducido los límites, entonces el cálculo (encontrar el máximo) es más complicado?

//------------------------------------------------------------------------------
class C_Megacity : public C_Function
{
  public: //===================================================================
  C_Megacity ()
  {
    fuName = "Megacity";

    // límites de la función
    xMinRange = -10.0; xMaxRange = -2;
    yMinRange = -10.5; yMaxRange = 10;

    //coordenadas máximas
    globalMaxFunValue = 1.0; //12.0
    xGlobalMax        = -3.1357545740179393;
    yGlobalMax        = 2.006136371058429;

    //coordenadas mínimas
    globalMinFunValue = 0.0; //-1
    xGlobalMin        = -9.5;
    yGlobalMin        = -7.5;
  }

  double Core (double x, double y)
  {
    double a = MathSin (MathSqrt (MathAbs (x - 1.13) + MathAbs (y - 2.0)));
    double b = MathCos (MathSqrt (MathAbs (MathSin (x))) + MathSqrt (MathAbs (MathSin (y - 2.0))));
    double f = a + b;

    double res = floor (MathPow (f, 4)) -
                 floor (2 * exp (-(pow (x + 9.5, 2) + pow (y + 7.5, 2)) / 0.4));

    return Scale (res, -1.0, 12.0, 0.0, 1.0);
  }
};
 
globalMaxFunValue = 1.0; //12.0

Para el caso encontrado de 25 dimensiones. No sé dónde están los errores.


 
Maxim Dmitrievsky #:

Si no redujera los límites, ¿el cálculo (encontrar el máximo) sería más difícil?

No, no es más complicado. En tu función, ¿cuántos rascacielos están por encima del 50% del mínimo y el máximo de la función? ¿Cuántos en la mía? ¿En qué superficie es más fácil superar el 50% de altura si dispersas los puntos al azar? - En la tuya. Así que, insistiendo de nuevo, los límites están mal puestos.

Aquí se dice al respecto: https://www.mql5.com/es/articles/13923#tag3

Obtuve este resultado de su código:

Algún resultado no muy divertido, pero persistentemente publicas los mejores resultados de diferentes ensayos. Ejecuta 20 ensayos (20 pulsaciones en el botón de reproducción), o escribe un bucle que simule múltiples ensayos, y luego calcula el resultado medio, como haces en los artículos.

Lo que lleva a preguntarse, ¿por qué 100.000, por qué no 1.000.000.000.000?


No hace falta ser tímido, pon mil millones, pero por alguna razón no muestras el número de llamadas a la función objetivo, ¿cuántas llamadas hubo? En las pruebas de ranking, sólo se permiten 10.000 llamadas a la función objetivo, y en el caso de los métodos de gradiente (donde el algoritmo puede intentar hacer muchas más llamadas al FF), hay un corte en el código, si se supera el límite, se da el valor mínimo del objetivo (los métodos buscan un mínimo, por lo que se invierte el valor):

// Aumento del contador de inicio de función y control de restricciones----------------
  numberLaunches++;
  if (numberLaunches >= maxNumbLaunchesAllowed)
  {
    fi.Set (0, DBL_MAX);
    CAlglib::MinNLCRequestTermination (state);
    return;
  }

Todo esto se ha descrito anteriormente en los artículos.

Популяционные алгоритмы оптимизации: Алгоритмы эволюционных стратегий (Evolution Strategies, (μ,λ)-ES и (μ+λ)-ES)
Популяционные алгоритмы оптимизации: Алгоритмы эволюционных стратегий (Evolution Strategies, (μ,λ)-ES и (μ+λ)-ES)
  • www.mql5.com
В этой статье будет рассмотрена группа алгоритмов оптимизации, известных как "Эволюционные стратегии" (Evolution Strategies или ES). Они являются одними из самых первых популяционных алгоритмов, использующих принципы эволюции для поиска оптимальных решений. Будут представлены изменения, внесенные в классические варианты ES, а также пересмотрена тестовая функция и методика стенда для алгоритмов.
 
Cómo obtener la misma superficie se ha preguntado. No está en el includnik. Cuando la dimensionalidad del problema aumenta, el número de iteraciones aumenta, es natural. La comparación debe hacerse en términos de tiempo de ejecución hasta la convergencia al mismo máximo, si la tarea es conseguir una bala de plata para todos los casos de la vida.
 
Maxim Dmitrievsky plata para todos los casos.

La clase tiene métodos GetMinRangeX (), GetMaxRangeX (), GetMinRangeY (), GetMaxRangeY (), con la ayuda de los cuales se pueden consultar los límites (bueno, y simplemente en el código de las funciones de prueba correspondientes se pueden ver los límites).

En la práctica, siempre hay un límite en el número máximo permitido de accesos al objetivo, en las pruebas hemos adoptado un límite de 10 000 accesos.

Si no hay límite ni en términos de recursos computacionales ni de tiempo, es mejor no utilizar algoritmos de optimización en absoluto y hacer una simple enumeración completa, pero esto nunca ocurre en la vida real. Las pruebas y comparaciones de métodos se realizan con un límite de 10 000 aciertos en el objetivo. El objetivo de comparar algoritmos es ver qué algoritmos obtienen el resultado mejor y con menos accesos al objetivo. Por consiguiente, cuantas más veces tenga que acceder al objetivo un algoritmo para obtener resultados comparables, más débil se considerará el algoritmo en el tipo de tareas correspondiente.

Por desgracia, se le escapan puntos muy sutiles, que se describen detalladamente en los artículos sobre métodos de optimización.

 
¿Existe algún criterio específico para evaluar la calidad de la optimización?) si el algoritmo necesita más iteraciones, ¿es malo?

Comparar la velocidad de búsqueda del óptimo con una búsqueda completa es una comparación normal.
 
Maxim Dmitrievsky #:
Comparar la velocidad de búsqueda del óptimo con una búsqueda de fuerza bruta completa es una comparación normal.

Hay situaciones en las que la fuerza bruta completa no encontrará el óptimo porque los nodos de la rejilla de fuerza bruta no caen sobre él.