Discussão do artigo "Algoritmos de otimização populacionais: Enxame de partículas (PSO)"

 

Novo artigo Algoritmos de otimização populacionais: Enxame de partículas (PSO) foi publicado:

Neste artigo vamos analisar o popular algoritmo de otimização por enxame de partículas (PSO). Anteriormente, discutimos características importantes de algoritmos de otimização, como convergência, velocidade de convergência, estabilidade, escalabilidade e desenvolvemos uma bancada de testes. Também analisamos um algoritmo simples baseado em geradores de números aleatórios (GNA).

Como utilizamos o mesmo esquema de construção do algoritmo que no primeiro artigo da série (e continuaremos fazendo isso), descrito na Figura 2, não temos problemas para incluir o algoritmo na bateria de testes.

Ao iniciar essa bateria, será possível visualizar animações semelhantes às mostradas abaixo. Neste exemplo, é possível ver claramente como o enxame de partículas se comporta, movendo-se como uma nuvem densa no mapa de calor da função.

É importante lembrar que o círculo preto representa o ótimo global (máximo) da função e o ponto preto representa as melhores coordenadas médias obtidas pelo algoritmo de busca na iteração atual. As coordenadas são calculadas como a média entre as medidas, já que a função a ser otimizada pode incluir centenas de variáveis.

n1

  PSO sobre a função de teste Skin.

n2

  PSO sobre a função de teste Forest.

n3

  PSO sobre uma função de teste Megacity.

De acordo com a animação, os testes mostraram que o PSO (Particle Swarm Optimization) funciona bem com a primeira função, especialmente quando otimizando apenas duas variáveis. No entanto, à medida que a dimensionalidade do espaço de busca aumenta, a eficiência do algoritmo diminui significativamente, especialmente na segunda e terceira função discretas. Os resultados são notavelmente inferiores aos obtidos pelo algoritmo aleatório descrito no artigo anterior. Discutiremos esses resultados em detalhes e os compararemos com outros algoritmos na tabela comparativa de resultados.

Autor: Andrey Dik

 
Boa comparação de algoritmos! Suspeito que se você amortecesse linearmente o termo de peso de inércia (w) em toda a pesquisa, isso aumentaria a capacidade de pesquisa local dos enxames e aceleraria a convergência. A maior parte da literatura sugere a imposição de um limite inferior de w=0,4. Descobri que o esquema PSO é muito eficaz em uma ampla classe de problemas com esse valor.
 
koehnw limite inferior de w=0,4. Descobri que o esquema PSO é muito eficaz em uma ampla classe de problemas com esse valor.

obrigado pelo comentário! sim, é possível vincular coeficientes a iterações, como é feito no algoritmo de otimização por uma matilha de lobos cinzentos. dê uma olhada nos meus artigos a seguir.

Infelizmente, nem todos os artigos ainda foram publicados em inglês.
Algoritmos de otimização de população: Ant Colony Optimization (ACO): https://www.mql5.com/ru/articles/11602
Algoritmos de otimização de população: Artificial Bee Colony (ABC): https://www.mql5.com/ru/articles/11736
Algoritmos de otimização de população: Otimização por uma matilha de lobos cinzentos (GreyWolf Optimizer - GWO): https://www.mql5.com/ru/articles/11785

tabela de estimativas
 

Esses artigos sobre técnicas de otimização metaheurística são incríveis! Você está fazendo um ótimo trabalho, Andrey, é impressionante a quantidade de experiência que você tem para compartilhar conosco, obrigado!

@METAQUOTES, considere a possibilidade de implementar essas metas de otimização metaheurística no otimizador! Isso seria ótimo para o software.

Algo fácil que o usuário possa definir dentro de OnTester() como:

OptimizerSetEngine("ACO"); // Otimização por colônia de formigas
OptimizerSetEngine("COA"); // algoritmo de otimização cuco
OptimizerSetEngine("ABC"); // colônia de abelhas artificial
OptimizerSetEngine("GWO"); // otimizador grey wolf
OptimizerSetEngine("PSO"); // otimização por enxame de partículas 



Abraços do Brasil

 
Vinicius Barenho Pereira #:

Esses artigos sobre técnicas de otimização metaheurística são incríveis! Você está fazendo um ótimo trabalho Andrey, é impressionante a quantidade de experiência que você tem para compartilhar conosco, obrigado!

@METAQUOTES, considere a possibilidade de implementar essas metas de otimização metaheurística no otimizador! Isso seria ótimo para o software.

Algo fácil que o usuário possa definir dentro de OnTester() como:


Abraços do Brasil

Obrigado pela avaliação! Cada novo artigo para mim é uma nova descoberta, fico feliz que você esteja comigo.

 
Obrigado, mas receio estar muito além do meu conhecimento.