Обсуждение статьи "Популяционные алгоритмы оптимизации: Рой частиц (PSO)"

 

Опубликована статья Популяционные алгоритмы оптимизации: Рой частиц (PSO):

В данной статье рассмотрим популярный алгоритм "Рой Частиц" (PSO — particle swarm optimisation). Ранее мы обсудили такие важные характеристики алгоритмов оптимизации как сходимость, скорость сходимости, устойчивость, масштабируемость, разработали стенд для тестирования, рассмотрели простейший алгоритм на ГСЧ.

Поскольку мы используем одну и ту же схему построения алгоритмов, что и в первой статье цикла (и в дальнейшем продолжим это делать), описанную на рис.2, то нам не составить труда подключить алгоритм к тестовому стенду.

Запустив стенд, мы увидим анимации, подобные тем, что показаны ниже. В данном случае мы хорошо видим, как ведет себя рой частиц. Рой ведет себя действительно как рой в природе. По тепловой карте функции он перемещается в виде плотного облака.

Напомню, что черным кружком обозначен глобальный оптимум (max) функции, а черной точкой - лучшие усредненные координаты алгоритма поиска, полученные на момент текущей итерации. Поясним откуда берутся усредненные значения. Тепловая карта двумерная по координатам, а оптимизируемая функция может включать сотни переменных (измерений) - поэтому результат, усредненный по координатам.

n1

n2

n3

Как видим на анимации, тесты показали, что PSO достаточно хорошо справляется c гладкой первой функцией, но только при оптимизации двух переменных, с увеличением размерности пространства поиска, эффективность алгоритма резко падает, особенно это заметно на второй и дискретной третьей функциях. Результаты заметно хуже, чем у случайного алгоритма, описанного в предыдущей статье. К результатам мы еще вернёмся и подробно обсудим их при формировании сравнительной таблицы результатов.

Автор: Andrey Dik

 
Отличное сравнение алгоритмов! Я подозреваю, что если линейно демпфировать весовой член инерции (w) на протяжении всего поиска, это улучшит способность роя к локальному поиску и ускорит сходимость. В большинстве литературы предлагается установить нижний предел w=0,4. Я обнаружил, что схема PSO очень эффективна для широкого класса задач с таким значением.
 
koehnw нижний предел w=0,4. Я обнаружил, что схема PSO очень эффективна для широкого класса задач с таким значением.

спасибо за комментарий! да, можно связать коэффициенты с итерациями, как это делается в алгоритме оптимизации стаей серых волков. посмотрите, пожалуйста, мои следующие статьи.

К сожалению, не все статьи еще опубликованы на английском языке.
Алгоритмы оптимизации популяций: Ant Colony Optimization (ACO): https://www.mql5.com/ru/articles/11602
Алгоритмы оптимизации популяций: Искусственная пчелиная колония (ABC): https://www.mql5.com/ru/articles/11736
Алгоритмы оптимизации популяций: Оптимизация стаей серых волков (GreyWolf Optimizer - GWO): https://www.mql5.com/ru/articles/11785

оценочная таблица
 

Эти статьи о метаэвристических методах оптимизации просто потрясающие! Вы делаете огромную работу, Андрей, это поразительно, как много опыта вы можете поделиться с нами, спасибо!

@METAQUOTES, пожалуйста, рассмотрите возможность внедрения этих целей метаэвристической оптимизации в оптимизатор! Это было бы здорово для программного обеспечения.

Что-то простое, что пользователь может установить внутри OnTester() как:

OptimizerSetEngine("ACO"); // Оптимизация муравьиной колонии
OptimizerSetEngine("COA"); // алгоритм оптимизации "кукушки"
OptimizerSetEngine("ABC"); // искусственная пчелиная колония
OptimizerSetEngine("GWO"); // оптимизатор "серый волк
OptimizerSetEngine("PSO"); // оптимизация роем частиц 



Привет из Бразилии

 
Vinicius Barenho Pereira #:

Эти статьи о метаэвристических методах оптимизации просто потрясающие! Вы делаете огромную работу, Андрей, это просто умопомрачительно, как много опыта вы можете поделиться с нами, спасибо!

@METAQUOTES, пожалуйста, рассмотрите возможность внедрения этих целей метаэвристической оптимизации в оптимизатор! Это было бы здорово для программы.

Что-то простое, что пользователь может установить внутри OnTester() как:


Cheers from Brazil

Спасибо за обзор! Каждая новая статья для меня - это новое открытие, я рад, что вы со мной.

 
Спасибо, но боюсь, что я выхожу за рамки своих знаний.