
- •Глава 5. Численная оптимизация.
- •5.1.Поиск экстремума функции одного переменного
- •5.2. Метод золотого сечения.
- •5.3.Метод квадратичной интерполяции.
- •5.4.Методы поиска экстремума функции многих переменных.
- •5.5. Метод Нелдера-Мида.
- •5.6. Метод Хука-Дживса (Метод конфигураций).
- •5.7. Методы покоординатного спуска.
- •5.7.1 Метод покоординатного спуска (Гаусса – Зейделя)
- •5.7.2. Метод спирального покоординатного спуска.
- •5.8 Градиентные методы.
- •5.8.1. Наискорейший спуск
- •5.8.2. Метод дфп
- •Глава 1.
- •Глава 2
- •Глава 3.
- •Глава 4
- •Глава 5.
- •5.1. Поиск экстремума функции одного переменного 60
- •5.2. Метод золотого сечения. 60
- •5.8.1. Наискорейший спуск 75
- •5.8.2. Метод дфп 76
5.4.Методы поиска экстремума функции многих переменных.
Достаточным условием существования
экстремума функции многих переменных
является равенство нулю частных
производных
.
Аналитическое выражение для функции
не всегда известно. Поэтому существуют
прямые методы расчета экстремума,
которые требуют знания лишь значения
функций и не требуют вычисления
производных.
Рассмотрим некоторые из этих методов.
5.5. Метод Нелдера-Мида.
Метод не позволяет учесть ограничения, которые могут быть наложены на оптимизируемые параметры. Математическая постановка задачи такова.
Требуется найти безусловный минимум
функции
многих переменных, т.е. найти такую точку
x* Rn, что
,
(5.1)
где
- вектор параметров оптимизации,
n – число параметров оптимизации, f – скалярная нелинейная функция.
Описание алгоритма.
В методе Нелдера–Мида вокруг начальной точки поиска в пространстве переменных размещается начальный симплекс – конфигурация из (n+1)-й точки. Для двух переменных симплексом является треугольник, а для трех переменных симплексом является пирамида. Вершина треугольника или пирамиды, в которой функция принимает наибольшее значение, отбрасываются. Формируется новый симплекс и поиск продолжается. В процессе поиска уменьшается размер треугольника и значение функции в его вершинах. Конкретные действия сводятся к следующим операциям, которые описаны применительно к функции двух переменных.
Операция отражения. Первоначально
задаются три вершины треугольника A,
B и C.
В них вычисляются значение функции.
Точки упорядочиваются по возрастанию
функций. Пусть A
наихудшая вершина, а B
и C, соответственно,
наилучшая и хорошая. Определяется
средняя точка лучшей стороны
.
Проводится прямая через худшую вершину
A и среднюю точку M
до точки R. При этом
AM=MR.
См. рис. 5.5.
Операция растяжения. Если функция в точке M меньше, чем в точке A, то прямая продолжается до точки E. Если функция в точке E меньше, чем в точке R, то найдена лучшая вершина.
Операция сжатия. Если функции в точках R и A совпадают, то необходимо обследовать две точки D1 и D2 . Они располагаются на серединах отрезков AM и MR. Симплекс всегда должен состоять из трех точек и поэтому новая точка не может занять место точки M. Из точек D1 и D2 выбирается лучшая и обозначается D. Получим новый треугольник BCD.
Операция сокращения. Если функция в точке D не меньше, чем значение функции в точке A, то производим сокращение треугольника ABС до треугольника SBM. Стороны сокращаются вдвое. На каждом шаге вычислений определяется лишь одна вершина.
На рис. 5.5 описанные операции проиллюстрированы графически. Точки А, В и С являются точками исходного симплекса. Значения функций в этих точках обозначены f(А), f(В), f(С). В зависимости от соотношений между функциями происходит выполнение соответствующей операции.
Алгоритм выполнения операций показан в таблице № 5.1.
Таблица № 5.1
.1begin {случай (i)} if f(B)<f(R) then замена А на B else вычисление Е и f(E) if f(E)<f(B) then замена А на Е else замена А на R end if end {случай (i)} |
begin {случай (ii)} if f(R)<f(A) then замена А на R вычисление C=(M+R)/2 или D=(M+R)/2 и f(D) if f(D)<f(A) then замена А на D else вычисление S и f(S) замена А на S замена С на М end if end {случай (ii)} |
Если f(R)<f(B), то выполняется случай (i) (либо отражение, либо растяжение)
Иначе выполняется случай (ii) (либо сжатие, либо сокращение).
На рис.5.5 смысл описанных операций пояснен графически.
Рис. 5.5
Опишем алгоритм метода более подробно применительно к функции двух переменных.
(A) Определим значения функции:
в вершинах симплекса.
(Б).Найдем
наибольшее значение функции и обозначим
его fh,,
следующее за ним по величине значение
функции обозначим fg
и наименьшее значение функции обозначим
fl
. Соответствующие
им точки вершин обозначим
.
(B) Найдем центр тяжести всех точек, за исключением точки хh.Пусть центром тяжести будет:
и вычислим f(х0)
= f0 .
(5.2)
(Г) Удобнее всего начать перемещение от точки xh . Отразив точку хh относительно точки х0, получим точку хг и найдем f(xr) = fr .
Операция
отражения иллюстрируется рис. 5.6. Если
α
> 0 — коэффициент отражения, то положение
точки
определяется
следующим образом:
(5.3)
Замечание, α =
(Д) Сравним значения функций fr и fl.
1. Если fr
< fl,
то мы получили наименьшее значение
функции. Направление из точки
в точку хr
наиболее
удобно для перемещения. Таким образом,
мы производим растяжение в этом
направлении и находим точку хе
и значение
функции fe
= f(xe).
Рисунок 5.7
иллюстрирует операцию растяжения
симплекса. Коэффициент растяжения γ >
1 можно найти из следующих соотношений:
Рис. 5.6 Рис. 5.7
хе –х0 = γ(хr-х0),
т. е.
хе=γхr + (1-γ)хо. (5.4)
Замечание, γ = |хe —х0|/|хr -х0|.
а) Если fе < fl, то заменяем точку хh на точку хе и проверяем (n+1)-ую точку симплекса на сходимость к минимуму (см. шаг З). Если сходимость достигнута, то процесс останавливается; в противном слу- чае возвращаемся на шаг Б.
б) Если fe > fl, то отбрасываем точку хе. Очевидно, мы переместились слишком далеко от точки х0 к точке хr. Поэтому следует заменить точ- ку xh на точку хr , в которой было получено улучшение (шаг Д, 1), проверить сходимость и, если она не достигнута, вернуться на шаг В.
2. Если fr > fl , но fr <= fg, то хr является лучшей точкой по сравнению с другими двумя точками симплекса и мы заменяем точку xh на точку хr и, если сходимость не достигнута, возвращаемся на шаг Б, т. е. выполняем пункт 1, б, описанный выше.
3. Если fr > fl и fr > fg, то перейдем на шаг Е.
(E) Сравним значения функций fr и fh .
1. Если fr > fh , то переходим непосредственно к шагу сжатия Е, 2.
Если fr < fh то заменяем точку xh на точку хr и значение функции fh на значение функции fr. Запоминаем значение fr > fg из шага Д, 2, приведенного выше. Затем переходим на шаг Е, 2.
2. В этом случае fr > fh , поэтому ясно, что мы переместились слишком далеко от точки xh к точке х0. Попытаемся исправить это, найдя точку хс (а затем fc) с помощью шага сжатия, показанного на рис. 5.8.
Если fr > fh , то сразу переходим к шагу сжатия и находим точку хс из соотношения
xc-x0=β(xh -х0),
где β (0 < β < 1) — коэффициент сжатия. Тогда
xc= β xh + (l - β)xo. (5.5)
Если fr < fh, то сначала заменим точку xh на точку хr, а затем произведем сжатие. Тогда точку хс найдем из соотношения
хс -xо = β (хr -xо),
т. е.
хс= β хr + (1- β)х0 (см. рис. 5.9). (5.6)
Рис. 5.8 Рис. 5.9
(Ж) Сравним значения функций fc и fh .
1. Если fc <fh , то заменяем точку хh на точку хс, и, если сходимость не достигнута, то возвращаемся на шаг Б.
2. Если fc > fh , то очевидно, что все наши попытки найти значение меньшее Д закончились неудачей, поэтому мы переходим на шаг З.
(З) На этом шаге мы уменьшаем размерность симплекса делением пополам расстояния от каждой точки симплекса до хl — точки, определяющей наименьшее значение функции.
Таким образом, точка xi заменяется на точку xi + ½(xi – хl), т. е. заменяем точку xl- точкой
½ (хi+xl). (5.7)
Затем вычисляем fi для i = 1, 2, . . . , (п+1), проверяем сходимость и, если она не достигнута, возвращаемся на шаг В.
(И) Проверка сходимости основана на том, чтобы стандартное отклонение (п + 1)-го значения функции было меньше некоторого заданного малого значения ε. В этом случае вычисляется
(5.8)
где
Если σ <
ε, то все значения функции очень близки
друг к другу, и поэтому они, возможно,
лежат вблизи точки минимума функции
хl.
Исходя из этого, такой
критерий сходимости является разумным,
хотя Бокс, Дэвис и Свенн [13]
предлагают то, что они считают более
"безопасной" проверкой.
Эта процедура представлена далее в виде программы №1 на языке Турбо Паскаль.
Коэффициенты α, β, γ в вышеприведенной процедуре являются соответственно коэффициентами отражения, сжатия и растяжения. Нелдер и Мид рекомендуют брать α = 1, β = 0,5 и γ = 2. Рекомендация основана на результатах экспериментов с различными комбинациями значений. Эти значения параметров позволяют методу быть эффективным, но работать в различных сложных ситуациях.
Начальный симплекс выбирается так:
х2
=
+ kе1 ,
(5.9)
х3 = + kе2 ,
хn+1 = + kеn ,
где точка является начальной точкой, k - произвольная длина шага, а ej - единичный вектор.
Метод
эффективен до n
6.
Для функций, имеющих “овраги”, может
происходить вырождение симплекса и
тогда продолжать расчеты невозможно.
Это чаще всего происходит при числе
переменных больше двух.