Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Численные Методы (часть 4).doc
Скачиваний:
23
Добавлен:
14.11.2019
Размер:
838.14 Кб
Скачать

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 = γ(хr0),

т. е.

хе=γх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. Для функций, имеющих “овраги”, может происходить вырождение симплекса и тогда продолжать расчеты невозможно. Это чаще всего происходит при числе переменных больше двух.