Вопрос 14: Метод симплексов


Метод безусловной оптимизации функции от нескольких переменных, не использующий градиентов функции. Суть метода заключается в последовательном перемещении и деформировании симплекса вокруг точки экстремума.

Симплекс – n-мерное обобщение треугольника: Симплексы

Операции над симплексами Операции

Алгоритм

Параметры метода: коэффициент отражения α\alpha > 0, обычно выбирается равным 1. коэффициент сжатия β\beta > 0, обычно выбирается равным 0,5. коэффициент растяжения γ\gamma > 0, обычно выбирается равным 2.

Пусть требуется найти безусловный минимум функции 2 переменных. Тогда симплекс будет иметь размерность равную 3.

Шаг 1 - обозначение точек

Выберем три точки – вершины треугольника. Вычислим значения целевой функции в вершинах и обозначим их как best, lousy и worst: fbf_b, flf_l, fwf_w. Соответствующие точки пространства обозначим как xb,xl,xwx_b, x_l, x_w.

Шаг 2 - отражение

Найдем среднее арифметическое всех точек симплекса, кроме худшей xwx_w: xa=1ni=0,iwn+1xi x_a=\frac{1}{n}\sum_{i=0,i\neq w}^{n+1}x_i Для нашего случая формула будет выглядеть следующим образом: xa=(xl+xb2;yl+yb2) x_a = (\frac{x_l+x_b}{2}; \frac{y_l+y_b}{2}) Найдем отражение худшей точки и вычислим значение функции в этой точке fr=f(xr)f_r = f(x_r): xr=xa+α(xaxw) x_r = x_a + \alpha(x_a-x_w)

Шаг 3 - смотрим какое место между всеми точками заняла отраженная точка

Если fr<fbf_r < f_b, то направление удачное и можно увеличить шаг: найдем "растяжение" и вычислим значение функции в этой точке fe=f(xe)f_e=f(x_e): xe=xr+γ(xrxa) x_e=x_r+\gamma(x_r-x_a)

Если fe<frf_e<f_r, то xw=xex_w = x_e и переходим на Шаг 6. Если fr<fef_r<f_e, то xw=xrx_w = x_r и переходим на Шаг 6. Если fr<flf_r < f_l, то xw=xrx_w = x_r и переходим на Шаг 6. Если fr>fwf_r > f_w, то на Шаг 4. Если fr<fwf_r < f_w, то на Шаг 5.

Шаг 4 - внутреннее сжатие

Используя среднюю точку xax_a и худшую точку xwx_w, найдем xcx_c и значение функции в этой точке fc=f(xc)f_c = f(x_c): xc=xaβ(xaxw) x_c = x_a - \beta(x_a-x_w) Если fc<fwf_c < f_w, то xw=xcx_w = x_c и переходим к Шагу 6. Иначе проводим "сокращение" - обновляем все вершины, кроме лучшей по следующему соотношению: xi=xb+ρ(xixb) x_i = x_b + \rho(x_i-x_b) и переходим к Шагу 6.

Шаг 5 - внешнее сжатие

Используя среднюю точку xax_a и худшую точку xwx_w, найдем xox_o и значение функции в этой точке fo=f(xo)f_o = f(x_o): xo=xa+β(xaxw) x_o = x_a + \beta(x_a-x_w) Если fo<frf_o < f_r, то xw=xox_w = x_o и переходим к Шагу 6. Иначе проводим "сокращение" - обновляем все вершины, кроме лучшей по следующему соотношению:
xi=xb+ρ(xixb) x_i = x_b + \rho(x_i-x_b) и переходим к Шагу 6.

Шаг 6 - проверка сходимости

Если алгоритм сходится или достигнут критерий остановки, заканчиваем работу. Иначе проводим переоценку точек: находим значения функций в этих точках и обозначаем их как best, lousy и worst (xb,xl,xwx_b, x_l, x_w) и переходим к Шагу 2.

Пример выполнения метода

Пример

results matching ""

    No results matching ""