
- •Тема 2 Методы оптимизации нулевого порядка
- •Методы покоординатного спуска
- •Спуск по направлению
- •Общий алгоритм
- •• 3. По каждому
- •Особенности программной реализации.
- •Особенности программной реализации
- •Подпрограмма для функции (z) вдоль направления di
- •Подпрограмма метода одномерного поиска
- •Подпрограмма преобразования векторов
- •Реализация алгоритма спуска к минимуму
- •Метод Гаусса-Зейделя
- •В случае длинного оврага, если оси координат направлены неудачно, метод спуска по координатам
- •Метод ПАУЭЛЛА
- •Преобразование векторов di
- •Метод Розенброка
- •Траектория спуска по Методу Розенброка
- ••Procedure PREOBD;//метод Розенброка
- •Методы спуска с перебором направлений
- •Метод Хука-Дживса
- •Траектория Метода Нелдера-Мида
- •Отражение
- •Растяжение
- •Сжатие
- •Редукция
- •Конец
Тема 2 Методы оптимизации нулевого порядка
Описание общего алгоритма методов покоординатного спуска
Особенности программной реализации
Метод ГАУССА-ЗЕЙДЕЛЯ
Метод ПАУЭЛЛА
Метод РОЗЕНБРОКА
Методы спуска с перебором направлений
Хука-Дживса и Нелдера-Мидта
06/25/19 |
1 |
Методы покоординатного спуска
Среди методов нулевого порядка можно выделить группу методов покоординатного спуска:
Гаусса-Зейделя,
Пауэлла,
Дэвиса-Свена-Кемпи (ДСК),
Розенброка.
•Алгоритм этих методов в общем одинаков и описывается следующим образом:
06/25/19 |
2 |

Спуск по направлению
Y f (x0 zd ) (z)
Y f (x)
0 |
x2 |
|
|
x2 |
x x0 |
zd |
|
z |
|||
|
|
||
x10 |
xm x0 zmd |
|
|
d |
|
|
|
x1 |
|
|
r |
0 |
0 |
x0 |
(x1 |
, x2 ) |
06/25/19 |
|
3 |

Общий алгоритм |
|
|
|
1. Задается начальная точка |
x0 |
|
|
и начальный шаг h |
|
|
|
одномерного спуска . |
x2 |
|
|
2. Выбирается n линейно |
d2 |
|
|
независимых направлений |
x20 |
|
|
d1 ... dn |
|
d1 |
|
|
|
||
|
|
|
|
Обычно это единичные |
|
|
|
координатные орты (вообще их |
|
|
|
можно выбрать исходя из знания |
|
x10 |
x1 |
свойств целевой функции). |
|
||
06/25/19 |
|
|
4 |

• 3. По каждому |
i-направлению |
Общий алгоритм |
|
поочередно делается спуск (i=1..n), |
|||
|
|||
т.е. находится zmi, доставляющий |
|
||
r |
|
|
|
min F x0 zdi min (z) |
|
||
z |
z |
|
• |
пересчитывается точка |
x2 |
|
|
|
x0 x0 zmidi |
d2 |
|
|
|
|
|
||
• |
При нахождении min используется |
x20 |
zm1 |
d1 |
|
либо метод последовательного |
|
|
|
|
перебора, если функция не гладкая, |
|
zm2 |
|
|
либо метод квадратичной параболы |
|
|
|
|
для гладких функций. |
|
|
|
• |
В результате выполнения этих |
|
x10 |
|
|
спусков, называемых циклом, точка |
|
x1 |
|
|
сдвинулась на вектор |
|
||
|
zm zmidi |
|
|
5 |
|
06/25/19 |
|
|

• |
4. Проверяется условие |
|
Общий алгоритм |
|||||
|
zmi |
|
|
|
|
|
|
|
• |
если да, то процесс спуска |
|
|
|
|
|||
|
заканчивается |
|
|
|
x2 |
|
|
|
|
xm x0 , Fm f (x0 ) |
|
d2 |
|
||||
|
|
|
|
|||||
• |
5. В зависимости от полученной |
x20 |
zm2 |
zm1 |
d1 |
|||
|
информации о функции, делается |
d2 |
|
|
||||
|
|
|
|
|||||
|
некоторое преобразование |
|
|
|
||||
|
|
|
|
|
||||
|
выбранных направлений: |
r |
d1 |
|
|
|
||
|
r |
r |
|
|
|
|
||
|
di zm1...zmn ,d1 |
... dn |
|
x01 |
x10 |
|
||
• |
Процесс вычислений повторяется |
|
x1 |
|||||
|
с новой точки |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
06/25/19 |
6 |
Особенности программной реализации.
При программной реализации следует описать отдельно подпрограмму вычисления минимизируемой функции, например, для
целевой функции, имеющей вид |
r |
|
2 |
f (x) (x1 |
2x2 ) |
|
•const n=2;
•type mas=array[l..n] of real;
•function F(х:mas): real;
•begin
•F:=sqr(x[1]+2*x[2])
•end;
06/25/19 |
7 |
Особенности программной реализации
•После этого напишем подпрограмму метода оптимизации:
•Type fun=function (x:mas):real
•Procedure MPSP(F:fun;
•var x0:mas;eps,h:real;var fm:real);
•внутри которой следует ввести:
•для координат векторов направлений массив D[i,k] где помещается i-я координата вектора dk
•var
•D:array[1..n,1..n] of real
•zm,x,a,b:array[1..n] of real;
•рабочие массивы zm, x,
•a и b в методе Розенброка, ДСК, Пауэлла;
06/25/19 |
8 |
Подпрограмма для функции (z) вдоль направления di
•function F1(z: real): real;
•begin
•
•
•
•end;
for k:=1 to n do x[k]=x0[k]+z*D[i,k];
F1:=F(x);
06/25/19 |
9 |
Подпрограмма метода одномерного поиска
•Function MPP(z0,h,eps:real):real;
•begin
•y1:=F1(z0); z1:=z0;
•repeat
• |
repeat |
|
• |
z0:=z1; |
y0:=y1; |
• |
z1:=z0+h; |
y1:=F1(z1); |
• |
until y1>y0; |
|
• |
h:=-h/4; |
|
•until abs(h)<eps;
•Result:=y0;
•end;
06/25/19 |
10 |