Файл: Ху, Т. Целочисленное программирование и потоки в сетях.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 15.10.2024

Просмотров: 212

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

17.1. ВВЕДЕНИЕ И АЛГОРИТМ

3 4 5

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

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

п

 

 

 

 

X q - d[Q

2

jXj

 

 

 

 

 

 

j = m + 1

 

 

при

условиях

»

 

 

 

 

 

 

 

 

 

 

 

 

 

X i ~ \ -

2

X i j X j =

(7 = 1, . . ., /н),

( l) v

 

 

j = m - f - l

 

 

 

 

 

 

xk^ 0

(целые)

(fc=l,

 

 

где a0j, ац и ai0— целые числа и ai0^0 .

 

 

Предположим, что

столбец

as выбран в качестве

ведущего

и

строка v — ведущая

строка

в итерации симплекс-метода, т. е.

 

 

для всех

СТр 0К ^ в которых ais^> 0. Прежде чем про-

a vs

a is

 

 

 

 

добавим

вести процедуру исключения Гаусса в симплекс-методе,

к

таблице отсечение

Гомори, полученное из строки и 1):

 

 

 

 

 

 

эех [ ■ ¥ - ] ( - * / > .

<2>

где J — множество индексов небазисных переменных в (1), sh

новая (базисная) слабая переменная и Я, — неопределенная (вре­ менно) положительная константа.

Заметим, что если положить Я = avS, то отсечение (2) будет

обладать двумя важными свойствами. Во-первых,

[Дрр/Дрз]

Г ДрО

j

ДцО

[^ps/^us]

L ^ vs

-I

®vs

Это означает, что прямая допустимость таблицы сохранится,,

если использовать

отсечение

(2) в

качестве ведущей

строки.

Во-вторых, —

=

1, т. е. ведущий

элемент равен 1 (если отсе-

 

L ^vs J

 

 

 

 

 

 

чение

используется

как ведущая строка). Легко удостовериться

(путем

исследования формул

изменения

базисных переменных

в симплекс-методе),

что преобразование

симплексной

таблицы

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

Эти идеи послужили основанием интуитивного прямого алго­ ритма в целочисленном программировании (см. Бен-Израел и Чарнес [17]). Чтобы показать структуру отсекающей плоскости в прямых алгоритмах, рассмотрим этот алгоритм и решим пример,, прежде чем внести изменения, необходимые для доказательстваконечности.

*) Это отсечение получено по способу, изложенному в полностью цело­ численном алгоритме Гомори. (См. § 14.1.)


346

 

ГЛ. 17. ПРЯМОЙ АЛГОРИТМ

 

 

 

Ш а г

0. Начать со столбцовой таблицы, в

которой

ai0 ^

0

{i ^ 1) и

все

элементы

a0j, ац и аго — целые.

-<

 

 

Ш а г

1.

Проверить

выполнение условий

a0j ^ 0

(;' ^

1);

если они выполнены, то конец, текущее базисцое решение опти­

мально; если нет — перейти к шагу 2.

 

 

Ш а г

2.

Выбрать

ведущий

столбец s c

aos <

0. Выбрать

■строку

v

по

правилу

проверки

отношения

ai0/ais

среди строк

с ais >

0. Эта строка служит производящей для получения отсе­

чения

Гомори.

 

 

 

 

Ш а г

3. Получить отсечение Гомори из производящей строки

и дописать ее внизу таблицы, т. е. добавить к ограничениям задачи уравнение (2), где X = avs.

Ш а г 4. Провести преобразование таблицы, используя отсече­ ние (2) как ведущую строку. Слабая переменная sh в (2) станет

небазисной. Вернуться к шагу 1.

Проиллюстрируем интуитивный

алгоритм на примере. Для

этого

решим задачу:

 

 

 

 

 

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

х0 =

 

 

х2

 

 

З х 4

+

при

условиях

 

Ъх2 ^

 

 

 

2

^ +

6

,

 

2xt

Зх2 ^ 3

3

,

 

xi,

х2 ^

0 (целые).

Графически условия задачи и четыре отсечения, последовательно получающиеся в ходе решения, показаны на рис. 17.1. После введения слабых переменных (х3, а:4) задача записана в табл. 17.1. Выберем столбец под переменной xt в качестве ведущего. Строка с обозначением xt является ведущей строкой в симплекс-алгоритме

и поэтому выбирается как производящая. Запишем отсечение, полученное из этой строки, в последней строке таблицы. Новая переменная st является слабой переменной в отсечении. Отсечение

получим,

разделив каждый коэффициент производящей строки

на 2 = a v s

= X и взяв целую часть от частного. Следующее пре­

образование таблицы использует столбец под xt и строку в каче­

стве ведущих. В результате получается табл. 17.2. Н а рис. 17.1 это отсечение обозначено через

Выберем для введения в базис переменную х2. Строка х3 является ведущей строкой симплекс-алгоритма и, следовательно, производящей строкой. Отсечение записано в нижней строке таб­ лицы. Результат выполнения преобразования показан в табл. 17.3. Н а рис. 17.1 это отсечение обозначено через с2.


17.1. ВВЕДЕНИЕ И АЛГОРИТМ

347

Выберем столбец под

в качестве ведущего.

Производящей

строкой является строка х 3. Получим отсечение и проведем пре­

образование. Результат записан в табл. 17.4. Как обычно, после того как преобразование таблицы произведено., ведущая строка

*2+

4 -

3

Р и с . 17.1.

вычеркивается из таблицы. Н а рис. 17.1 соответствующее отсе­ чение обозначено через с3.

После преобразования с ведущим элементом, указанным в табл. 17.4, получим оптимальную табл. 17.5. Соответствующее

отсечение обозначено на рис. 17.1

через с4. Оптимальным реше­

нием

является Xi = 1,

хъ — 1, х0

= 4.

 

К

сожалению, описанная процедура не обеспечивает

конеч­

ности

алгоритма. Д л я

доказательства конечности м ы

должны

ввести в алгоритм дополнительные условия.

 

Основная трудность

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

связана

■с тем, что отсечение (2) может иметь нулевое значение в столбце констант, т. е.

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


348

ГЛ. 17. ПРЯМОЙ АЛГОРИТМ

х0

XI

х2

*3

хк

н

Таблица 17.1 Таблица 17.2

*

1 Xt х2

 

 

 

 

 

 

о

со 1

1

 

xQ

3

3

—7

 

0

—1

0

 

xi

1

1

—2

 

0

0

—1

 

х2

0

0

- 1

 

6

2

3

•(- Производящая

х3

4

—2

7

Производящая

3

2

- 3

х4

1

- 2

1

строка

 

 

 

строка

 

 

 

 

 

1

1* - 2

ч- Отсечение

s2

0

—1

1*

- Отсечение

 

 

 

Гомори

 

 

 

 

Гомори

 

Таблица 17.3

 

 

Таблиц

17.4

 

 

 

 

 

 

 

\

 

—Si

—s2

1

—S3

—S2

*0 3 - 4

7

х0 3

4

—1

*1

1

- 1

2

 

#2

0

- 1

1

 

4

5

—7

ч -

*4

1

- 1

—1

 

 

0

1* —2 ч -

 

х1

1

 

1

0

 

Производящая

х2

0

 

1

—1

Производящая

х$

4

,

—5

3

строка

#4

1

1

—3

строка

Отсечение

s4

1

 

—2

1*

Отсечение

Гомори

 

 

 

 

 

Гомори

Таблица 17.5

1

— «з — s4

4

2

1

1

1

0

1

—1

1

1

1

—3

4

—5

3

значения всех базисных переменных не изменяются и, в частности, не изменяется значение целевой функции.

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


17.1. ВВЕДЕНИЕ И АЛГОРИТМ

349-

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

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

ными преобразованиями, о которых говорилось выше, т. е. при av0/avs = 0) и переходными циклами (преобразованиями, которые

приводят к новому решению с положительным приращением

целевой функции, т. е. при

av0/aDS ^ 1). Поскольку

в прямом

алгоритме рассматриваются

полностью

целочисленные

таблицы,

в переходном цикле aos ^ — 1 и av0/avs ^

1. Поэтому переходный

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

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

столбец

as должен выбираться не только исходя из

требования

a Qs < 0 ,

но и в соответствии с некоторыми новыми

правилами.

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

Новое

уравнение, добавляемое

к

исходной таблице, нам уже

!)

Чтобы получить короткое и

не

слишком громоздкое представление

о прямом алгоритме и доказательстве его конечности, мы обычно не будем делать различия между стационарными и переходными циклами. (Впервые Гловер предложил алгоритм, в котором в явном виде не было этого разли­ чия, см. [76].) Однако можно привести изложение алгоритма и доказатель­ ство его конечности с учетом этого различия. (См. Бен-Израел и Чарнес [17] и Юнг [224], [225]). При вычислениях, возможно, стоит учитывать указан­ ное различие.