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

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

particleswarm основан на алгоритме, описанном в Кеннеди и Эберхарте [1], с помощью модификаций, предложенных в Месура-Монтесе и Коэльо Коэльо [2] и в Педерсене [3].

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

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

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

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

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

Вот детали шагов.

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

По умолчанию particleswarm создает частицы наугад однородно в границах. Если существует неограниченный компонент, particleswarm создает частицы со случайным равномерным распределением от –1000 до 1 000. Если у вас есть только один связанный, particleswarm переключает создание, чтобы иметь связанное как конечную точку и интервал создания 2 000 широких. 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 выполняет итерации, пока он не достигает останавливающегося критерия.

Остановка опцииОстановка тестаExitflag
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] Кеннеди, J. и Р. Эберхарт. "Оптимизация Роя частицы". Продолжения Международной конференции IEEE по вопросам Нейронных сетей. Перт, Австралия, 1995, стр 1942–1945.

[2] Mezura-Montes, E. и К. А. Коэльо Коэльо. "Обработка ограничения во вдохновленной природой числовой оптимизации: Прошлое, настоящее и будущее". Роитесь и Эволюционное Вычисление. 2011, стр 173–194.

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

Похожие темы