exponenta event banner

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

Схема алгоритма

particleswarm основан на алгоритме, описанном в Kennedy и 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 - вектор начальных диапазонов. Диапазон компонентов 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. и К. А. Коэльо Коэльо. «Обработка ограничений в цифровой оптимизации, вдохновленной природой: прошлое, настоящее и будущее». Рой и эволюционные вычисления. 2011, стр 173–194.

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

Связанные темы