Discusión sobre el artículo "Algoritmos de optimización de la población: Enjambre de partículas (PSO)"

 

Artículo publicado Algoritmos de optimización de la población: Enjambre de partículas (PSO):

En este artículo, analizaremos el popular algoritmo de optimización de la población «Enjambre de partículas» (PSO — particle swarm optimisation). Con anterioridad, ya discutimos características tan importantes de los algoritmos de optimización como la convergencia, la tasa de convergencia, la estabilidad, la escalabilidad, y también desarrollamos un banco de pruebas y analizamos el algoritmo RNG más simple.

Como utilizaremos el mismo esquema para construir algoritmos que en el primer artículo del ciclo (y lo seguiremos haciendo en el futuro), descrito en la Fig. 2, no nos resultará difícil conectar el algoritmo al banco de pruebas.

Al ejecutar el banco de pruebas, veremos animaciones similares a las mostradas a continuación. En este caso, podemos ver claramente cómo se comporta un enjambre de partículas. El enjambre de verdad se comporta como un enjambre en la naturaleza. En el mapa de calor de la función, se desplaza en forma de nube densa.

Permítanme recordarles que el círculo negro destaca el óptimo global (máximo) de la función, mientras que el punto negro indica las mejores coordenadas promedio del algoritmo de búsqueda obtenidas en el momento de la iteración actual. Vamos a explicar de dónde proceden los valores promedio. En cuanto a sus coordenadas, el mapa de calor es bidimensional, y la función optimizada puede incluir cientos de variables (medidas); por consiguiente, el resultado se promediará sobre las coordenadas.

n1

  PSO en la función de prueba Skin.

n2

  PSO en la función de prueba Forest.

n3

  PSO en la función de prueba Megacity.

Autor: Andrey Dik

 
Sospecho que si se amortigua linealmente el término de peso de inercia (w) a lo largo de la búsqueda, mejoraría la capacidad de búsqueda local de los enjambres y se aceleraría la convergencia. La mayoría de la bibliografía sugiere imponer un límite inferior de w=0,4. He comprobado que el esquema PSO es muy eficaz para una amplia clase de problemas con este valor.
 
koehnw límite inferior de w=0,4. He comprobado que el esquema PSO es muy eficaz para una amplia clase de problemas con este valor.

¡gracias por el comentario! sí, es posible vincular coeficientes a iteraciones, como se hace en el algoritmo de optimización por una manada de lobos grises. por favor, mire mis siguientes artículos.

lamentablemente, no todos los artículos han sido publicados aún en inglés.
Population Optimization Algorithms: Ant Colony Optimization (ACO): https://www.mql5.com/ru/articles/11602
Algoritmos de optimización de poblaciones: Colonia Artificial de Abejas (ABC): https://www.mql5.com/ru/articles/11736
Algoritmos de optimización de poblaciones: Optimización por una manada de lobos grises (GreyWolf Optimizer - GWO): https://www.mql5.com/ru/articles/11785

tabla de estimación
 

¡Esos artículos sobre técnicas de optimización metaheurísticas son impresionantes! Estás haciendo un gran trabajo Andrey, es alucinante la cantidad de experiencia que tienes para compartir con nosotros, ¡gracias!

@METAQUOTES ¡por favor considera implementar esos objetivos de optimización metaheurística al optimizador! Sería genial para el software.

Algo fácil que el usuario puede establecer dentro de OnTester() como:

OptimizerSetEngine("ACO"); // Optimización de colonias de hormigas
OptimizadorSetEngine("COA"); // algoritmo de optimización cuco
OptimizerSetEngine("ABC"); // colonia artificial de abejas
OptimizerSetEngine("GWO"); // optimizador lobo gris
OptimizadorSetEngine("PSO"); // optimización por enjambre de partículas 



Saludos desde Brasil

 
Vinicius Barenho Pereira #:

¡Esos artículos sobre técnicas de optimización metaheurística son impresionantes! Estás haciendo un gran trabajo Andrey, es alucinante la cantidad de experiencia que tienes para compartir con nosotros, ¡gracias!

@METAQUOTES ¡por favor considera implementar esos objetivos de optimización metaheurística al optimizador! Sería genial para el software.

Algo fácil que el usuario puede establecer dentro de OnTester() como:


Saludos desde Brasil

gracias por la revisión! cada nuevo artículo para mí es un nuevo descubrimiento, me alegro de que estés conmigo.

 
Gracias, pero me temo que estoy muy por encima de mis conocimientos.