Скачиваний:
47
Добавлен:
15.06.2014
Размер:
388.82 Кб
Скачать

Тема 3 Методы оптимизации первого порядка

Метод тяжелого шарика Метод спуска по градиенту Метод сопряженных градиентов

05.01.2011

1

Общая характеристика методов первого порядка

Чем больше информации о функции известно, тем более эффективно можно достичь минимума, если этой информацией правильно распорядиться

Методы нулевого порядка фактически не располагают никакой информацией о функции (это черный ящик). Правда в процессе спуска они ее накапливают и используют для очередного спуска (например метод Розенброка осуществляет поворот координат в зависимости от результатов предыдущего спуска)

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

g f ( x )

 

d f

 

d f

 

 

, ...,

.

d x1

d x n

 

 

 

 

05.01.2011

 

 

 

 

2

Как известно, направление градиента является направлением наискорейшего возрастания функции в данной точке. Следовательно, противоположное направление является направлением наискорейшего убывания функции.

Это свойство в основном и используется для построения методов минимизации первого порядка.

При этом направление наискорейшего убывания в данной точке не всегда оказывается наилучшим для спуска к минимуму.

Поэтому для повышения эффективности вводят различные поправки.

При выборе очередного направления используют накопленную информацию о функции из предыдущих спусков.

Множество возможностей введения таких поправок определяет многообразие различных методов первого порядка.

05.01.2011

3

Метод тяжелого шарика

• Представим себе котлован.

f(x1,x2)

Мы находимся на каком то

склоне и отпускаем круглый

 

камень.

 

• По какой траектории он

x2

будет катиться? Видимо по

 

такой которая здесь показана

Траектория задается функцией координат от времени

x x (t )

x (0 ) x 0

• От чего зависит эта

x1

траектория?

 

05.01.2011

4

Уравнение траектории тяжелого шарика

 

 

x

 

 

 

- скорость движения шарика

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 x

- ускорение шарика

 

 

t 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f ( x )

- сила тяжести шарика

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

- сила трения шарика

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

m

2 x

 

 

x

f ( x ) 0

 

 

 

 

 

 

 

t

2

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

05.01.2011

 

 

 

 

 

 

 

 

 

уравнение движения шарика

5

Решение уравнения

 

 

Можно использовать разные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

методы решения этой

 

2 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

задачи Коши

 

 

 

 

a

x

b

f ( x ) 0;

x ( 0 )

x

0

Мы используем то, что вам

t 2

t

 

уже знакомо

 

 

 

 

 

 

x k 1 2 x k x k 1

 

a

 

x k 1 x k 1

b f ( x k ) 0

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x k 1

 

1

 

 

 

2 x k 1

a x k 1 2 b f ( x k )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задаем две точки

 

x

0

, x

1

Вычисляем градиент

 

f ( x 0 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подставляем в уравнение и получаем новую точку

x 1

 

 

 

 

 

 

Подставляем

x

0

,

x

1

 

получаем

x 2

и т.д.

 

x

k

x

k 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

05.01.2011

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

Вычисление градиента

• Если функция задана аналитически, например

f ( x1 , x2 ) ( x1 x2 ) 2 2 x12

То просто пишем подпрограмму

Procedure gradF(var x,dF:mas;n:byte);

Begin

df[1]:=6*x[1];

df[2]:=-2*x[2];

End;

05.01.2011

7

Вычисление градиента

Если функция задана в виде сложной программы, и производные невозможно просто вычислить

Function F(var x:mas,n:byte):real;

Begin

f:=sqr(x[1]-x[2])+2*sqr(x[1])

End;

То пишем подпрограмму

Procedure gradF(var x,dF:mas,n:byte,h:real);

Begin

df[1]:=(F(x[1]+h,x[2])-F(x[1]-h,x[2]))/(2*h);

df[2]:=(F(x[1],x[2]+h)-F(x[1],x[2]-h))/(2*h);

End;

 

05.01.2011

8

Резюме

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

Метод тяжелого шарика имеет лишь методическое значение, в силу больших затрат на настройку и реализацию алгоритма

Однако он показывает, как можно систематически спускаться к минимуму если знать градиент функции

Более эффективны методы спуска, в которых очередное направление выбирается с использованием градиента

Ниже мы рассмотрим общий алгоритм таких методов

05.01.2011

9

Общий алгоритм метода спуска по градиенту

1. Задается начальная точка

x

0

 

 

 

 

 

 

 

 

 

 

 

 

и начальный шаг h

 

 

 

 

 

 

одномерного спуска .

 

x2

g0

2. Вычисляется

 

 

 

 

 

 

 

 

 

 

 

 

g f ( x

 

)

 

x

0

 

 

 

 

 

 

 

0

 

2

 

d

 

 

 

 

 

 

 

3.Выбирается направление

 

 

 

 

 

d g

x10 x1

05.01.2011

10