- •Оптимизация
- •1. , Отсюда
- •2. , Откуда
- •Оптимизация функции одной переменной
- •Методы поиска
- •Метод золотого сечения
- •Блок-схема метода "золотого сечения"
- •Оптимизация функции многих переменных Минимум функции нескольких переменных
- •Общий алгоритм методов многомерного поиска:
- •Вычисление производных функции
- •Градиентные методы поиска экстремума
- •Алгоритм простого градиентного метода:
- •Алгоритм метода наискорейшего спуска:
- •Симплексный метод
- •Расчет координат новой вершины симплекса
- •Алгоритм метода "деформируемых многогранников"
Алгоритм простого градиентного метода:
1.
Выбор вектора начальных приближений
и вычисление значения целевой функции
в этой точке (
).
Выбор
величины шага.
2. Вычисление координат новой точки по формуле
![]()
3.
Вычисление значения функции в новой
точке
.
4.
Если значение
>
,
то
величина шага уменьшается в два раза и
расчеты повторяются с пункта 2.
5. Если выполняется условие:
,
то поиск прекращается и выводят полученные результаты. В противном случае выполняют этап 6.
6.
За новое начальное приближение принимают
найденную на этапе 4 точку (
,
)
и расчеты повторяют с пункта 2.
В качестве примера показать работу простого градиентного метода для функции
f(x1,x2) = 4*(x1 - 4)2 + (x2 - 5)2 .
Начальная точка x1 = 1, x2 = 1, h = 1, e = 0.1 .
Результаты вычислений удобно представить в таблице:
|
№ |
x1 |
x2 |
g1 |
g2 |
f(x1,x2) |
h |
|
1 |
1 |
1 |
-24 |
-8 |
52 |
1 |
|
20 |
25 |
9 |
168 |
8 |
1860 |
0.5 |
|
21 |
13 |
5 |
72 |
0 |
324 |
0.25 |
|
22 |
7 |
3 |
24 |
-4 |
40 |
1 |
|
30 |
-17 |
8 |
|
|
|
0.5 |
|
31 |
-5 |
5 |
|
|
|
0.25 |
|
32 |
1 |
4 |
-24 |
-2 |
37 |
1 |
|
40 |
25 |
6 |
|
|
|
0.5 |
|
41 |
13 |
5 |
|
|
|
0.25 |
|
42 |
7 |
4.5 |
24 |
-1 |
36.25 |
1 |
Из этой таблицы видно, что на каждой итерации приходится уменьшать величину шага, чтобы можно было получить удачную точку. Кроме этого, видно, что при данных условиях метод "зацикливается" (по переменной x1 точки 1 и 7 чередуются, также как и значения производных). Чтобы этого не было, необходимо уменьшить величину шага.
Тот же пример, но h = 0.1
|
№ |
x1 |
x2 |
g1 |
g2 |
f(x1,x2) |
|
1 |
1 |
1 |
-24 |
-8 |
52 |
|
2 |
3.4 |
1.8 |
-4.8 |
-6.4 |
11.68 |
|
3 |
3.88 |
2.44 |
-0.96 |
-5.12 |
6.611 |
|
4 |
3.976 |
2.952 |
-0.192 |
-4.096 |
4.197 |
|
… |
… |
… |
… |
… |
… |
|
11 |
4.000 |
4.570 |
-0.000 |
-0.859 |
0.184 |
Ответом (при e = 0.1) будет точка x1 = 4.000, x2 = 4.656, f(x1,x2) = 0.118 .
Чтобы не заботиться о величине шага (и чтобы не встречалось "зацикливание") вектор-градиент на каждом шаге нормируют, т.е. вычисляют

где
- норма вектора-градиента в точке
.
Если использовать этот алгоритм, то можно получить следующие результаты (h=1):
|
№ |
x1 |
x2 |
g1норм |
g2норм |
f(x1,x2) |
|
1 |
1 |
1 |
-0.9487 |
-0.3162 |
52 |
|
2 |
1.9487 |
1.3162 |
-0.9123 |
-0.4096 |
30.402 |
|
3 |
2.8610 |
1.7258 |
-0.8121 |
-0.5836 |
15.910 |
|
4 |
3.6730 |
2.3094 |
-0.4372 |
-0.8994 |
7.667 |
|
5 |
4.1102 |
3.2087 |
0.2390 |
-0.9710 |
3.257 |
|
6 |
3.8712 |
4.1798 |
-0.5318 |
-0.8469 |
0.739 |
|
7 |
4.4030 |
5.0267 |
0.9999 |
0.0165 |
0.650 |
|
8 |
3.9031 |
5.0184 |
-0.9989 |
0.0474 |
0.038 |
|
9 |
4.0279 |
5.0125 |
0.9938 |
0.1108 |
0.003 |
Полученный ответ (e=0.1) x1 = 3.997, x2 = 5.009, f(x1,x2) = 0.00012 .
Если вычисление производных занимает очень много времени, то вместо простого градиентного метода обычно применяют метод наискорейшего спуска.
Идея метода заключается в следующем: после того, как в начальной точке вычислен градиент оптимизируемой функции, в найденном направлении любым методом одномерного поиска ищется точка с минимальным значением целевой функции. В найденной точке вычисляется новое значение градиента и определяется новое направление поиска, в котором опять производится одномерная оптимизация и т.д.
