Метод Нелдера — Мида

Материал из testwiki
Версия от 18:01, 30 октября 2024; imported>Jenyay (В статье Нелдера и Мида от 1965 года gamma > 1.)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску


Последовательные симплексы в методе Нелдера-Мида для функции Розенброка (вверху) и функции Химмельблау (внизу)
Не путать с «симплекс-методом» из линейного программирования — методом оптимизации линейной системы с ограничениями.

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

Суть метода заключается в последовательном перемещении и деформировании симплекса вокруг точки экстремума.

Метод находит локальный экстремум и может «застрять» в одном из них. Если всё же требуется найти глобальный экстремум, можно пробовать выбирать другой начальный симплекс. Более развитый подход к исключению локальных экстремумов предлагается в алгоритмах, основанных на методе Монте-Карло, а также в эволюционных алгоритмах.

Алгоритм

Пусть требуется найти безусловный минимум функции n переменных f(x(1),x(2),,x(n)). Предполагается, что серьёзных ограничений на область определения функции нет, то есть функция определена во всех встречающихся точках.

Параметрами метода являются:

  • коэффициент отражения α>0, обычно выбирается равным 1.
  • коэффициент сжатия β>0, обычно выбирается равным 0,5.
  • коэффициент растяжения γ>1, обычно выбирается равным 2.
  1. «Подготовка». Вначале выбирается n+1 точка xi=(xi(1),xi(2),,xi(n)),i=1..n+1, образующие симплекс n-мерного пространства. В этих точках вычисляются значения функции: f1=f(x1),f2=f(x2),,fn+1=f(xn+1).
  2. «Сортировка». Из вершин симплекса выбираем три точки: xh с наибольшим (из выбранных) значением функции fh, xg со следующим по величине значением fg и xl с наименьшим значением функции fl. Целью дальнейших манипуляций будет уменьшение по крайней мере fh.
  3. Найдём центр тяжести всех точек, за исключением xh: xc=1nihxi. Вычислять fc=f(xc) не обязательно.
  4. «Отражение». Отразим точку xh относительно xc с коэффициентом α (при α=1 это будет центральная симметрия, в общем случае — гомотетия), получим точку xr и вычислим в ней функцию: fr=f(xr). Координаты новой точки вычисляются по формуле:
    xr=(1+α)xcαxh.
  5. Далее смотрим, насколько нам удалось уменьшить функцию, ищем место fr в ряду fh,fg,fl.
    Если fr<fl, то направление выбрано удачное и можно попробовать увеличить шаг. Производим «растяжение». Новая точка xe=(1γ)xc+γxr и значение функции fe=f(xe).
    Если fe<fr, то можно расширить симплекс до этой точки: присваиваем точке xh значение xe и заканчиваем итерацию (на шаг 9).
    Если fr<fe, то переместились слишком далеко: присваиваем точке xh значение xr и заканчиваем итерацию (на шаг 9).
    Если fl<fr<fg, то выбор точки неплохой (новая лучше двух прежних). Присваиваем точке xh значение xr и переходим на шаг 9.
    Если fg<fr<fh, то меняем местами значения xr и xh. Также нужно поменять местами значения fr и fh. После этого идём на шаг 6.
    Если fh<fr, то просто идём на следующий шаг 6.
    В результате (возможно, после переобозначения) fl<fg<fh<fr.
  6. «Сжатие». Строим точку xs=βxh+(1β)xc и вычисляем в ней значение fs=f(xs).
  7. Если fs<fh, то присваиваем точке xh значение xs и идём на шаг 9.
  8. Если fs>fh, то первоначальные точки оказались самыми удачными. Делаем «глобальное сжатие» симплекса — гомотетию к точке с наименьшим значением xl:
    xixl+(xixl)/2, il.
  9. Последний шаг — проверка сходимости. Может выполняться по-разному, например, оценкой дисперсии набора точек. Суть проверки заключается в том, чтобы проверить взаимную близость полученных вершин симплекса, что предполагает и близость их к искомому минимуму. Если требуемая точность ещё не достигнута, можно продолжить итерации с шага 2.

Источники

Шаблон:Методы оптимизации