Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы оптимизации алгоритмические основы задач оптимизации. Курс лекций
.pdf
Вычитая из второго равенства первое, получаем
(B(2) – A(2))
T
Cd = 0, (2.16)
что и является доказательством теоремы.
Построение вектора S, сопряженного с вектором d, показано на
рис. 2.3.
Рис. 2.3. Геометрическая интерпретация теоремы
о сопряженных направлениях
Рассмотренная теорема распространяется на N-мерное простран-
ство, что приводится ниже без доказательства.
Справедливо следующее утверждение. Пусть в N-мерном пространстве x имеются M взаимно сопряженных направлений s(j), j = 1, M. Выберем две произвольные несовпадающие точки A(1) и B(1). Найдем
минимумы q(x) из точки A(1) последовательно по всем
направлениям
s(j), начиная каждый раз движение из точки предыдущего минимума.
Последний минимум, найденный в направлении s(M), обозначим через A(2). Точно так же найдем из точки B(1) минимум по всем направлениям B(2).
Тогда направление s(M + 1) = B(2) – A(2) является C-сопряженным
со всеми направлениями s(j).
Произвольный
выбор двух начальных точек и начального направления неудобен для построения алгоритма. Более рациональное правило предложено Пауэллом. Рассмотрим его для двумерного пространства x.
21

Выберем произвольно одну начальную точку x(0). Пусть A(1) =
A
(2)
2
e d
=
2
x
x
1
x
(0) = A
(1) B
B
(2)Sx
*
= x(0) и направление d равно орту e(2). Найдем точку A(2) – минимум
функции f(x) в направлении d, выходящем из точки x(0). Найдем теперь точку B(1) как минимум f(x) в направлении орта e(1), выходящего из точки A(2) (рис. 2.4).
(1)
d = e(2)
Рис. 2.4. Иллюстрация алгоритма Пауэлла
Затем найдем точку B(2) как минимум f(x) в направлении d, выходящем из точки B(1) (т.е. орта e(2)). По определению направление S =
= B(2) – A(2) является C-сопряженным с направлением орта e(2).
Найдем точку x
*
– минимум f(x) в направлении S, выходящем из точ-
ки B(2) Если f(x) является квадратичной формой, то найденная точка
есть минимум f(x) по x. В противном случае нужно проверить условие минимума, т.е. факт увеличения f(x) в окрестности найденной
точки x
f(x
*
:
*
) < f(x* + dx) (2.17)
при малых приращениях dx по всем компонентам вектора x.
Если условие минимума не выполнено, нужно повторить поиск по
сопряженным направлениям. Для этого в качестве нового направления d принимаем найденное направление S. Новая точка A(1) есть
B(2). Новая точка A(2) уже найдена – это x
*
. Новая точка B(1) опре-
деляется как минимум f(x) в направлении e(2), выходящем из точки
22

A(2). Новая точка B(2) есть минимум f(x) в новом направлении d, вы-
ходящем из B(1).
Далее определяем новое направление S. Таким образом, в очередном
цикле поиска в паре направлений первое из них заменяется на второе, а
второе – на вновь найденное направление, сопряженное со вторым.
Цикл повторяется, пока не будет выполнено
условие минимума.
В многомерном случае алгоритм Пауэлла может выглядеть следующим образом.
1. Задать x(0), N, k = 1 (счетчик числа проходов по сопряженным
направлениям) и начальную систему направлений в виде ортов: d(i) =
= e(i); i = 1, N.
2. Найти точку A2 как минимум f(x) в направлении d(N), выходя-
щем из
точки x(0).
3. Проверить условие k > = N. Если оно не выполнено, идти к 5.
4. Проверить условие минимума. Если оно выполнено, идти к 9,
иначе k = 1.
5. Присвоить xmin(0) = A2. Найти последовательно xmin(i) как
минимум f(x) из точки xmin(i – 1) в направлении d(i), i = 1, N. Присвоить B2 = xmin(N).
Вычислить сопряженное направление S = B2 – A2.
6.
7. Произвести замену направлений: d(i) = d(i + 1), i = 1, N – 1, d(N) = S.
8. k = k + 1, идти к 2.
9. Вывод результатов, STOP.
Вообще говоря, в этом алгоритме целесообразно еще предусмотреть контроль количества возвратов к оператору k = 1 (п. 4) во избежание зацикливания в случае функций сложной формы.
2.2.3. Методы случайного поиска
Методы случайного поиска предусматривают генерацию серии
случайных направлений из очередной точки поиска и выбор из этой
серии направления, в котором функция уменьшается. Методы различаются способом выбора направления и способом перемещения в
очередную точку.
Пусть r(l) – некоторый случайный вектор, где l – индекс, означающий порядковый номер
генерации. При этом l принимает значения от 1 до L, где через L обозначено общее число генераций. Компонентами r(l) являются случайные числа в интервале (–1, +1).
Обычно источником получения случайных чисел является генератор,
производящий числа E в интервале (0, 1). Компонента вектора r(l)
вычисляется по формуле
23

r
(l) = –1 + 2Ej; j = 1, N. (2.18)
j
Количество генераций L выбирают достаточно большим. Для
двумерного пространства обычно L > 10. Для N-мерного пространства это число порядка 10N. Суммарное число включений генератора
случайных чисел, таким образом, может быть равно NL.
После того как сгенерирован вектор r(l), вычисляется очередная
пробная точка
x^(k, l) = x(k) +
δr(l),
где x(k) – очередная точка поиска;
δ – так называемый пробный шаг (намного меньший единицы).
Затем вычисляется приращение функции:
Δ f(k, l) = f(x^(k, l) – f(x(k)). (2.19)
Существуют два варианта определения направления S(k):
– первый – в качестве S(k) фиксируется первый из векторов r(l),
при котором значение
Δ f(k, l) отрицательное;
– второй – генерируются все L векторов r(l) и определяется индекс lmin, при котором обеспечивается минимум
Δ f(k, l) по l. При
этом S(k) = r(lmin).
После выбора направления производится рабочий шаг:
x(k + 1) = x(k) + α(k)S(k). (2.20)
Здесь также имеются два варианта перемещения в заданном направлении:
– первый – α (k) = α = const;
– второй – x(k + 1) определяется в результате поиска локального
минимума из точки
x(k) в направлении S(k).
Для генерации псевдослучайных чисел E можно использовать
следующую процедуру: переменные z и zm объявляются длинными
целыми, в начале главной программы переменная z обнуляется, а переменной zm присваивается максимальное значение. Затем выполняются операторы:
E = sin(20.5z – 8.5cos(10.5z))
E = (E + 1)/2 (2.21)
z = z + 1
i
24
f z > zm – 1 then z = 0

Правило останова для метода случайного поиска: Δ f(k, l) ≥ 0 для
)
k
)()
)()
i
x
ε
всех l.
Несмотря на то что генератор псевдослучайных чисел является
достаточно короткой процедурой, большое количество генераций
делает иногда рассмотренные варианты метода неэффективными. В
связи с этим имеет смысл испытать на эффективность методы с малым числом генераций. Но просто уменьшить число генераций нельзя, так как
при этом сразу уменьшается вероятность нахождения эффективного направления в связи с ограниченным выбором. Компромиссным решением является метод случайного поиска с адаптацией.
В этом методе для k-го шага генерируется только один случайный
вектор r(k). Очередная точка x(k + 1) вычисляется по следующим
формулам:
x(k + 1) = x(k) +
α
kk
()
S
k
+ (1 – β (k)) r(k));
()()(
bS
S(k) = γS(k –1) + (1 – γ) (x(k) – x(k – 1));
Δf(k) = f(x(k) – f(x(k –1)); (2.22)
α(k) =
β(k) =
(
αα
kk
−−
11
() ()
αα
−−
kk
11
(
αα
kk
−−
11
() ()
αα
−−
kk
11
,
+Δ Δ
−Δ Δ
+Δ Δ
−Δ Δ
если <0;
если >0;
,
,
если <0;
если >0,
,
f
f
f
f
где Δα, Δβ и γ – константы, меньшие единицы.
Адаптация состоит в настройке коэффициентов α(k) и β(k) – увеличение при удачном шаге (уменьшение функции) и уменьшение при
неудачном шаге.
2.2.4. Метод покоординатного спуска
В методе покоординатного спуска, судя по его названию, в качестве направления очередного шага поиска S(k
) принимается один из
ортов. В n-мерном пространстве переменных орты выбираются по
порядку: e
, e2, ..., en. Алгоритм поиска минимума в этом методе реа-
1
лизован следующим образом. На k-м шаге поиска выбирается очередной орт e
– точность поиска.
где ε
x
и производится пробный шаг по переменной xi:
i
xx
=+
,
i
25

В пробной точке вычисляется значение функции:
( ( )) ( ( ), ( ), ..., ( ),..., ( )).
(()) (()) (()) 0,
i
x
ε
fxk fxk xk xk xk=
iin
12
(2.23)
Если разность
S(k) = e
и производится поиск локального минимума в найденном
i
fxk fxk fxkΔ =−< то принимается
ii
направлении (напомним, что это рекомендуется сделать методом
«золотого сечения»).
В противном случае делается пробный шаг
xx
=−
.
i
Если при этом в пробной точке функция уменьшилась, то в каче-
стве направления поиска принимается S(k) = –e
и также производит-
i
ся поиск локального минимума в направлении S(k).
Найденная таким образом точка принимается в качестве x(k + 1).
Если же функция увеличивается в обеих пробных точках (и при
шаге +ε
щий орт e
, и при шаге – εx), то для пробного шага выбирается следую-
x
.
i + 1
Останов алгоритма происходит по признаку: функция f(x) увеличивается во всех пробных точках.
Первый пробный шаг из точки x(0) производится по орту e
.
1
Правило останова является прямым аналогом проверки условия минимума по признаку возрастания функции в ε
-окрестности точки x(k).
x
Однако для функций сложной формы возрастание функции только по
ортам не является достаточным признаком минимума. В этом случае
все же требуется сканирование ε
-окрестности точки останова.
x
2.3. Методы первого порядка
2.3.1. Метод градиента
Градиентные методы основаны на определении направления
спуска к минимуму, обеспечивающему максимальное уменьшение
значения функции из очередной точки поиска x(k) (при относительно
малом шаге Δx).
Запишем разложение функции f(x) в окрестности точки x(k) по
формуле Тейлора:
f(x) = f(x(k)) + (grad f(x(k)))
и ограничимся двумя первыми членами разложения ввиду малого
значения Δx.
26
T
Δx + ... (2.24)

Отсюда
f(x) = f(x) – f(x(k)) = (gradf(x(k)))TΔx. (2.25)
Δ
Скалярное произведение справа максимально при коллинеарности
соответствующих векторов, т.е. если
Δx = α(grad f(x(k))), α = const.
Следовательно,
Δx(k) = x(k + 1) – x(k) = – αgrad f(x(k)). (2.26)
Знак «минус» поставлен с учетом того, что функция должна
уменьшаться. Поэтому в формуле
x(k + 1) = x(k) + αS(k
) (2.27)
нужно принять S(k) = –grad f(x(k)).
Компоненты градиента вычисляются так же, как в разд. 2.4.
В качестве правила останова в методе градиента применяется условие
||grad f(x(k))|| ≤ ε
. (2.28)
g
Однако оно «срабатывает», только если градиент в точке минимума существует. В противном случае для гарантированного останова алгоритма нужно добавить еще два условия:
|Δf(x(k))| ≤ ε
; ||Δx(k)|| ≤ εx. (2.29)
f
Вектор-градиент в точке x(k) перпендикулярен касательной к линии уровня функции, проходящей через эту точку. Траектория поиска минимума методом градиента показана на рис. 2.5.
2.3.2. Метод наискорейшего спуска
Метод наискорейшего спуска отличается от метода градиента
способом вычисления точки x(k + 1): точка эта находится как локальный минимум из точки
x(k) в направлении
S(k) = –grad f(x(k)).
Траектория поиска минимума показана на рис. 2.6.
Надо отметить, что геометрически траектория наискорейшего
спуска длиннее траектории метода градиента. Но эта траектория
имеет больше точек, где вычисляется градиент, и поэтому проигрывает по числу операций.
27

x
x
x
x
*
1
2
x
(2)
x
(1)
x
(0)
x
*
Рис. 2.5. Траектория поиска минимума методом градиента
(0)
Рис. 2.6. Траектория поиска минимума методом наискорейшего спуска
28

2.3.3. Метод сопряженных градиентов
.
2
xCx
.
ll
Метод градиента теряет эффективность при поиске минимума
функций сложной формы. Это в первую очередь касается функций с
переменной кривизной поверхности (резкая смена значений производных), а также «овражных» функций. В методе сопряженных градиентов используется идея вычисления некоторого среднего направления по градиентам в нескольких точках.
вывода аналитической процедуры метода предполагается, что
Для
в окрестности очередной точки x(k) функция аппроксимируется
квадратичной формой:
T
f(x) = a + b
T
x +
(2.30)
При условии что матрица C является симметрической, справедливо следующее выражение для градиента:
grad f(x) = b + Cx. (2.31)
Для более короткой записи выражений введем обозначения:
g(k) = grad f(x(k)); Δx(k) = x(k + 1) – x(k). (2.32)
Запишем выражение для приращения Δg(k) градиента между точками x(k) и x
(k + 1):
Δg(k) = g(k+1) – g(k) = C(x(k+1) – x(k)) = CΔx(k). (2.33)
В методе сопряженных градиентов предполагается, что очередная
точка x(k + 1) находится как локальный минимум из точки x(k) в направлении S(k), вычисляемом по формуле
1
k
−
() ()
S
S(k) = –g(k) +
∑
l
=
γ
0
(2.34)
При этом S(0) = –g(0).
Поскольку x(k + 1) есть локальный минимум в направлении S(k),
то градиент в точке x(k + 1) перпендикулярен направлению S(k), поскольку это направление является касательной к линии уровня функции (рис. 2.7). Поэтому
T
g(k + 1)
S(k) = 0. (2.35)
29

Рис. 2.7. Взаимное положение векторов S(k) и g(k + 1)
Значения множителей γ(l) выбираются таким образом, чтобы направление S(k) было C-сопряженным со всеми ранее найденными
направлениями S(l) (l = 0, k – 1).
Напомним, что условием C-сопряженности является
T
S(k)
CS(l) = 0. (2.36)
Для получения формулы, по которой вычисляются коэффициенты
γ(l), рассмотрим начало поиска из точки x(0). Как упоминалось выше,
S(0) = –g(0). В этом направлении найдена точка x(1). Построим направление S(1):
S(1) = –g(1) + γ (0) S(0) = –g(1) – γ (0)g(0). (2.37)
Наложим ограничение, следующее из условия C-сопряженности:
T
S(1)
CS(0) = 0.
Отсюда
T
(g(1) + γ (0)g(0))
CS(0) = 0. (2.38)
Но поскольку x(1) = x(0) + α(0) S(0) (где α(0) есть некоторое число), то
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
