Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мотс 2.pdf
Скачиваний:
39
Добавлен:
24.02.2016
Размер:
1.96 Mб
Скачать

Для повышения эффективности метода используется возможность растяжения и сжатия симплекса. При этом в выражении (4.23) Нелдер и Мид рекомендуют использовать α = 3 (растяжение) и α = 1,5 (сжатие), как показано на рис. 4.9.

4.2.2. Градиентные методы. Метод наискорейшего спуска. Градиентные методы основаны на использовании градиента целевой функции и носят итеративный характер, так как составляющие градиента оказываются нелинейными функциями управляемых переменных. Во всех методах итерационная процедура

поиска реализуется в соответствии

с формулой xk +1 = xk + αk S k , где

xk – текущее приближение к решению x*

на k -м шаге; S k – направление движе-

ния к точке xk ; αk – параметр, характеризующий длину шага. Различные методы

отличаются способом определения S k и αk на каждой итерации. Обычно αk находится из условия обеспечения экстремального значения функции F(x) в рас-

сматриваемом направлении S k , для чего используются алгоритмы одномерного поиска.

Далее везде предполагается, что F(x), F(x) и 2 F(x) существуют и

непрерывны.

В методе наискорейшего спуска направление движения при поиске минимума F(x) задается вектором антиградиента – F(x) функции F(x) в рассматри-

ваемой точке, т.е. итерационная процедура поиска реализуется в соответствии с выражением xk +1 = xk − αk F(xk ), где αk – параметр, характеризующий длину шага.

Составляющие вектора градиента в точке xk

определяются значениями част-

ных производных первого порядка функции F(x)

по соответствующим перемен-

ным, вычисленным в точке xk :

 

 

 

 

 

 

 

 

 

 

F(xk )

;

F(xk )

,......,

F(xk )

F(xk )T =

x

x

 

x

 

.

 

 

2

 

 

n

 

1

 

 

 

 

 

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

Выбор величины шага αk осуществляется путем решения задачи минимизации F(x) в направлении F(x) с помощью одного из методов одномерного по-

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

F(xk +1)T F(xk ) = 0. Преимущество метода в том, что при переходе от шага к

68

шагу обеспечивается выполнение неравенства F(xk +1 ) F(xk ) , т.е. значение

функции цели улучшается.

Графическая интерпретация метода наискорейшего спуска приведена на рис. 4.10. Здесь показаны линии уровня F = const выпуклой функции F(x1, x2 ) ,

минимальное значение которой находится в точке x* .

x2

F6

F5

F4

F3

F2

F1 x* x4

x3

F1<F2<F3<...

 

 

x0

x2

-

0

)

 

F(x

-F(x1)

 

 

x1

 

 

 

 

x1

 

 

Рис. 4.10. Графическая интерпретация метода наискорейшего спуска

Движение из начальной точки x0 осуществляется в направлении вектора F(x0), который направлен по нормали к касательной, проведенной к линии уровня в рассматриваемой точке. Величина шага α0 выбирается из условия минимизации функции F(x) , которое обеспечивается в точке x1 , где осуществляется касание с одной из линий уровня. В точке x1 опять определяется наилучшее направление F(x1) , которое должно быть направлено по нормали к касательной в точке x1 и соответственно будет перпендикулярно предыдущему направле-

нию движения. При этом переходим в очередную точку x2 и новое направление опять будет перпендикулярно предыдущему.

69

Последовательность точек x0 , x1 , x2 … сходится к точке минимума x* , при этом F(x0 ) > F(x1 ) > F(x2 ) … .Чем ближе линии уровня к окружности, тем луч-

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

рактер.

 

 

Блок-схема алгоритма метода наискорейшего

спуска представлена на

рис. 4.11. Здесь M – допустимое количество шагов, N – количество переменных,

x0 – начальная точка, k – номер текущего шага, ε , ε

2

– параметры окончания

1

 

поиска.

Работа алгоритма завершается, когда норма вектора градиента F(xk ) или норма вектора xk+1 xk становится достаточно малой. (Норма произвольного

n

вектора а определяется выражением a = aT a = ai2 .)

i=1

Скорость сходимости метода при решении некоторых задач является недопустимо низкой. Это связано с тем, что изменения переменных непосредственно зависят от величины градиента, которая стремится к нулю в окрестности точки минимума. Поэтому метод наискорейшего спуска эффективен при поиске на

значительных расстояниях от точки минимума x* и плохо работает в окре-

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

В алгоритме MATLAB одномерный поиск происходит путем вычисления F в нескольких точках и использования полиномиальной интерполяции.

Пример 4.5. Найти максимальное значение

функции

F(x) =−2x2

+18x

 

 

 

+12x методом наискорейшего спуска, если x0 =[2; 1].

1

1

2x x

x2

 

 

1

2

2

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Находим составляющие вектора градиента функции

 

 

 

 

 

 

 

F(x

k

)

 

F(x

k

)

 

= [4x +18 2x

 

 

 

+12].

 

 

 

 

F(xk )Т =

 

 

 

 

2

;2x 2x

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x1

 

 

 

x2

 

 

 

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Градиент функции в точке x0 будет F(x0 )Т =[8,6].

1-й шаг. Движение осуществляется из точки x0 вдоль вектора F(x0 ) в новую точку x1:

x1

x0

 

+ α0

8

2

+8α0

 

1

 

= 1

 

 

=

+ 6α0

.

x1

x0

 

 

6

1

 

2

 

2

 

 

 

 

 

 

70

Начало

Задать

 

M , N, x0, ε , ε

2

 

 

 

 

1

 

 

 

 

Положить

k = 0

 

 

 

Вычислить

F(xk )

 

 

 

F(xk )

≤ ε1

?

да

Печать

Конец

 

 

 

 

 

 

 

результатов

 

 

нет

 

 

 

 

 

KM?

 

да

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

Вычислить

αk

 

на

 

 

 

основе поиска вдоль

 

 

 

прямой, используя ε2

 

 

 

Положить

 

 

 

 

xk +1 = xk αk F(xk )

 

 

нет

xk +1 xk

 

 

 

да

 

k = k +1

 

xk

≤ ε1 ?

 

 

 

 

 

 

 

 

Рис. 4.11. Блок-схема алгоритма метода наискорейшего спуска

Величину шага α0 найдем из условия:

F (x1 )T F(x0 ) = [4(2 +8α0 ) +18 2(1 + 6α0 ); 2(2 +8α0 ) 2(1 + 6α0 ) +12]

8

=

 

= [8 44α0 ; 6 28α0 ] 8

 

 

 

6

 

 

=100 520α0

= 0,

 

 

 

 

 

 

 

 

6

 

 

 

 

71

откуда α0 = 0,192.

 

 

 

 

 

 

 

 

 

 

 

 

В результате

 

координаты

точки x1

получаются

равными x1 = 2 + 8α0 =

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

= 2 + 8·0,192 = 3,54; x12 = 1 + 6α0

= 1 + 6 0,192 = 2,15.

 

 

 

 

2-й

шаг.

 

Движение

осуществляется

в

 

направлении

вектора

F(x1)Т =[0,46;

0,62] . Координаты очередной точки

x2 определяются выраже-

нием

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

2

 

 

3,54

 

0,46

3,54

0 ,46

α1

 

 

1

 

=

2,15

+ α1

=

 

 

+

0,62

.

 

 

x

2

 

 

 

0,62

 

2,15

α1

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

Величину шага α1 найдем следующим образом:

 

 

 

 

 

 

F ( x 2 ) T

F ( x1 ) = [4(3,54 0,46 α1 ) + 18 2(2,15 + 0,62 α1 );

 

2(3,54 0,46 α1 ) 2(2,15 + 0,62 α1 ) + 12 ] 0,46

= −0,594 0,474 α1

= 0,

 

 

 

 

 

 

 

 

 

0,62

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

откуда α1 = 1,25 и

x2

= 2,965; x2

= 2,92.

 

 

 

 

 

 

 

 

 

 

1

 

 

2

 

 

 

 

 

 

 

 

Составляющие вектора F(x2 ) определяются следующими значениями:F(x2 )Т = [0,32; 0,24]. Для нахождения точки экстремума следует сделать ещё один шаг, в результате которого истинная точка экстремума определится коорди-

натами x* = [3, 3], Fmax = 45.

В общем случае процедура поиска продолжается до тех пор, пока все составляющие вектора градиента не станут достаточно малыми, т.е.

F(xk ) =

 

F(xk ) 2

 

F(xk )

2

 

x

 

+

x

 

 

≤ ε,

 

 

 

 

2

 

 

 

 

1

 

 

 

 

 

где ε – точность решения задачи.

Графическая интерпретация процесса решения примера 45 приведена на рис. 4.12.

Следует обратить внимание на то, что очередная точка лежит на направлении вектора градиента и каждое последующее направление перпендикулярно предыдущему.

72

x2

4

3

 

2

1

x0

0

1 2

F(x2)

x3 = x*

x2

F(x1)

 

x1

F(x0)

 

x1

3 4

Рис. 4.12. Графическая интерпретация решения примера 4.5 методом наискорейшего спуска

4.2.3. Метод Флетчера-Ривса. Этот метод дает хорошие результаты при по-

иске x* из удаленной точки x0 и быстро сходится в окрестности точки минимума. Для удобства записи последующих формул введем следующее обозначение:F(x) = g(x) , тогда направление поиска на первой итерации ( k = 0 ) определяет-

ся как S 0 = − F(x0 ) = −g 0 . Общая формула для направлений поиска на всех последующих итерациях ( k = 1,2,3...) имеет вид

S k = −g k +

 

 

 

 

g k

 

 

 

2

S k 1 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g k 1

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

Величина шага αk в направлении S k выбирается так же, как в методе наискорейшего спуска из условия достижения экстремума функции в рассматривае-

мом

направлении. Очередная точка xk +1 вычисляется по формуле

xk +1

= xk + αk S k . Метод весьма эффективен при решении практических задач. Не-

большой объем памяти ПЭВМ, необходимый для проведения поиска, делает его особенно полезным при решении задач большой размерности.

73

Пример 4.6. Найти точку минимума F(x) = x1 4x1x2 + 4x12 + 3x22 , если x0 =[0,0].

1-й шаг. Определяем направление движения S 0 из начальной точки x0 .

F(x)T = g(x)T = F , F =[14x2 +8x1;4x1 + 6x2 ], тогда S0 = -g0 = [-1, 0].x1 x2

2-й шаг. Координаты очередной точки х1 представим следующим образом:

x1 = x0 + α0 S 0 , или

x1 x0

S

0

 

 

 

0

 

 

 

 

1

 

 

α0

 

 

 

11

 

= 10

+

α0

10

 

=

 

+α

0

 

 

=

 

0

.

 

 

 

 

 

 

 

x2

x2

 

S2

 

 

 

 

0

 

 

 

 

0

 

 

 

 

 

 

Подставляя

 

x1

и x1

в F(x) , получим F(α0 ) = 4(α0 )2 −α . Величину α0 най-

 

1

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дем из условия

 

F

 

=8α0 1 = 0 , отсюда α0

=

 

 

1

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

∂α0

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x1

 

 

 

 

x1 = 0.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Следовательно,

=- 0,125;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3-й шаг. Определяем направление движения S1 из точки x1 , (k = 1)

 

 

 

 

 

 

 

 

 

 

 

 

S1

= −g1 +

 

 

g1

 

 

 

 

2

S 0 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g0

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполним необходимые вычисления:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(g1)T =[0, 0,5];

 

g1

 

2

= (g1 )T g1 = [0, 0,5]

 

 

0

 

 

 

 

 

 

 

 

g0

 

 

 

2

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0,5

 

=

0,25;

 

 

 

 

 

 

=

(g0)T g0 =[1, 0]

=1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тогда (S1)T = −[0, 0,5] 0,25[1, 0] = [0,25; 0,5].

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4-й шаг. Запишем координаты следующей точки x2

= x1 + α1S1:

 

 

 

x1

 

0,125

0,25

 

 

 

 

 

 

 

 

0,125 0,25α1

 

 

 

x

22

 

=

0

 

+ α1

0,5

=

 

0

 

 

α1

 

.

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0,5

 

 

 

 

 

 

 

 

Подставим координаты точки x1 в F(x)

 

и найдем α1 из условия минимиза-

ции функции F(α1)

в направлении S1:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F(α1) = 0,5(α1)2 0,25α1 0,0625;

 

 

 

 

 

 

dF

 

= α1 0,25; α1 = 0,25 .

 

 

 

 

 

 

 

dα1

 

 

Следовательно,

x2

= – 0,1875; x2

= −0,125.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

74