- •Глава 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.8 Градиентные методы.
Требуют знания значения функции и ее градиента. Основная идея метода заключается в отказе от “слепого” поиска вдоль осей координат и переходе к движению сразу в направление возрастания функции (противоположное – убывание функции).
Рис.5.10
5.8.1. Наискорейший спуск
Допустим, что переход из точки
в точку
происходит
по направлению
с шагом
.
Точка
определеяется координатами
,
а следующая точка – координатами
,
где
.
При этом косинусы
направлений
такие, что
.
(5.11)
Возникает задача: как выбрать
направление d , чтобы
получить наибольшее изменение функции
df при соблюдении
условия (5.11) т.е. с ограничением. Логично
предположить, что направление наиболее
быстрого изменения функции- это
направление роста градиента функции.
Изменение значений функции
определяется
соотношениями
(5.12)
Чтобы получить наибольшее изменение
функции
,
т.е. решить задачу определения максимума
функции с ограничением, используем
метод множителей Лагранжа для поиска
функции
или
.
На основе метода df достигает max , если φ достигает max. Берем производную от φ
(j=1,2,…,n)
и приравниваем ее нулю, получаем
,
следовательно,
. “Направления” совпадают с
градиентами функции
f(x)
в точке x, или g(x).
Для min -
f(x)
или – g(x).
Уравнение (0) можно записать так
, где Θ – угол между векторами g(x)
и dx. Угол выбран
Θ=1800 , чтобы обеспечить направление
– g(x):
.
Значение λi , минимизирующее функцию φ, может быть найдено любым методом одномерного поиска. В чистом виде метод работает медленно и не надежно. Но прежде чем перейти к более эффективным методам, рассмотрим свойства квадратичных функций.
F(x)=
,
где a – константа , b
– постоянный вектор , G
– положительно определенная симметрическая
матрица.
min
в точке
.
Поставим задачу так, что в окрестности точки х0 любую функцию φ(х) можно аппроксимировать квадратичной функцией:
Пусть min φ(x) находится в точке хm
Берем производную и приравниваем ее к нулю.
, откуда:
, т.е. в итерационном виде:
, а с учетом множителей Лагранжа:
.
Видим, что по сравнению с методом наискорейшего спуска требуется умножение
на G-1(xi), а это самая трудоемкая операция метода.
Но если проводить умножение на Hi
, а не на G-1(xi)
, то получим метод Давидона –
Флетчера – Пауэлла (ДФП).
-
симметрическая положительно определенная
матрица. В ходе вычислений она приближается
к матрице
.
5.8.2. Метод дфп
Начнем поиск из начальной точки
,
взяв H0 в виде
Е.
На шаге i имеется точка
и матрица H.В качестве направления поиска взять направление
Чтобы найти λi , необходимо минимизировать
вдоль прямой
.Положить
Положить
Найти
и
.
Завершить процедуру, если
или
достаточно малы.Положить
Обновить матрицу Н:
, где
;
.Увеличить i+1 и вернуться на шаг 2.
Доказательства использования Hi отсутствуют.
Программа метода ДФП.
procedure DFP;
type tt=array[1..10] of real; var X,P,Q,R,D,G,U,V,Y,M:tt;
type mat=array[1..10,1..10] of real; var H:mat;
var I,J,N:integer;
var FP,GI;GP;QX,HH,BB,FQ,GQ,ZZ,FR,GR,KK,DK,WK:integer;
begin GQ:=0;
for I:=1 to N do
begin
for J:=1 to N do H[I,J]:=0; H[I,I]:=1;
end;
TT:=0;
4: for I:=1 to N do
begin
P[I]:=x[I]; Y[I]:=x[I];
end;
FUNK;
FP:=Z; GRAD; GI:=G0;
for I:=1 to N do
begin
U[I]:=G[I]; D[I]:=0;
for J:=1 to N do D[I]:=D[I]-H[I,J]*G[J];
6: GP:=0;
for I:=1 to N do CP:=GP+G[I]*D[I];
if GP<0 then goto 68;
QX:=abs(2*FP/GP);
if QX>1 then QX:=1;
for I:=1 to N do
begin x[I]:=P[I]-Qx*D[I]; P[I]:=x[I];
end;
FUNK;
FP:=Z; GRAD; G1:=G0; goto 6;
68: QX:=abs(2*FP/GP);
if QX>1 then Qx:=1;
HH:=QX; BB:=HH;
for I:=1 to N do
begin Q[I]:=P[I]+BB*D[I]; X[I]:=Q[I];
end;
FUNK; FQ:=Z; GRAD; GZ:=G0; GQ:=0;
7: BB:=HH;
for I:=1 to N do
begin Q[I]:=P[I]+BB*D[I]; X[I]:=Q[I];
end;
FUNK; FQ:=Z; GRAD; GZ:=G0; GQ:=0;
for I:=1 to N do GQ:=GQ+G[I]*D[I];
if ((GQ>0)or(FQ>FP)) then goto 83;
HH:=2*HH; goto 7;
83: ZZ:=3*(FP-FQ)/HH; ZZ:=ZZ+GP+GQ; WW:=ZZ*ZZ-GP*GQ;
if WW<0 then WW:=0; W:=sqr(WW);
DD:=HH*(1-(GQ+W-ZZ)/(GQ-GP+2*W));
for I:=1 to N do x[I]:=P[I]+DD*D[I]; FUNK; FR:=Z;
GRAD; G3:=G0; GR:=0;
for I:=1 to N do GR:=GR+G[I]*D[I];
if ((Z<=FP) and (Z<=FQ)) then goto 11;
if GR>0 then goto 99;
HH:=HH-DD;
for I:=1 to N do P[I]:=x[I];
FP:=Z; GP:=GR; G1:=G0; goto 83;
99: HH:=DD;
for I:=1 to N do Q[I]:=x[I];
11: KK:=0; WK:=0; DK:=0;
for I:=1 to N do
begin U[I]:=G[I]-U[I]; V[I]:=x[I]-Y[I];
end;
for I:=1 to N do
begin
M[I]:=0;
for J:=1 to N do M[I]:=M[I]+H[I,J]*U[J];
KK:=KK+M[I]*U[I]; WK:=WK+V[I]+U[I];
DK:=DK+V[I]*V[I];
end;
if ((KK=0) or (WK=0)) then goto 126
Проиллюстрируем основную идею метода графически на рис.5.11 для функции
f (x)=(x1
–3)2 +(x2
–2)2-5.
Окружности – линии равного уровня для f(x).
Пунктиром показаны траектории поиска экстремума покоординатным методом.
Сплошная линия – траектория наискорейшего спуска.
Градиент функции определяется:
f(x)=grad
f(x)=(2x1-6
, 2x2-4).
Рис. 5.11
Если овраг направлен вдоль одной из
осей, то проблем поиска экстремума не
возникает, но процесс наискорейшего
спуска перестает быть таковым (рис.5.12)
(шарик катится на дно, переваливаясь с
одного склона на другой)
А если овраги узки и извилисты, то рассмотренные методы могут зайти в тупик.
Рис. 5.12
Литература
1. Мак-Кракен Д., Дорн У. Численные методы и программирование на Фортране. -
М.: Мир, 1977.
2. Корн Г., Корн Т. Справочник по математике, глава 20-я, М.: Наука , 1978.
3. Калиткин Н.Н. Численные методы. – М.: Наука, 1978.
4. Турчак Л.И. Основы численных методов. – М.: Наука, 1987.
5. Банди Б. Методы оптимизации. – М.: Наука, 1987.
6. Волков Е.А. Численные методы. – М.: Наука, 1987.
7. Дьяконов В.П. Справочник по алгоритмам и программам на языке Бейсик для персональных ЭВМ. – М.: Наука, 1989.
8. Мудров А.Е. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. – М.: Роско,1991.
9.Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – М.: Физматгиз, 2001.
10. Метьюз Д. Численные методы.- М.: 2001.
11.Ануфриев И.Е., Смирнов А.Б, Смирнова Е.Н. Матлаб 7.0 в подлиннике.- С.-Пб.,2005.
12.Кетков Ю.Л., Кетков А.Ю., Шульц М.М. Матлаб 7: программирование, численные методы. – СПб.: БХВ-Петербург,2005.
13. M.J.Box, D.Davies and W.H.Swann, Non-linear Optimisation Techniques, ICI ltd.,Monograph No.5, Oliver and Boyd,1969.
Оглавление стр.
Предисловие 2
Введение 2
