Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория / 2 / 09-OPTIM.DOC
Скачиваний:
85
Добавлен:
30.04.2013
Размер:
246.78 Кб
Скачать

Алгоритм простого градиентного метода:

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 .

Если вычисление производных занимает очень много времени, то вместо простого градиентного метода обычно применяют метод наискорейшего спуска.

Идея метода заключается в следующем: после того, как в начальной точке вычислен градиент оптимизируемой функции, в найденном направлении любым методом одномерного поиска ищется точка с минимальным значением целевой функции. В найденной точке вычисляется новое значение градиента и определяется новое направление поиска, в котором опять производится одномерная оптимизация и т.д.

Соседние файлы в папке 2