Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы оптимизации и исследование операций для бакалавров информатики. Часть 2

.pdf
Скачиваний:
187
Добавлен:
26.03.2016
Размер:
7.81 Mб
Скачать

200 Глава 12. Многомерная оптимизация с ограничениями

Так как f и gi выпуклы, то выпуклы и g˜i, преобразованная задача есть задача с линейной целевой функцией и выпуклыми ограничениями. Легко видеть, что новая задача эквивалентна исходной.

Теория

Пусть имеется задача минимизации л и н е й н о й

метода

целевой функции при выпуклых нелинейных ограни-

чениях (если задача преобразовывалась, то рассматривается уже преобразованная задача, нумерация переменных и ограничений новая, знаки тильды опущены):

L(→− ) =

→− →−

min,

 

 

 

X

 

 

c T X

 

 

 

 

gi(→−

 

0, i = 1, . . . , m,

(12.33)

X )

 

 

 

 

→−

0.

 

 

 

 

 

 

X

 

 

 

 

 

 

Метод Кэлли является методом первого порядка, так как пред-

 

 

 

 

 

 

→− g

(→−

 

полагает знание градиентов ограничивающих функций i

X )

.

 

По концепции он близок методу Гомори в целочисленном программировании [9, гл. 7], также основанному на отсечениях.

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

X (0)

— некоторая начальная точка. Для каждой нели-

Пусть →−

 

X )

построим линеаризованную функцию

нейной функции gi(→−

 

G(0)

(→− ) =

g

 

(→−

) + →−

T g

(→−

)(→− →−

)

,

X

 

X (0)

 

X (0)

X

X (0)

 

i

 

 

i

 

i

 

 

 

 

 

которая действительно является линейной функцией векторного

аргумента

→−

, в чем легко убедиться, раскрыв скобки:

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G(0)

(→− ) =

g

 

(→−

 

 

+

→−

T g

 

(→−

 

 

)(→− →−

 

 

) =

 

 

 

 

 

 

 

X

 

 

i

X (0))

 

 

i

X

(0)

 

X

X (0)

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

→−

 

 

g

i

(→− )

→−

i

(→− )

 

 

→−

 

 

i

(→−

 

)→−

 

 

 

= (

→− i

)

 

→−

i

 

 

 

T

 

 

 

 

(0)

 

 

 

 

(0)

T

 

 

(0)

 

 

(0)

 

 

T

 

 

=

 

 

 

 

 

 

X

 

 

 

 

 

X +g

 

 

X

 

 

 

 

 

 

 

g X

 

 

X

 

 

 

 

a

 

 

X +b

 

.

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(→−

)

T

 

 

 

 

 

 

 

 

 

bi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

(0)

 

 

 

 

 

 

 

 

 

 

 

 

(0)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12.6.. Метод секущих плоскостей

 

 

 

 

 

 

 

 

201

 

 

G

(0)

(→− ) = (

 

(0)

)

T

→−

 

(0)

0

 

 

Тогда одно неравенство

 

i

X

→− i

 

 

X

+ b

i

опреде-

 

 

 

a

 

 

 

 

 

 

 

лит полупространство, а совокупность m неравенств в сочетании с ограничениями на неотрицательность задаст выпуклое многогранное множество M (0).

Легко убедиться, что оно включает в себя множество планов исходной задачи (12.33), которое мы обозначим через D. Действи-

тельно, по свойству 6 выпуклых функций (с. 31)

 

 

 

 

(→− )

 

 

 

 

 

 

 

→−

 

 

g (→−

 

 

) +

→−

 

 

 

(→−

 

)(→− →−

 

) =

G(0)

 

 

 

 

 

g

(X )

i

X (0)

 

 

 

 

 

T g

i

X (0)

 

X

X (0)

 

 

 

X

.

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

D

, т. е.

g

(X )

 

0,

то

G(0)(X )

 

Отсюда следует, что если →−

 

 

i

→−

 

 

 

i

→−

 

 

i(→−

 

0

, т. е.

→−

 

 

M (0)

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g

 

X )

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь можно поставить задачу линейного программирования

(задачу 0)

 

 

 

 

→−

 

 

 

 

→−

→−

min

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L(X ) =

c T X

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

→− i

 

 

)

T

→− i

, i = 1, . . . , m,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

( a

(0)

 

X

 

 

 

 

 

 

b

(0)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

→−

 

0,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

(1)

, являющуюся одной из крайних точек

ее решение даст точку →−

 

 

 

множества M (0).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X (1)

удовлетворяет условиям исходной задачи, т. е. все

 

 

Если →−

 

 

 

X (1))

 

0,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

gi(→−

 

 

то это и есть искомый оптимальный план →− . Если

 

 

X (1)

нарушает ограничения, т. е. для некоторого

p

имеет место

же →−

 

 

X (1)) > 0,

то строится линейное отсечение

 

 

 

 

 

 

 

 

 

 

gp(→−

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G(1)

(→−

 

 

 

 

 

→−

 

 

−→

 

→− →− −→

(1)) = ( a

 

 

 

→−

+b(1)

0.

X ) = g

 

(X (1))+

 

T g

(X (1))(X

X

(1))T X

 

p

 

 

 

 

p

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

→− p

 

 

 

 

p

 

 

 

Можно показать, что это отсечение является правильным, т. е.

 

 

 

X

(1)

будет отсечена от множества D. Действительно, если

точка →−

 

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

G(1)

(→−

→−

(1)) +

→−

T g

→− →− →−

→−

(1)) > 0.

X

(1)) = g (X

 

(X (1))(X (1)

X

(1)) = g (X

p

 

p

 

p

 

 

p

 

202 Глава 12. Многомерная оптимизация с ограничениями

Добавляя полученное отсечение к ограничениям задачи 0, получаем задачу 1

L(→− = c

 

→−

 

X )

 

→−

T X

min,

 

→−

 

 

 

→− i

 

)

T

i

, i = 1, . . . , m,

( a

(0)

 

X

 

 

b

(0)

 

 

 

 

 

 

 

 

( a

 

 

)

 

→−

 

p

,

→− p

 

 

T X

 

 

→−

(1)

 

 

 

b(1)

 

0,

 

 

 

 

 

 

X

 

 

 

 

 

 

 

X (2)

и т. д.

 

 

 

дающую решение →−

 

 

 

 

 

На каждой итерации добавляется новая отсекающая плоскость, в результате чего образуется сжимающаяся последовательность вложенных друг в друга многогранников, охватывающих нелинейную выпуклую область планов D:

M (0) M (1) · · · M (k) · · · D.

Решения линейных задач при этом образуют последовательность приближений, сходящуюся к точке минимума:

→−X (k) −→X .

В отличие от метода Гомори, метод Кэлли не гарантирует сходимости за конечное число итераций, при этом на каждой итерации точка приближенного решения остается з а п р е д е л а м и области допустимых значений.

Для того чтобы определить, какую конкретно отсекающую

плоскость следует построить на k-й итерации, рекомендуется под-

→− (k)

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

−→

p = arg max cut[gi(X (k)],

i

где cut[x] — функция срезки (с. 158 ). Если при этом текущее приближение оказывается достаточно близко к допустимой области,

Практический
алгоритм

12.6.. Метод секущих плоскостей

203

−→

о чем свидетельствует выполнение соотношения gp(X (k)) < ε, где ε — предустановленный параметр точности, то работа алгоритма завершается.

−→

Замечание. Если gi(X ) – линейная функция, то дополнительно линеаризовать ее не нужно, на любой итерации линеаризованная

 

 

 

 

 

 

 

 

 

 

 

(k)

X ) = g (X ).

Действительно, пусть

функция совпадает с исходной: Gi

(→−

 

i

→−

g

→−

 

→−

+

b

 

→−

g

 

→−

 

 

 

 

 

 

 

 

 

 

(X ) = a T X

. Тогда

 

(X ) = a

 

 

 

 

 

 

 

 

 

i

 

→−

 

 

 

i

 

→− и

 

 

 

 

 

 

 

 

 

G(k)

(→−

 

→−

(k)) +

→−

T g

 

→− →− →−

(k)) =

 

 

 

 

 

 

X ) = g

(X

 

(X (k))(X

X

 

 

 

 

 

 

i

 

i

 

 

 

 

i

 

→−

 

 

 

 

→− →− +

 

=

 

→−

 

 

 

 

 

 

→− →−

 

 

 

→− →−

 

 

i

 

 

 

 

= a T X (k) + b + a T (X X

(k)) = a T X

b

 

g

(X ).

П о д г о т о в и т е л ь н ы й э т а п

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

лее функции ограничений gi уже новые).

Н а ч а л ь н а я з а д а ч а

 

 

 

 

 

 

 

 

 

 

 

X (0)

 

 

 

X (0)

= 0

.

Шаг 1. Выбирается начальная точка →−

 

 

 

, например →−

 

Шаг 2. Строится задача линейного программирования

 

 

 

 

→−

 

→−

→−

min

 

 

 

 

 

 

 

 

 

 

L(X ) =

c T X

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

−→i

 

→− i , i = 1, . . . , m,

 

 

 

a

 

 

T X

 

 

b(0)

 

 

 

 

 

 

 

 

 

 

 

 

 

(0)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

→−

 

0,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

→− i

 

 

= →−

 

gi(→−

 

 

)

 

 

 

 

 

 

 

 

 

a (0) T

 

 

T

 

X

(0)

 

,

 

 

 

а вектор правых частей набирается из компонент

 

 

 

b(0)

= g (→−

 

 

) +

→−

T g

 

(→−

 

)→−

 

 

 

i

X

(0)

 

 

i

 

 

X

(0)

X (0).

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

204Глава 12. Многомерная оптимизация с ограничениями

Ит е р а ц и я (k = 1, 2, . . . )

Шаг 3. Любым, например симплексным, методом решается построенная задача линейного программирования, ее опти-

X (k)

.

мальный план становится текущим приближением →−

Шаг 4. Определяется индекс самого нарушаемого ограничения

−→

p = arg max cut[gi(X (k)].

i

−→

Если δ(k) = gp(X (k)) < ε, то работа алгоритма завершается.

Шаг 5. Достраивается задача линейного программирования,

−→ T

для чего к матрице условий добавляется строка a p , а к вектору правых частей дописывается компонента bp, где

a

=

g (−→

 

−→p

 

p

X

(k)

 

 

 

− −→(k) bp = gp(X )

),

−→T −→(k) −→(k)

+ gp(X )X .

Счетчик итераций увеличивается на единицу. Возврат на начало итерации (шаг 3).

П р и м е р. Продемонстрируем работу метода отсечений на хорошо знакомой задаче (см. примеры на с. 56, 196):

−→

f (X ) = (x1 2)2 + (x2 2)2 min,

−→

g1(X ) = x21 + x22 4 0,

−→

g2(X ) = −x1 + x2 0,

→−

g3(X ) = x2 1 0, x1, x2 0.

12.6.. Метод секущих плоскостей

205

П о д г о т о в и т е л ь н ы й э т а п

Введя дополнительную переменную x3 и дополнительную ограничивающую функцию g˜4, сформулируем новую задачу с линейной целевой функцией и нелинейными ограничениями. Функции g˜1, . . . , g˜4 теперь зависят от т р е х переменных (для упрощения обозначений знаки тильды далее опускаем):

x3 min;

g1(x1, x2, x3) = x21 + x22 4 0, g2(x1, x2, x3) = −x1 + x2 0, g3(x1, x2, x3) = x2 1 0,

g4(x1, x2, x3) = (x1 2)2 + (x2 2)2 − x3 0, x1, x2, x3 0.

Н а ч а л ь н а я з а д а ч а

X (0)

= 0 .

Ш а г 1. Выберем исходную точку →−

→−

Ш а г 2. Строим начальную задачу линейного программирования. Поскольку функции g2 и g3 линейные, то потребуется знание

градиента только для g1 и g4:

→− 4

 

 

 

2x2

 

 

4

 

 

 

 

 

→− g1(→−

 

 

2x2

 

 

→−

 

 

 

 

 

 

 

 

 

 

X ) =

 

 

2x1

 

 

 

 

 

g (X ) =

 

2x1

4

 

 

 

 

 

 

 

 

0

,

 

 

 

 

1

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для исходной точки вычисляем

 

 

 

 

 

 

 

 

 

 

 

 

 

g (→−

 

 

4,

-

 

 

 

.

T

=

→−

 

4

→−

 

 

 

 

 

 

 

 

 

b(0)

= 4,

 

 

4

(→−

 

 

 

 

→−

 

 

 

 

 

 

 

 

 

 

 

 

1

0 ) =

 

a

(0)

 

 

T g

(0, 0, 0) = (0, 0, 0),

 

 

 

 

 

 

→−

1

 

 

 

 

 

 

1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

-→−

4 .

T

 

 

 

 

 

 

 

 

 

 

 

 

4

 

g

0 ) = 8,

 

 

a

(0)

 

=

 

 

T g

( 0 ) = (

 

4,

 

4,

 

 

1), b(0) =

 

8.

Таким образом, задача линейного программирования для нахождения первого приближения имеет вид

206

Глава 12. Многомерная оптимизация с ограничениями

 

 

 

x3

min

 

0x1

0x2

0x3

4,

 

−x1

+x2

 

 

0,

 

4x1

x2

 

 

1,

 

4x2

−x3

8,

x1, x2, x3 0.

Первое ограничение получилось тривиальным, но оно не нарушает корректности постановки задачи и не должно нас смущать.

И т е р а ц и я 1

Ш а г 3. Решаем данную задачу симплексным методом, полу-

−→

чаем оптимальный план X (1) = (68.8506, 0.9951, 0)T , он выходит

далеко за допустимую область.

−→(1)

Ш а г 4. Подставляя X в каждое из ограничений, получа-

ем четыре числа: (4737.4, −67.9, 0, 4470.0). Нарушаются первое и четвертое ограничения, причем первое нарушается сильнее, поэтому индекс p = 1, δ(1) = 4737.4. На основе этого ограничения строим новое отсечение. Вычисляем

→−

1

=

p

(→−

(1)

) = (137

7

 

1

990

0)

a

 

g

 

 

 

 

 

 

 

 

X

 

→−

 

 

 

.

,

 

.

,

T ,

b

= g (→−

 

 

 

 

 

→− →−

(1) = 4745.4.

1

 

1

 

X (1)) +

 

T g

(X

(1))X

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

Ш а г 5. Добавляя новую строку, достраиваем задачу линей-

ного программирования:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

 

min

 

 

 

 

0x1

 

0x2

0x3

 

 

 

4,

 

 

 

−x1

 

+x2

 

 

 

 

 

 

 

0,

 

 

 

4x1

 

 

x2

 

 

 

 

 

 

 

1,

 

 

 

4x2 −x3

 

 

 

8,

 

 

137.7x1

1.99x2

 

 

 

 

 

 

4745.4,

 

 

 

 

x1, x2, x3 0.

 

 

 

 

 

 

 

12.6.. Метод секущих плоскостей

207

И т е р а ц и я 2

Ш а г 3. Решаем новую задачу симплексным методом, полу-

→−

чаем оптимальный план X (1) = (33.6886, 0.5549, 0.0000)T .

−→(1)

Ш а г 4. X также выходит за допустимую область, но уже меньше, так как δ(2) = 1131.2 < δ(1) = 4737.4.

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

В табл. 12.3 приведены первые 10 итераций метода секущих плоскостей. Хорошо видно, что оптимальная точка все время остается за пределами допустимой области, хотя монотонно приближается к ней.

Таблица 12.3. Итерации метода секущих плоскостей для примера

k

x(k)

x(k)

x(k)

δ(k)

 

1

2

3

 

1

68.850

0.995

0.000 4737.400

2

33.688

0.554

0.000 1131.228

3

15.034

0.044

0.000

222.034

4

3.881

0.775

0.000

11.666

5

1.008

0.998

4.000

1.986

6

2.195

0.997

1.000

1.815

7

1.780

1.000

0.450

0.597

8

1.780

1.000

1.047

0.171

9

1.732

1.000

1.069

0.002

10

1.732

1.000

1.071

0.002

208 Глава 12. Многомерная оптимизация с ограничениями

12.7. Исторические замечания

Численные методы нелинейной оптимизации с ограничени-

ями

в силу их вычислительной трудоемкости стали актив-

но

развиваться только в середине XX века после создания

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

тье5, опубликованной еще в 1943 г. Ее автором был выдающийся математик XX века Рихард Курант (Courant,

Richard; 1888–1972). Курант повторил судьбу многих европейских ученых еврейского происхождения. С 1920 по 1933 г. он был профессором Гёттингенского университета в Германии, после прихода нацистов к власти и разгрома Математического института Курант эмигрировал в США. С 1936 г. работал профессором Нью-Йоркского университета, где ему было поручено создание специального математического института (с 1964 г. называется Куран-

Рихард Курант товский институт математических наук). Расцвет численных методов нелинейного

программирования пришелся на 1960–1970-е годы, в эпоху общего бума исследования операций. Активные исследования велись параллельно во многих научных коллективах, в мировой математической литературе появились тысячи публикаций на эту тему, некоторые впоследствии были признаны классическими. Хотя национальная принадлежность их авторов была весьма широкой, наиболее существенные результаты были получены в США и Великобритании, где на базе ведущих университетов и крупнейших корпораций развились научные коллективы, возникшие во време-

5Courant R. Variational methods for the solution of problems of equilibrium and vibrations // Bull. Amer. Math. Soc. 1943. V. 49. P. 1–23.

12.7.. Исторические замечания

209

на Второй мировой войны и активно поддерживаемые военным бюджетом в эпоху «холодной войны». Именно в это время были разработаны основные алгоритмы нелинейного программирования, созданы первые промышленные пакеты прикладных оптимизационных программ.

Метод штрафных функций наиболее полно и всесторонне был исследован Энтони Фиакко (Fiacco, Antony V.) и Гарфом Мак-Кормиком (McCormick, Garth P.; 1935–

2008) в Research Analysis Corporation. Эта компания выросла из спонсируемого Министерством обороны США исследовательского центра знаменитого Университета Джона Гопкинса (Johns Hopkins University), расположенного в Балтиморе, штат Мэриленд. Их монография [26], вышедшая в 1968 г., вошла в классику исследования операций и получила соответствующую премию.

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

ные градиентные методы к ситуации с ограничениями. Он предложен6 в 1960 г. американским математиком Розеном (Rosen, J. Benjamin; 1923–2009), работавшим в это время в качестве руководителя Департамента прикладной математики знаменитой нефтяной компании Shell (хороший пример того, как крупные американские компании поддерживают научные исследования). В даль-

нейшем появилось множество схожих методов, что дало возможность голландскому математику Гусу Зойтендейку (Zoutendijk,

Guus) назвать их общим именем «методы возможных направлений» [14].

6Rosen J. B. The gradient projection method for nonlinear programming // J. Soc. Indust. Appl. Mathem. 1960. V. 8. P. 181-217