Discusión sobre el artículo "Optimización paralela con el método de enjambre de partículas (Particle Swarm Optimization)"

 

Artículo publicado Optimización paralela con el método de enjambre de partículas (Particle Swarm Optimization):

El presente artículo describimos un modo de optimización rápida usando el método de enjambre de partículas, y presentamos una implementación en MQL lista para utilizar tanto en el modo de flujo único dentro de un EA, como en el modo paralelo de flujo múltiples como un complemento ejecutado en los agentes locales del simulador.

Desde un punto de vista algorítmico, el método de PSO es relativamente sencillo. La idea principal consiste en generar un conjunto de "partículas" virtuales en el espacio de los parámetros de entrada del asesor experto. Después, las partículas se mueven y modifican su velocidad dependiendo de las métricas comerciales del asesor experto en los puntos correspondientes en el espacio. El proceso se repite en multitud de ocasiones, hasta que las métricas dejen de mejorar. A continuación, mostramos el pseudocódigo del algoritmo:

Particle Swarm Optimization Pseudo-Code

Particle Swarm Optimization Pseudo-Code

Según este, cada partícula tiene la posición, velocidad y memoria actuales de su "mejor" punto en el pasado. Entendemos por "mejor" el punto (el conjunto de parámetros de entrada del experto) donde se ha conseguido el mejor valor de la función objetivo para esta partícula. Vamos a describir esto en una clase.

  class Particle
  {
    public:
      double position[];    // current point
      double best[];        // best point known to the particle
      double velocity[];    // current speed
      
      double positionValue; // EA performance in current point
      double bestValue;     // EA performance in the best point
      int    group;
      
      Particle(const int params)
      {
        ArrayResize(position, params);
        ArrayResize(best, params);
        ArrayResize(velocity, params);
        bestValue = -DBL_MAX;
        group = -1;
      }
  };

El tamaño total de las matrices es igual a la dimensión del espacio de optimización, es decir, al número de parámetros optimizables del asesor (pasados ​​al constructor). Como la optimización presupone, por defecto, que cuanto mayor sea el valor de la función objetivo, mejor será el valor de la función objetivo, vamos a inicializar el campo bestValue con el número mínimo posible -DBL_MAX. Como criterio de valoración del experto, suele intervenir una de las métricas comerciales (el beneficio, la rentabilidad, el ratio de Sharpe, etcétera). Si realizamos la optimización utilizando un parámetro cuyos valores inferiores se consideran más convenientes (por ejemplo la reducción), podremos realizar las transformaciones adecuadas para maximizar los valores opuestos.

Las matrices y variables se han hecho públicas para simplificar el acceso y su código de recálculo. Respetando estrictamente los principios de la POO, deberíamos ocultar estas utilizando el modificador private y describir los métodos de lectura y modificación.

Autor: Stanislav Korotky

Razón de la queja: