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.
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