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

книги из ГПНТБ / Ху, Т. Целочисленное программирование и потоки в сетях

.pdf
Скачиваний:
86
Добавлен:
22.10.2023
Размер:
16.99 Mб
Скачать

12.4. r-РАЗДЕЛЯЮЩЕЕ МНОЖЕСТВО

283

Задача П лато заключается в нахождении поверхности наимень­ шей площади, ограниченной заданной замкнутой кривой Жор­ дана Г. С этой задачей связана другая: найти поверхность наи­ меньшей площади, граница (или часть границы) которой заранее точно не определена, а лежит в заданной трехмерной трубке. Можно определить весовую функцию w в каждой точке простран­ ства и тогда рассматривать еще одну задачу: найти поверхность, обладающую минимальным весом и ограниченную заданной зам­ кнутой кривой Жордана Г. (Здесь под весом поверхности пони­ мается интеграл от функции w по этой поверхности.)

Рассмотрим, например, задачу нахождения поверхности, обла­ дающей минимальным весом и свободной границей. Пусть Р — поверхность, топологически эквивалентная сфере. Открытую область внутри Р обозначим буквой й, й (J Р обозначим буквой

R. На поверхности Р выделим две подповерхностп: Г8 и 1\. Опре­

делим весовую функцию на й; за пределами й весовую функцию считаем равной нулю. Будем искать поверхность с минимальным весом, разделяющую Г., и Г/. Если Р — Г8 — Г( есть некоторая

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

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

ГЛАВА 13

ЦИКЛИЧЕСКИЙ АЛГОРИТМ ЦЕЛОЧИСЛЕННОГО ПРОГРАММИРОВАНИЯ

13.1. Введение (Гомори [79])

Рассмотрим следующую задачу линейного программирования: максимизировать

Xq ~ $ qq

$ol$ -’l

^ 0 2 ^ 2

* • •

O'Qn'X'm

при условии

 

 

 

 

 

$'71+1—

$ п + 1 , О

^77+Ь 1^1

^тг+1, 2$"2

• • •

& п + 1 , п Х ц ,

%п+т ^

&п+т, 0

&п+т, 1^-1

ttn+m, 2*^2

 

(1)

8

п ^ т

x j > 0

( /= 1 ,

н + 1 , . . . , / г + т ).

.

Заметим, что $:„+!, . . хп+т — слабые переменные, а

.х1; . . .

хп — исходные переменные задачи (1). Если наряду

с огра­

ничениями (1 ) потребовать, чтобы все xj (j = 1 , . . ., т) были

целыми, то задача будет называться задачей целочисленного про­ граммирования. Существует большое количество задач, особенно комбинаторных, которые можно сформулировать как задачи цело­ численного программирования (см. [34], [6 ] и § 15.3).

Ограничения (1) определяют выпуклую область O A B C D в ге-мер-

ном пространстве, как показано на рис. 13.1. Узлы целочисленной решетки на рис. 13.1 изображены точками. Такие точки, рас­ положенные внутри области O A B C D , являются допустимыми

решениями задачи целочисленного программирования. Оптималь­ ные решения задачи линейного программирования всегда распола­ гаются на границе области решений. В данном случае граничные точки не являются даже допустимыми решениями, поскольку ни одна из них не целочисленна. Предположим, что область допу­ стимых решений сужена до. выпуклой оболочки допустимых целых точек внутри допустимой области. На рис. 13.1 эта выпук­ лая оболочка показана затененной областью O E F G II. Эту зате­

ненную область можно рассматривать как область допустимых решений некоторой другой задачи линейного программирования. Действительно, если к задаче линейного программирования, опре­ деляющей допустимую область O A B C D , добавить ограничение

13.1. ВВЕДЕНИЕ

285

типа R R ', как показано на рис. 13.1, то вновь полученная задача будет иметь OEFGH в качестве области допустимых решений. Такая вновь полученная область обладает -двумя важными свой­ ствами: во-первых, она содержит все допустимые целочисленные' точки исходной задачи линейного программирования (поскольку она является выпуклой оболочкой этих точек), во-вторых, все крайние точки новой области — целочисленны. Поэтому любое базисное оптимальное решение модифицированной задачи линей­ ного программирования имеет своими компонентами целые числа и является оптимальным ре­ шением исходной задачи цело­ численного программирования.

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

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

мальное решение автоматически будет целочисленным. Представ­ ленный ниже целочисленный алгоритм обладает следующими свойствами: 1 ) все дополнительные ограничения сохраняют допустимые точки исходной целочисленной задачи; 2 ) за конеч­

ное число шагов создается достаточное количество дополнитель­ ных ограничений для того, чтобы оптимальное решение моди­ фицированной задачи было целочисленным; 3) дополнительные ограничения (гиперплоскости) проходят по крайней мере через одну целочисленную точку, хотя и не обязательно находящуюся внутри выпуклой оболочки; 4) каждое новое ограничение сокра­ щает область допустимых решений исходной задачи целочислен­ ного программирования. Следует подчеркнуть, что оптимальное решение исходной задачи может быть получено прежде, чем допустимая область сократится до размеров выпуклой оболочки. К тому же, поскольку оптимальное целочисленное решение определяется пересечением п гиперплоскостей, таких гиперпло­ скостей существует не более, чем это необходимо; некоторые из них могут быть ограничениями исходной задачи.

286

ГЛ. 13. ЦИКЛИЧЕСКИЙ АЛГОРИТМ

О

11

Ь-Ь

!!

хп =

хп + 1 =

%п + т =

Таблица 13.1

1

a ’ j

— Х п

« 0 0

« 0 1

 

а 0 п

0

- 1

 

 

0

 

 

 

0

 

 

1

 

 

 

а п + 1 , 0

а п + 1 Л

a n + U n

а п + т , Ъ

а п + т ,

а п + т , п

Обычно в ограничения задачи (1) включаются а. тривиальные соотношения х} = —( —xj) (у = 1 , а задача в матричной

форме принимает вид

 

 

 

х = А ( — х„),

 

(2)

где х — вектор-столбец с компонентами х0, ху,

. . ., хп,

xn+i, . . .

. .

хп+т,

А — соответствующая

матрица

размера

(га + m +

+

1 ) X (га +

1 )

и (—х п ) вектор

с компонентами

(1 , —хи

х2, . . ., —хп),

представляющими

собой небазисные переменные

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

Причины представления переменных в виде (—а^), (—х 2 ) , . . .

. . ., (—хп) — чисто исторические, но это стало обычной прак­ тикой в целочисленном программировании. Будем использовать а; (/ = 0 , 1 , . . ., га) для обозначения у-го столбца текущей таб­ лицы и a-ij (i = 0 , 1 , . . ., га + гаг; у — 0 , 1 , . . ., га) для обозна­

чения элемента i-й строки и у-го столбца таблицы. Предполагается, что все atj в исходной таблице целые. Следовательно, все слабые переменные xn+t, . . ., х п + т должны быть также неотрицатель­ ными целыми числами.

При изложении алгоритма для решения целочисленных задач будем следовать работе Гомори [79]. Вначале задача целочислен­ ного программирования рассматривается как линейная программа и алгоритм решает ее с помощью прямого или двойственного симплекс-метода. В конце работы алгоритма ai0 ^ 0 (г = 1, . . .

. . ., га + гаг) и a0j ^ 0 (у = 1, . . ., га). (Для получения исходного двойственного допустимого решения введем дополнительное огра­ ничение xn+m+i = М Xt х 2 — . . . — хп 0, где М — до­ статочно большая константа, и проделаем одну итерацию с этой строкой и лексикографически минимальным столбцом в качестве ведущего.) Если ai0 ^ 0 и целые для всех г, то получено опти­

13.1. ВВЕДЕНИЕ

287

мальное решение целочисленной задачи. В этом случае решение получается сразу, без использования ограничений целочисленности. Если ai0 ^ 0, но не все целые, добавим к ограничениям (1) еще одно. Новое ограничение записывается внизу таблицы так, чтобы она перестала быть прямо допустимой, т. е. ai0 < 0 для

г = га + гаг + 1. Затем используется двойственный симплексметод с целью сделать все ai0 ^ 0. Если ai0 получаются нецелыми, в таблицу добавляются новые ограничения до тех пор, пока гаго (г = 1 , . . ., га, . . ., га + гаг) не станут все целыми и неотрица­

тельными.

Если после введения дополнительного ограничения текущая таблица перестает быть прямо допустимой, то текущее решение, представляющее собой вершину многогранника решений, не удо­ влетворяет этому дополнительному ограничению. Другими сло­ вами, дополнительное ограничение отсекает часть пространства решений. Если дополнительные ограничения не отсекают ни одной целочисленной точки пространства решений исходной задачи, то, вполне вероятно, после введения достаточного числа допол­ нительных ограничений вершины суженного множества решений будут целочисленными. Тогда, используя симплекс-метод, можно получить оптимальное целочисленное решение. Трудность состоит в систематическом получении дополнительных ограничений и дока­ зательстве конечности алгоритма.

Каждый раз после проведения итерации симплекс-метода происходит изменение множества небазисных переменных. Таб­

лица также

меняется. Будем использовать t для обозначения

t-ж таблицы.

Матричное уравнение (2) запишется как

 

 

х* = А1 ( - х ‘),

(3)

где х° — вектор-столбец с га + гаг + 1 компонентами, А0 — матри­ ца размера (п + гаг + 1 ) X (га + 1 ) и (—х£) — вектор с компо­ нентами (1 , —Xj, . . ., —хп), представляющими собой текущие

небазисные переменные, взятые со знаком минус. Если в матрице А а0} > 0 '(/ = 1, . . ., га), а00 = 0 (mod 1) Д и ai0 > 0 (г = = 1 , . . ., га + гаг) — целые неотрицательные числа, то получено

оптимальное решение целочисленной задачи. Если aiQ не все целые, введем дополнительное ограничение. Рассмотрим такое уравнение из (3), в котором яго нецелое. Опуская индексы строки, имеем

x = ao + '£a} ( — Xj),

(4)

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

х) Символ (= ) означает «сравнимость». Два числа сравнимы по модулю 1, если они отличаются друг от друга на целое число.— П.ри,м. перее.

288

ГЛ. 13. ЦИКЛИЧЕСКИЙ АЛГОРИТМ

== 0 (mod 1 ), правая часть уравнения (4) также должна удовле­

творять условию

0 = ав-Ь У аД —Xj)

(modi).

(5)

Это условие должно выполняться при любом допустимом цело­ численном решении. Поскольку требуется, чтобы Xj были целыми, можно алгебраически складывать с (5) отношения 0 == xj и также О = 1 J), тогда (5) примет вид

О = /о + У fj ( — Xj) (mod 1 ) (0 < / „ < 1 , 0 < / , < 1 ).

(6)

О

 

Условие (6 ) эквивалентно следующему:

 

hfjXj = to (mod 1).

(7)

Всоотношении (7) / 0 — константа, меньшая единицы, и поскольку

^0 и Xj ^ 0, левая часть всегда положительна. Так как (7) — отношение сравнения по модулю 1 , левая часть может принимать

только значения вида / 0, /о + 1 » . . ., т. е.

V fjXj > /0.

(8)

Неравенство (8 ) можно представить в виде уравнения с помощью

введения неотрицательной целочисленной слабой переменной

s = —fo+ '2fjXJ> 0 .

(9)

Это уравнение можно приписать внизу таблицы и использовать

вкачестве ведущей строки. Таким образом, переменная s войдет

вбазис с отрицательным значением (—/ 0). После итерации слабая переменная s станет небазисной с нулевым значением. Ведущая строка превратится в тождество s = (—1 ) (—s) и может быть

исключена. Будем называть переменную s в уравнении (9) слабой переменной Гомори. Ниже будет обсуждено, что произойдет, если сохранять все дополнительные строки, соответствующие слабым

переменным Гомори.

Дадим доказательство конечности алгоритма. Доказательство будет проведено в предположении, что известна некоторая нижняя граница значения х0, т. е. если существует целочисленное решение, то оно больше, чем наперед заданная величина М (М может'быть достаточно большой по абсолютной величине отрицательной кон­ стантой). Такое предположение не слишком обременительно' и всегда выполняется, если выпуклое множество, определяемое условиями (2), ограничено. Сначала изложим сам алгоритм.

III а г 1. Решить задачу целочисленного программирования так, как если бы это была линейная программа, т. е. с помощью

Э Алгебраическое сложение отношений 0 = xj и 0 = 1 с (5) соответ­ ствует вращению и перемещению гиперплоскости, из которой было полу­ чено условие (5),

13.1. ВВЕДЕНИЕ

289

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

а 1о > 0 (i = 1, . . т + п) и aoj > 0 (/ = 1, . . п). Требуется также, чтобы а* > 0 (у = 1 , . . ., п).

Ш а г 2. Если ai0 — все целые, то задача решена, и решение получено без использования дополнительных ограничений. В про­

тивном случае пусть а\о — первая нецелочисленная компонента в а01. Тогда l-я строка называется производящей строкой. Записать внизу таблицы уравнение

* = - / ‘о- 2 /« ( - * * )•

(1 0 )

Уравнение (10) называется отсечением Гомори. Проделать шаг двойственного симплекс-метода, используя в качестве ведущей строки отсечение Гомори (10). При этом таблица останется двой­

ственно

допустимой.

Повторять до тех пор, пока все ai0

(i =

= 1, .

. ., т + п) не

станут целыми неотрицательными.

Если

ai0 на некотором шаге остается отрицательным, следующий шаг двойственного метода производится без введения отсечения Гомо­ ри. (Если а00 становится отрицательным, нулевая строка не выби­ рается в качестве производящей. Если а00 становится нецелым,

следует выбрать нулевую строку в качестве производящей.) Изменение элементов ац (i = 0, 1, . . ., п + т\ / = 0, . . .

. . ., п) в таблице за одну итерацию называется циклом. Для

обозначения циклов используется буква t.

Для

доказательства

конечности не достаточно условий

ао >-

ао+ 1

и а00> М ,

посколь-

 

 

 

 

ОО

 

ку а00 может изменяться каждый

раз

на

е (t),

а ^

8 ( 0 = с-

 

 

1

 

<=1

 

Примером этого может служить е (t) =

 

 

 

Другой возможностью

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

При доказательстве будет показано, что либо после конечного числа шагов все компоненты 0 -го столбца становятся неотрица­

тельными целыми, либо не существует целого решения. Если а00 остается постоянным для всех t ^ £„, то а*0 должно быть целым.

Предположим, что а$0—нецелое. Пусть а[0 «оо+ /оо> гДе поо

целое и 0 < /*, -< 1. Тогда 0-я строка становится производящей

итребуется ввести дополнительное ограничение

*= - / $ , - 2 / o i ( - 4 ) .

19 т. Х у

290

ГЛ. 13. ЦИКЛИЧЕСКИЙ

АЛГОРИТМ

Если s-й столбец является ведущим, то

 

1 + 1

1

1

/ 00

 

#оо

= #оо— #о

 

7os

или

aot^aoo — /оо, поскольку a Qs> f 0s,

или

i+i ^ *

«оо -<геоо-

Другими словами, а00 уменьшится по крайней мере до ближайшего

целого. Следовательно, а00 не может уменьшаться на е (t) при

ОО

2 е (t) < с. Если а00 каждый раз уменьшается до ближайшего i=i

целого или на целую величину, то после конечного числа шагов оно станет меньше любого наперед заданного М (М — предпола­ гаемая нижняя граница). Если алгоритм бесконечен, то а00 должно

оставаться некоторым фиксированным целым числом для t > 10. Предположим, что это произошло.

Тогда рассмотрим а10. Так же как и a00, а10 не может оставаться нецелым значением. Если бы это было так, то, поскольку а00

целое, первая строка стала бы производящей и после введения отсечения Гомори и итерации симплекс-метода мы получили бы

 

 

<+1

<

t

А 0

»

 

 

#10 —#10

#1s

f

 

 

 

 

 

hs

 

где 0 < / i o < l

и 0 < / i s< l .

Здесь a\s— неотрицательное число,

большее f\s.

(Если а\$—отрицательно

и

а\ —лексикографически

положителен,

то a*s положительно и, следовательно, а' 0 не может

не измениться.)

Отсюда

 

 

 

 

 

 

1+1 ^ - 1

 

Л

г 1 1

 

 

аю <aio —/io = laioJi

т. е. ai0 уменьшается по крайней мере до ближайшего целого. Поэтому а10 либо будет оставаться некоторым фиксированным

целым числом, либо после конечного числа шагов станет отрица­ тельным. Если а10 станет отрицательным, то первая строка будет

ведущей и

i+i

1

Д10

1

сео = ао

as.

 

 

«is

 

Из того, что as > 0 и als <

0,

следует, что aos > 0, т. е. зна­

чение а0о строго уменьшится, что противоречит допущению о неиз­

менности значения а00. Если aXj

^ 0 для всех / =

1, . . ., s, . . .

. . ., п,

то задача не имеет допустимых решений.

(Заметьте, что

ведущий

элемент должен быть

отрицательным.)

 

13.2.

ПРИМЕРЫ

291

Таким образом, остается

единственная

возможность — а10

через конечное число шагов должно стать некоторым неотрица­ тельным целым числом и больше не меняться.

Аналогичные рассуждения можно провести и для остальных компонент вплоть до (п + т)-й, что завершит доказательство конечности. Заметим, что нам надо, чтобы только первые п + 1 компонент вектора ос0 были целыми неотрицательными числами,

а00 Jg 0 и ai0 (i =

п +

1 , . . ., п + т) — неотрицательные.

В приведенном

ниже

числовом примере все дополнительные

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

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

13.2. Примеры (Гомори [79])

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

элемент — (*).

Для того чтобы

ускорить

получение решения,

в отдельных

примерах порядок

выбора

производящей строки

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

Пример 1. Рассмотрим задачу целочисленного программи­ рования:

максимизировать

Х0 = 4#! + Ъх2 + х3

1 9 *

292 ГЛ . 13. Ц И К Л И Ч Е С К И Й А ЛГО РИ ТМ

при условиях

 

 

 

Зж1 + 2 ж2

< 1 0 ,

 

 

 

 

 

 

Xi + 4 г2

<

1 1 ,

 

 

 

 

 

?>xv+ За:2 + х3<

13,

 

 

 

 

 

 

а?1, х2, х3> 0 (целые).

 

 

Вводя слабые переменные я4, х5, хв, получаем:

 

 

 

1

x i

х 2

— * 3

 

 

 

х о

0

— 4

— 5

— 1

 

 

 

X l

0

-

1

 

0

0

D = 1

 

 

х 2

0

 

0

— 1

0

 

 

Х 3

0

 

0

 

0

— 1

 

 

 

Х к

10

 

3

 

2

0

 

 

 

Х ц

И

 

1

 

4

0

 

 

 

х в

13

 

3

 

3

1

 

 

 

 

1

X i

X i

— х з

 

 

 

х 0

5 5 /4

1 1 /4

 

5 /4

- 1

 

 

 

Х\

0

— 1

0

0

-1

0 0

0

х г

1 1 /4

 

1 /4

 

1 /4

0

х 3

0

0

0

- 1

0 —1 0 0

я 4

18/4

10/ 4 *

-

2 /4

0

11

1 4

0

х5

0

0

- 1

 

0

0

0 0 - 1

Х в

19 /4

 

9 /4

-

3 /4

1

 

 

 

 

1

X 4

х 5

х 3

 

 

 

 

187/10

11/10

7 /1 0

— 1

£ > = 4 x 1 0 /4 = 10

 

Х 1

1 8 /10

 

4 /1 0

2 /1 0

0

 

 

 

х 2

2 3 /10

1/1 0

3 /1 0

0

 

 

 

Х 3

0

0

0

— 1

 

 

 

x k

0

— 1

0

0

 

 

 

Х Ъ

0

0

— 1

0

 

 

 

Х в

7/10

9/1 0

- 3/1 0

1 *

 

 

 

Ведущий столбец

 

 

 

1

— хв

£)= 10 X 1 = 1 0

 

1

~Xk

Хь

х 0

194/10

2/10

4/10

1

Группа неравенств F

Xi

18/10

4/10

—2/10

0

Пр,и„о„»-ТО<0’ 0' 0'°1<5' 5’ 5’ 0>

*2

23/10

—1/10

3/10

0

х3

7/10

—9/10

—3/10

1

<------------(7,1, 7, 0) (2, 6, 2, 0)

*4

0

- 1

0

0

щая строка

(4j 2i 4 , о) (9, 7, 9, 0)

Xi

0

0

- 1

0

 

(1, 3, 1, 0) (6, 8, 6, 0)

Xi

0

0

0

—1

 

(8, 4, 8, 0) (3, 9, 3, 0)

ч

-7 /1 0

—1/10

—7/10 *

0

Например:

 

 

 

 

 

(7,1,7,0) + (4 , 2,4, 0) =

 

 

 

 

 

=

(1,3,10) (mod 10)

Соседние файлы в папке книги из ГПНТБ