Discusión sobre el artículo "Algoritmos de optimización de la población: Evolución de grupos sociales (Evolution of Social Groups, ESG)" - página 2

 
Andrey Dik #:
Dudo que el valor GetMicrosecondCount pueda repetir los valores en ejecuciones repetidas, aunque se esfuerce. Siempre que las pruebas individuales duren más de un microsegundo, por supuesto.
2024.02.03 16:11:25.824 OPTIMIZATION_METHOD_AO_BGA
2024.02.03 16:11:25.873 AmountCycles = 5000, Repeats = 1
2024.02.03 16:11:25.873 BestResult = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999
2024.02.03 16:11:25.873 Check = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999
2024.02.03 16:11:36.957 OPTIMIZATION_METHOD_AO_BGA
2024.02.03 16:11:37.007 AmountCycles = 5000, Repeats = 1
2024.02.03 16:11:37.007 BestResult = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999
2024.02.03 16:11:37.007 Check = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999
2024.02.03 16:11:47.218 OPTIMIZATION_METHOD_AO_BGA
2024.02.03 16:11:47.267 AmountCycles = 5000, Repeats = 1
2024.02.03 16:11:47.267 BestResult = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999
2024.02.03 16:11:47.267 Check = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999
2024.02.03 16:12:49.104 OPTIMIZATION_METHOD_AO_BGA
2024.02.03 16:12:49.152 AmountCycles = 5000, Repeats = 1
2024.02.03 16:12:49.152 BestResult = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999
2024.02.03 16:12:49.152 Check = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999

A la izquierda está la columna de tiempos de ejecución del script.

 
fxsaber #:

A la izquierda hay una columna con las horas de inicio de los guiones.


99,99% es el máximo que se puede alcanzar con el paso seleccionado, y por lo que tengo entendido, se selecciona una precisión de dos decimales en los ajustes de BGA.
Por lo tanto, esto no es una consecuencia de la misma inicialización del gcc, sino un resultado de la convergencia completa teóricamente posible dentro de la tarea establecida.
Puedes asegurarte de esto si imprimes el primer cromosoma creado en cada prueba individual, serán cromosomas diferentes. Esta es la asombrosa propiedad del algoritmo de optimización: encontrar la misma solución en diferentes estados iniciales (aleatorios).
 
Se me ocurrió una prueba de la resistencia del algo a quedarse atascado en locales.
Tenemos que colocar todos los agentes en la primera iteración no al azar sobre todo el campo, pero en el mínimo global. La tarea consiste en encontrar el máximo global. Estoy seguro de que muchos algos se quedarán así en el agujero.
Este es un caso muy artificial, pero tiene conclusiones interesantes.
 
Andrey Dik #:
Me vino a la mente una prueba de la resistencia del algo a quedarse atascado en locales.
Necesitamos colocar a todos los agentes en la primera iteración no aleatoriamente sobre todo el campo, sino en el mínimo global. La tarea consiste en encontrar el máximo global. Estoy seguro de que muchos algos se quedarán en el hoyo.
Este es un caso muy artificial, pero tiene conclusiones interesantes.

Toda la población en un punto es una población degenerada. Esto es también una prueba para el efecto de la disminución de la diversidad en la población, el algoritmo debe ser capaz de salir de tal cuello de botella.

Eso es sólo pensar en voz alta.

 
Andrey Dik #:
Necesitamos colocar todos los agentes en la primera iteración no aleatoriamente sobre todo el campo, sino en el mínimo global. La tarea consiste en encontrar el máximo global.

  1. El lanzamiento habitual con la búsqueda del máximo global.
  2. Luego lanzamos desde el punto encontrado(MaxTmp) para encontrar el mínimo global.
  3. A continuación, iniciar desde el punto encontrado(MinTmp) para encontrar el máximo global.
  4. Pasamos al paso 2.

En los pasos 2-3 medimos lo lejos que estamos de los mínimos/máximos globales(MaxGlobal - MaxTmp + MinTmp - MinGlobal). La media es la calificación1 del algoritmo de optimización.

Tomar la media de la suma de(MaxTmp[i]-MinTmp[i]) es el rating2 del algoritmo de optimización.


Ahora no hay ninguna función que permita ejecutar el algoritmo a partir de un punto.

 
fxsaber #:

  1. Inicio normal con búsqueda del máximo global.
  2. A continuación, se parte del punto encontrado(MaxTmp) para buscar el mínimo global.
  3. A continuación, parta del punto encontrado(MinTmp) para buscar el máximo global.
  4. Ir al paso 2.

En los pasos 2-3 medimos lo lejos que estamos de los mínimos/máximos globales(MaxGlobal - MaxTmp + MinTmp - MinGlobal). La media es la calificación1 del algoritmo de optimización.

Tomamos la media de la suma(MaxTmp[i]-MinTmp[i]) - rating2 del algoritmo de optimización.


Puedes hacerlo así)))

Сейчас нет функции, позволяющей запускать алгоритм из точки.

Puedes inicializar "forzosamente" las coordenadas de los agentes con cualquier valor antes de medir el FF en la primera epoch. Los campos de los agentes son públicos. En las "tripas" de los algoritmos se ha intentado que sean lo más accesibles posible desde el exterior, por supuesto, contradice el planteamiento habitual de garantizar la seguridad de los campos, pero el que quiera pegarse un tiro en el pie en cualquier caso encontrará la manera, y así se preserva la comodidad de uso de los algoritmos.

Y, ¿está resuelto el tema de la inicialización del HCS?

 
Andrey Dik #:

El 99,99% es lo máximo que se puede conseguir con el paso seleccionado, y por lo que tengo entendido, la precisión seleccionada es de dos decimales en los ajustes de BGA.
Por lo tanto, esto no es una consecuencia de la misma inicialización de la gcc, sino un resultado de la convergencia completa teóricamente posible dentro de la tarea establecida.
Puedes asegurarte de esto si imprimes el primer cromosoma creado en cada prueba individual, serán cromosomas diferentes. Esta es la asombrosa propiedad del algoritmo de optimización - encontrar la misma solución en diferentes estados iniciales (aleatorios).

Tienes razón, ¡gracias!

void OnStart()
{
  Print(GetMicrosecondCount());
}
2024.02.04 15:31:28.422 2142
2024.02.04 15:31:40.553 2367
2024.02.04 15:31:42.385 2326
 
Andrey Dik #:

Es posible "forzar" externamente la inicialización de las coordenadas de los agentes con cualquier valor antes de que se mida la FF en la primera época.

Por favor, muestre ejemplos de sus dos algoritmos.

 
fxsaber #:

Por favor, demuéstrelo con ejemplos de sus dos algoritmos.

en el bucle principal de épocas insertar un código que sobrescribirá las coordenadas de los agentes por las coordenadas del mínimo global de la función:

for (int epochCNT = 1; epochCNT <= epochCount && !IsStopped (); epochCNT++)
    {
      AO.Moving ();
      
      //---el código insertado---el código insertado---el insertador
      if (epochCNT == 1)
      {
        for (int set = 0; set < ArraySize (AO.a); set++)
        {
          for (int i = 0; i < funcCount; i++)
          {
            AO.a [set].c [i * 2]     = f.GetMinFuncX ();
            AO.a [set].c [i * 2 + 1] = f.GetMinFuncY ();
          }
        }
      }
      //---el código insertado---el código insertado---el insertador

      for (int set = 0; set < ArraySize (AO.a); set++)
      {
        AO.a [set].f = f.CalcFunc (AO.a [set].c, funcCount);
      }

      AO.Revision  ();

      if (Video_P)
      {
        //drawing a population--------------------------------------------------
        SendGraphToCanvas  (1, 1);

        for (int i = 0; i < ArraySize (AO.a); i++)
        {
          PointDr (AO.a [i].c, f, 1, 1, funcCount, false);
        }
        PointDr (AO.cB, f, 1, 1, funcCount, true);

        MaxMinDr (f);

        //dibujar un gráfico de convergencia---------------------------------------------
        xConv = (int)Scale (epochCNT, 1,              epochCount,     H + 2, W - 3, false);
        yConv = (int)Scale (AO.fB,   f.GetMinFun (), f.GetMaxFun (), 2,     H - 2, true);
        Canvas.FillCircle (xConv, yConv, 1, COLOR2RGB (clrConv));

        Canvas.Update ();
      }
    }

Este truco no funcionará con el algoritmo BGA, ya que de esta forma sólo sobrescribiremos el fenotipo, mientras que el genotipo binario permanecerá inalterado. Para ello tendremos que meternos dentro del algoritmo y cuando la población esté en pañales, tendremos que realizar dicha operación quirúrgica.

Esto es lo que se obtiene si se inicializa ESG de esta manera:

expansión

Aquí, tomé un video de la ESG, se puede ver cómo se sale de un punto y se extiende alrededor en busca de un máximo global. No todos los algoritmos se comportan de esta manera, escribí sobre ello en mis artículos, algunos algoritmos no tienen mecanismos para "escapar de la trampa" en absoluto.

 
Hola, estoy empezando a aprender sobre alternativas al algoritmo genético rápido incorporado. Me preguntaba si podría ayudarme a hacer funcionar su optimización BGA. He estado mirando algunos de sus artículos sobre este tema. Sin embargo, siento que estoy empezando tarde, se perdió alguna información en alguna parte y no sé cómo realmente optimizar la EA con un algoritmo diferente. He descargado y compilado test_ao_bga.mq5. Cuando cargo el terminal dice: "Invalid programme type, loading Test_AO_BGA.ex5 failed". Si intento ejecutarlo, el terminal informa: "Test_AO_BGA.ex5 no encontrado". ¿Podrían ayudarme a hacerlo funcionar? ¿Y cómo configuro mi propio EA para que utilice la optimización BGA? Gracias.