
- •Методы оптимизации Введение
- •1. Функции одной переменной
- •1.1 Поиск методом золотого сечения
- •1.2 Квадратичная интерполяция
- •1.3 Кубическая интерполяция (метод Дэвидона)
- •2. Функции нескольких переменных
- •2.1 Предварительные сведения
- •2.1.1 Общая классификация методов
- •2.1.2 Векторные обозначения
- •2.2 Методы прямого поиска
- •2.2.1 Метод покоординатного спуска (метод релаксации)
- •2.2.2 Метод Хука-Дживса
- •2.2.3 Метод деформируемого многогранника Нелдера-Мида
- •2.3 Методы с использованием производных
- •2.3.1 Метод скорейшего спуска
- •2.3.3 Квадратичные функции и сопряженные направления
- •2.3.4 Метод Флетчера-Ривса
- •2.3.5 Метод Дэвидона-Флетчера-Пауэлла
2.2.2 Метод Хука-Дживса
Один из наиболее известных методов прямого поиска предложен Хуком и Дживсом (R. Hooke, T. A. Jeeves) в 1961 г. Идея метода заключается в исследовании локальной топографии поверхности и попытке двигаться дальше, сохраняя то же направление, которое привело к самой низкой из найденных точек. Если это направление приводит к успеху, оно сохраняется, в противном случае на основании локального поиска выбирается новое направление и т. д. Алгоритм выглядит следующим образом:
а) Выбрать начальную точку x0 и шаг по каждой переменной hi. Вычислить F0=F(x0).
б) Исследовать локальное поведение F(x) в окрестности x0, а именно:
– в качестве текущей точки x1 принять начальную точку x0.
– для всех i от 1 до N повторить следующие действия:
вычислить
,
где ei
– вектор единичной длины,
совпадающий по направлению
с координатной осью xi.
Иными словами, от текущей
точки нужно сделать шаг длины
hi
по переменной xi
при фиксированных значениях
остальных переменных.
если
,
перенести текущую точку
в новое положение, т. е.
,
в противном случае сделать шаг
по xi
в обратном направлении:
,
и если этот шаг окажется
успешным, передвинуть
текущую точку.
Если обе попытки перемещения по координате xi не привели к понижению значения функции, сохранить прежнее положение x1.
в) Сравнить точку x1,
достигнутую после
исследующего поиска,
с исходной точкой x0.
Если x1=x0,
т. е. ни в одном направлении
не удалось добиться понижения
функции, следует уменьшить
величину шага (
)
и вернуться к п. б) для повторения
поиска.
г) Если после исследующего поиска текущая точка сместилась (x1x0), попробовать продвинуться дальше в том же направлении, т. е. перейти в точку x2=x1+(x1x0). Это называется «шаг по образцу». Значение функции в точке x2 не проверяется (оно может быть ниже или выше значения в x1).
д) Выполнить исследующий поиск от точки x2 (так, как описано в п. б). В результате будет найдена точка x3. Сравнить значения функции в точках x1 и x3.
е) Если F(x3)<F(x1), принять x3 за новую текущую точку (x0=x2, x1=x3) и сделать шаг по образцу, т. е. перейти к п. г). Если же F(x3)F(x1), то точки x2 и x3 отвергаются, и продолжается исследующий поиск от точки x1 (x0=x1, перейти к п. б).
Процесс заканчивается, когда шаги hi по всем переменным (постепенно уменьшающиеся благодаря периодическому выполнению п. в) станут меньше заданного предела точности.
2.2.3 Метод деформируемого многогранника Нелдера-Мида
Метод Нелдера-Мида (J. A. Nelder, R. Mead; 1965 г.) является развитием широко известного симплекс-метода, предложенного Спендли, Хекстом и Химсуортом (W. Spendley, G. R. Hext, F. R. Himsworth) в 1962 г. Рассмотрим вначале классический вариант метода.
Симплексом в N-мерном пространстве называется правильный многогранник с N+1 вершинами. Например, симплекс на прямой — отрезок, на плоскости — правильный треугольник, в 3-мерном пространстве — тетраэдр и т. д.
Отправной точкой алгоритма
является задание
некоторого начального
симплекса в пространстве
N
переменных. Обозначим
вершины симплекса x0,
x1,
,
xN.
Вычислим значения минимизируемой
функции в вершинах симплекса
и обозначим их F0,
F1,
,
FN,
соответственно. Выберем
наибольшее (худшее) из значений
F0,
F1,
,
FN;
пусть это будет Fh,
а соответствующая
вершина — xh.
Возьмем грань симплекса,
противолежащую вершине
xh,
и определим ее центр как
,
т. е. как среднюю точку для N
вершин, принадлежащих
этой грани. Будем искать точку,
лучшую, чем xh,
в направлении от xh
к центру противолежащей
грани. Для этого выполним
операцию отражения,
т. е. найдем точку xr,
зеркально симметричную xh
относительно противолежащей
грани симплекса. Очевидно,
xr=xc+(xcxh).
Если значение функции в новой
точке F(xr)<Fh,
заменим вершину xh
на xr
и получим новый симплекс, в
вершинах которого среднее
значение функции улучшилось. Если
же отражение не позволяет
добиться улучшения худшей
вершины, то, очевидно, размеры
симплекса слишком велики
по сравнению с расстоянием
до минимума. В этом случае
производится сокращение
симплекса: вершина
xh
сохраняется, а остальные
вершины заменяются серединами
ребер, соединяющих их с
xh,
так что расстояния между
всеми вершинами сокращаются
в 2 раза. После этого вновь
делается операция
отражения и т. д. Поиск
заканчивается, когда
размеры симплекса
станут достаточно малыми;
в качестве окончательного
результата можно принять
последнюю точку xc
либо центр симплекса.
Симплекс-метод Спендли, Хекста и Химсуорта обеспечивает устойчивость процесса поиска и его сходимость к точке минимума. Однако, его недостатком является низкая скорость, так как величина перемещения на каждом шаге определяется текущим размером симплекса и никак не связана с поведением минимизируемой функции. Нелдер и Мид предложили значительно более эффективный вариант алгоритма, отказавшись от сохранения одинаковых расстояний между вершинами. Поскольку неправильный многогранник уже не подходит под определение симплекса, метод получил название поиска по деформируемому многограннику.
Операция отражения у Нелдера и Мида стала более общей: xr=xc+·(xcxh), где – произвольный коэффициент отражения (>0). Кроме того, добавлены операции растяжения и сжатия многогранника. Растяжение используется аналогично поиску по образцу в методе Хука-Дживса — если отражение привело к значительному улучшению (значение в точке xr оказалось меньше, чем во всех вершинах), то производится дополнительное смещение от xr в том же направлении: xe=xc+·(xrxc), где >1 – коэффициент растяжения. Сжатие заключается в замене xr на точку, лежащую по другую сторону грани (т. е. внутри многогранника): xr=xc+·(xhxc), где 0<<1 – коэффициент сжатия. Сжатие применяется, если отражение привело к ухудшению значения функции по сравнению с Fh.
На каждом шаге выделяются три вершины многогранника: xh, как и раньше — вершина, в которой значение функции максимально («наихудшая» вершина), xl — вершина, в которой значение функции минимально («наилучшая» вершина), и xg — вершина, в которой значение функции больше, чем во всех других, за исключением xh (т. е. ближайшая к xh по степени «плохости»). Комбинация операций отражения, растяжения, сжатия и сокращения для получения следующего многогранника зависит от сравнения значений функции в вершинах xh, xg, xl и в новых точках xr и xe. Логическая схема выбора лучшей точки достаточно сложна, и мы не будем рассматривать ее во всех деталях (подробности можно найти в книгах [1, 2]). В процессе поиска минимума многогранник вытягивается в направлении успешных шагов и сжимается в «неперспективных» направлениях, что приводит к ускоренному движению в сторону общего понижения значений функции. Перемещение многогранника напоминает поведение амебы; по этой причине процедура, реализующая метод Нелдера-Мида, получила название Amoeba.