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

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

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.

Похожие темы