Optimización de enjambre de partículas (PSO): descripción general

El proceso de encontrar valores óptimos para los parámetros específicos de un sistema dado para cumplir con todos los requisitos de diseño mientras se considera el costo más bajo posible se denomina optimización . Los problemas de optimización se pueden encontrar en todos los campos de la ciencia.

Los algoritmos de optimización convencionales (algoritmos deterministas) tienen algunas limitaciones como:

  • soluciones de base única
  • convergencia a óptimos locales
  • problemas de espacio de búsqueda desconocido

Para superar estas limitaciones, muchos académicos e investigadores han desarrollado varias metaheurísticas para abordar problemas de optimización complejos/no resueltos. Ejemplo: Optimización de enjambre de partículas , Optimización de lobo gris , Optimización de colonia de hormigas , Algoritmos genéticos , Algoritmo de búsqueda de cuco , etc.  

El artículo Introducción a la optimización de enjambre de partículas (PSO) explicó los conceptos básicos de los algoritmos de optimización estocástica y explicó la intuición detrás de la optimización de enjambre de partículas (PSO). Este artículo tiene como objetivo profundizar en la optimización de enjambres de partículas (PSO).              

Inspiración del algoritmo

Particle Swarm Optimization (PSO) es un potente algoritmo de optimización metaheurística inspirado en el comportamiento de enjambre observado en la naturaleza, como la formación de peces y aves. PSO es una simulación de un sistema social simplificado. La intención original del algoritmo PSO era simular gráficamente la coreografía elegante pero impredecible de una bandada de pájaros.  

En la naturaleza, cualquiera de las vecindades observables de las aves está limitada a algún rango. Sin embargo, tener más de un pájaro permite que todos los pájaros en un enjambre sean conscientes de la superficie más grande de una función de aptitud.  

Modelemos matemáticamente los principios mencionados anteriormente para hacer que el enjambre encuentre los mínimos globales de una función de aptitud

Modelo matemático  

  • Cada partícula en la optimización de enjambre de partículas tiene una posición, velocidad y valor de aptitud asociados.
  • Cada partícula realiza un seguimiento del valor de la partícula_bestFitness_value_partícula_bestFitness_position.
  • Se mantiene un registro de global_bestFitness_position y global_bestFitness_value.

Fig. 1: Estructura de datos para almacenar la población de Swarm

Fig. 2: Estructura de datos para almacenar i-ésima partícula de Swarm

Algoritmo

Parámetros del problema:

  • Número de dimensiones (d)
  • Límite inferior (minx)
  • Límite superior (maxx)

Hiperparámetros del algoritmo:  

  • Número de partículas (N)
  • Número máximo de iteraciones (max_iter)
  • Inercia (w)
  • Cognición de partículas (C1)
  • Influencia social del enjambre (C2)

Algoritmo:  

Step1: Randomly initialize Swarm population of N particles Xi ( i=1, 2, …, n)
Step2: Select hyperparameter values
           w, c1 and c2
Step 3: For Iter in range(max_iter):  # loop max_iter times  
            For i in range(N):  # for each particle:
               a. Compute new velocity of ith particle
                    swarm[i].velocity = 
                         w*swarm[i].velocity + 
                         r1*c1*(swarm[i].bestPos - swarm[i].position) +
                         r2*c2*( best_pos_swarm - swarm[i].position) 
               b. If velocity is not in range [minx, max] then clip it
                    if swarm[i].velocity < minx:
                        swarm[i].velocity = minx
                    elif swarm[i].velocity[k] > maxx:
                        swarm[i].velocity[k] = maxx
               c. Compute new position of ith particle using its new velocity
                    swarm[i].position += swarm[i].velocity
               d. Update new best of this particle and new best of Swarm
                     if swarm[i].fitness < swarm[i].bestFitness:
                        swarm[i].bestFitness = swarm[i].fitness
                        swarm[i].bestPos = swarm[i].position

                     if swarm[i].fitness < best_fitness_swarm
                        best_fitness_swarm = swarm[i].fitness
                        best_pos_swarm = swarm[i].position
             End-for
         End -for
Step 4: Return best particle of Swarm

Publicación traducida automáticamente

Artículo escrito por shaadk7865 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *