Алгоритм оптимизации Swarm частиц

Контур алгоритма

particleswarm основан на алгоритме, описанном в Kennedy and Eberhart [1], с использованием модификаций, предложенных в Mezura-Montes и Coello Coello [2] и в Pedersen [3].

Алгоритм роя частиц начинается с создания начальных частиц и присвоения им начальных скоростей.

Он оценивает целевую функцию в каждом местоположении частицы и определяет лучшее (самое низкое) значение функции и лучшее местоположение.

Он выбирает новые скорости, основанные на текущей скорости, отдельных лучших местоположениях частиц и лучших местоположениях их соседей.

Затем он итерационно обновляет местоположения частиц (новое местоположение является старым плюс скорость, модифицированная, чтобы сохранить частицы в границах), скорости и соседи.

Итерации продолжаются до тех пор, пока алгоритм не достигнет критерия остановки.

Вот подробные сведения о шагах.

Инициализация

По умолчанию, particleswarm создает частицы случайным образом равномерно в границах. Если существует неограниченный компонент, particleswarm создает частицы со случайным равномерным распределением от -1000 до 1000. Если у вас есть только одна граница, particleswarm смещает создание так, чтобы граница была конечной точкой и интервалом создания 2000 в ширину. Частицы i имеет положение x(i), который является вектором-строкой с nvars элементы. Управление размахом начального роя с помощью InitialSwarmSpan опция.

Точно так же, particleswarm создает начальные скорости частиц v случайным образом равномерно в пределах области значений [-r,r], где r - вектор начальных ranges. Область значений компонентов k является   min(ub(k) - lb(k),InitialSwarmSpan(k)).

particleswarm определяет целевую функцию для всех частиц. Он записывает текущее положение p(i) каждой частицы i. В последующих итерациях p(i) будет местом расположения наилучшей целевой функции, которая i частицы нашел. И b является лучшим по всем частицам: b = min(fun(p(i))). d является ли местоположение таким, что b = fun(d).

particleswarm инициализирует размер окрестности N на minNeighborhoodSize = max(2,floor(SwarmSize*MinNeighborsFraction)).

particleswarm инициализирует инерцию W = max(InertiaRange), или если InertiaRange отрицательно, задает W = min(InertiaRange).

particleswarm инициализирует счетчик остановки c = 0.

Для удобства обозначения установите переменную y1 = SelfAdjustmentWeight, и y2 = SocialAdjustmentWeight, где SelfAdjustmentWeight и SocialAdjustmentWeight являются опциями.

Шаги итерации

Алгоритм обновляет рой следующим образом. Для i частиц, который находится в положении x(i):

  1. Выберите случайное подмножество S от N частицы, отличные от i.

  2. Поиск fbest(S), лучшая целевая функция среди соседей, и g(S), положение соседа с наилучшей целевой функцией.

  3. Для u1 и u2 равномерно (0,1) распределенные случайные векторы длины nvars, обновить скорость

    v = W*v + y1*u1.*(p-x) + y2*u2.*(g-x).

    Это обновление использует взвешенную сумму:

    • Предыдущая скорость v

    • Различие между текущим положением и лучшим положением, которое видела частица p-x

    • Различие между текущей позицией и лучшей позицией в текущей окрестности g-x

  4. Обновите положение x = x + v.

  5. Применить ограничения. Если какой-либо компонент x находится вне границы, установите ее равной этой границе. Для тех компонентов, которые были только что установлены на границу, если скорость v из этих точек компонента вне границы установите этот компонент скорости в нуль.

  6. Оцените целевую функцию f = fun(x).

  7. Если f < fun(p), затем установите p = x. Этот шаг гарантирует p имеет лучшее положение, которое видела частица.

  8. Следующие шаги алгоритма применяются к параметрам всего роя, а не к отдельным частицам. Рассмотрим наименьший f = min(f(j)) среди частиц j в рое.

    Если f < b, затем установите b = f и d = x. Этот шаг гарантирует b имеет лучшую целевую функцию в рое, и d имеет лучшее расположение.

  9. Если на предыдущем шаге лучшее значение функции было понижено, то установите flag = true. В противном случае flag = false. Значение flag используется на следующем шаге.

  10. Обновляйте окрестности. Если flag = true:

    1. Задайте c = max(0,c-1).

    2. Задайте N на minNeighborhoodSize.

    3. Если c < 2, затем установите W = 2*W.

    4. Если c > 5, затем установите W = W/2.

    5. Убедитесь, что W находится в границах InertiaRange опция.

    Если flag = false:

    1. Задайте c = c+1.

    2. Задайте   N = min(N + minNeighborhoodSize,SwarmSize).

Критерий остановки

particleswarm итерация до тех пор, пока не достигнет критерия остановки.

Опция остановкиОстановка тестаВыходной флаг
MaxStallIterations и FunctionToleranceОтносительное изменение наилучшего значения целевой функции g за последнее MaxStallIterations итерации меньше FunctionTolerance.1
MaxIterationsКоличество итераций достигает MaxIterations.0
OutputFcn или PlotFcnOutputFcn или PlotFcn может остановить итерации.-1
ObjectiveLimitЛучшее значение целевой функции g меньше ObjectiveLimit.-3
MaxStallTimeЛучшее значение целевой функции g не изменился в последнем MaxStallTime секунд.-4
MaxTimeВремя выполнения функции превышает MaxTime секунд.-5

Если particleswarm останавливается с выходным флагом 1он опционально вызывает гибридную функцию после выхода.

Ссылки

[1] Кеннеди, Дж., и Р. Эберхарт. Оптимизация роя частиц. Материалы Международной конференции IEEE по нейронным сетям. Перт, Австралия, 1995, с. 1942-1945.

[2] Mezura-Montes, E., and C. A. Coello Coello. «Управление ограничениями в естественной численной оптимизации: прошлое, настоящее и будущее». Рой и эволюционные расчеты. 2011, стр 173–194.

[3] Педерсен, М. Е. «Хорошие параметры для оптимизации роя частиц». Люксембург: Hvass Laboratories, 2010.

Похожие темы