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

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

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

14.1.

ПОЛНОСТЬЮ

ЦЕЛОЧИСЛЕННЫЙ АЛГОРИТМ

303

Ш а г 2. Выбрать К >

0 (правило выбора будет описано даль­

ше) и написать

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

 

Эта строка выбирается в качестве ведущей.

Ш а г 3. Провести шаг двойственного симплекс-метода, вычерк­ нуть дополнительную строку и вернуться к шагу 1 .

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

Если а00 уменьшается, то уменьшается на целое число, поскольку

все числа остаются целыми, и, следовательно, через конечное

число шагов а00 станет меньше х0. Если алгоритм

бесконечен,

то п00 должно оставаться неизменным для всех t > t0.

Рассмотрим

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

должна быть выбрана в качестве производящей. Если а1;- ^ 0 для всех j, то задача неразрешима. Если же a{j <С 0 для некоторого ;, то в дополнительной строке

П

нее гарантируется правилом выбора Л.) Итерация с выбранной ведущей строкой строго увеличит ai0. Поскольку cc[) > a j + 1, должно уменьшиться, что противоречит предположению о неизмен­

ности б 00 для

t >

t0.

Поэтому а10 (если алгоритм бесконечен)

должно стать постоянным для

всех £><i,

где tx> ta. Аналогич­

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

второй, третьей и т. д.

компонент вектора

а 0-

Таким

образом,

после

конечного числа

шагов все а;0 (г =

1 ,

.. .,

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

Теперь опишем правило выбора К в шаге 2 полностью цело­

численного алгоритма.

Пусть

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

строка имеет вид

х= а0+ 2 aJ( —xi)

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

304

14. ПОЛНОСТЬЮ ЦЕЛОЧИСЛЕННЫЙ а л г о р и т м

Для любого а, <С 0 всегда можно выбрать Я достаточно большим,

чтобы — 1. Согласно лексикографическому двойственному

симплекс-методу, ведущий столбец a s выбирается по правилу

- 1

= min

1

х)

( a j < 0 ) .

 

[в«Д] “ s

i

К-A] щ

 

 

Поскольку [а8/Я] ==— 1 и [%/Я] —отрицательные целые,

т. е. — 1,

2 , . . ., — [xj, имеем

 

 

 

 

 

 

«3 V

«/•

V_«7_

 

( И )

 

1

 

 

 

 

Таким образом, a s должен быть лексикографически минималь­ ным столбцом. Последнее означает, что среди всевозможных столбцов (с a V j < L 0 ) ведущий столбец должен быть лексикографи­

чески минимальным вне зависимости от того, какое значение Я выбирается.

Теперь рассмотрим два значения Я, при каждом из которых

выполняется условие

[asAi] = — 1

и [ а в/ Я 2 ] = — 1. Столбец а 0

изменяется следующим образом:

 

< n =

a< + [^ g - ]« ;

(Яг = Я1( Яг).

Следовательно, чем меньше Я, тем сильнее лексикографически уменьшится нулевой столбец. Значение Я следует выбирать так, чтобы, во-первых, ведущий элемент стал равным — 1 и, во-вторых,

чтобы Я давало максимальное уменьшение столбцу а0. Правило формулируется следующим образом.

Ш а г

0.

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

Ш а г

1.

Пусть

a s — лексикографически минимальный стол­

бец среди столбцов с aVj <

0 .

 

 

Ш аг

2.

Для

каждого

ав]-< 0

пусть р.;— наибольшее целое,

 

 

v ai

 

 

 

 

такое, что a s -<

 

 

 

 

Ш аг

3 .

Пусть

Г ~~a°J I = pj,

а Kj—

(строка v — про-

изводящая).

Тогда

 

L A j

J

 

Ц]

 

 

 

 

 

у«7

“s ^

'

^ Минимум берется в лексикографическом смысле.— Прим, перев.

14.1. ПОЛНОСТЬЮ ЦЕЛОЧИСЛЕННЫЙ АЛГОРИТМ

305

Ш а г 4. Положить X — max Xj для

avj <С 0.

 

з

позволяет сделать веду­

Правило выбора X, описанное выше,

щий элемент равным —1 , при этом будет сохраняться двойствен­

ная допустимость таблицы и в то же время нулевой столбец будет максимально лексикографически уменьшаться. Следует заметить, что отсечение Гомори не является самым «сильным» возможным неравенством. Оно также может быть «сильнее» или «слабее» самого производящего неравенства. Например, пусть производя­

щей

строкой

будет

 

 

 

 

 

 

 

 

 

 

х = —4 — 3 (—ц )

-

5 { - х 2).

 

(12)

Если

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

X =

2, получим

отсечение

 

 

 

 

 

s =

—2 — 2 (—zj) -

3 ( ~ х 2) >

0.

(13)

Для X =

3 имеем

 

 

 

 

 

 

 

 

 

 

s =

<-т-2 — 1 (—а*) -

2

(—х2)

>

0.

(14)

Для X =

4

 

 

 

 

 

 

 

 

 

 

.

s =

- 1 -

l 7 - z j ) -

2

( - х 2)

>

0.

(15)

Как видно, неравенство (14) сильнее, чем (12), (12) сильнее,

чем (13), а (13) сильнее, чем (15).

Другое замечание касается того, что если величина X, полу­ чаемая указанным выше способом, может быть увеличена так, чтобы [а0/А,] и [a,jlX] (aj > 0) оставались без изменения, то отсече­

ние Гомори можно усилить, несмотря на то, что нулевой столбец уменьшится на ту же величину.

Выпишем производящую строку

X = d 0 + 2

d j { — X j ) + 2 а 'з ( хз)‘

(16)

а * < 0

а '. > 0

 

j

о

 

Чем больше величина X, тем меньше абсолютная величина коэффи­ циентов отсечения. Естественно, что мы хотели бы иметь абсо­ лютную величину [a„MJ большой, а абсолютные величины [а;-Ш — малыми. Если значение X (полученное по приведенному выше правилу) может быть увеличено так, чтобы значения [aj/X] и [а0М,]

не изменялись, то используется большее значение для X. Тем самым по возможности уменьшится абсолютная величина [а;/Х] для некоторых /, и отсечение станет сильнее.

Например, пусть целевая функция имеет вид

X q

2 0 х1

2 х 2 — Зх2

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

х = —20'+ (—7) (—Xi) + (—8) (—х 2) + (—15) (—х 3) + 18 (—ж4).

20 Т. Ху

306 14. ПОЛНОСТЬЮ ЦЕЛОЧИСЛЕННЫЙ а л г о р и т м

Используя описанную выше процедуру выбора X, получим X — 7. Соответствующее отсечение

s = —3 + х4 + 2х2 + Зх3 — 2х4 ^ 0.

Если использовать X = 9 вместо' X = 7, получим отсечение s* = —3 + х4 + х2 + 2 х3 — 2х4 ^ 0 ,

являющееся более сильным (см. [214]).

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

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

 

 

 

П

Хо =

Поо

2!

•при условиях

 

 

i=l

 

 

 

п

 

 

 

Xn+i — Q-iO 2

a U x i

^ 0 0 = 1 > • • • i m ')i

J= 1

0 = 1,

X j >

о

где o-oo и Cj — целые, ai0 и atj могут быть произвольными действи­ тельными числами. Таблица 14.1 содержит в первых п + 1 строках только целые числа.

 

 

Таблица 14.1

 

 

 

—Я*1

Д?2

• • •

хп

^0

а оо

си

с2->

* ■*»

сп

X i

0

— 1

 

 

 

х 2

0

 

— 1

 

 

хп

6

 

 

- 1

хп+1

а 10

 

 

 

 

 

 

a ij

 

 

хп+т

ато

 

 

 

 

Выпишем произвольную производящую строку (опуская обо­ значение строки)

х == ао

2 а1( xj)"

 

Вне зависимости от того, являются ли а0 и

целыми или дей­

ствительными, коэффициенты

отсечения

 

-[* ]+ 2 [*](-*л

14.1. ПОЛНОСТЬЮ ЦЕЛОЧИСЛЕННЫЙ АЛГОРИТМ

307

всегда целые, а ведущий элемент равен —1. В результате итера­ ции с таким ведущим элементом первые п + 1 строк таблицы

останутся целочисленными. Заметим, что переменная s — неотри­ цательная целая. В силу приведенных рассуждений доказатель­ ство конечности в данном случае мало чем отличается от описан­ ного выше. Когда в нулевом столбце ai0 (i = 1, . . ., п) становятся неотрицательными целыми, а остальные элементы нулевого столб­ ца — неотрицательными, то получается оптимальное решение.

В последних главах были обсуждены два алгоритма целочис­ ленного программирования, первый из которых называется цик­ лическим алгоритмом Ц = 1 ), а второй — полностью целочис­

ленным (X > 1). В приведенной ниже таблице перечислены раз­ личия этих алгоритмов.

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

Полностью целочисленный алгоритм

В исходной таблице все aij цело­ численные

at- ф 0 (mod 1) в текущей таблице

Для получения оптимума ЛП ис­ пользуется прямой или двойствен­ ный симплекс-метод. Затем исполь­ зуется двойственный симплекс-метод

Строка с индексом г становится про­ изводящей, если diо —нецелое

Ведущей строкой является

s = /о 2 / 7 ( xj)’

0 < / о < 4 , 0 < / , < 1

Ведущий s-й столбец оцределяется из условия

1

v

1

aj

T

a s <

Js

 

JJ

для всех /

В исходной таблице a-Lj могут быть действительными (a0j —должны быть целыми)

Если aij —целое в

исходной

табли­

це,

то afj остается целым и

в по­

следующих

 

 

 

На

протяжении

всех

вычислений

используется двойственный

симп­

лекс-метод

 

 

 

Строка с индексом i

(i Ф

0) становится

производящей, если а^0—отрица­ тельное

Ведущей строкой является

*-[х]+2 [-г]<-*Л

а0 < 0, aj > 2 0

Ведущий s-й столбец всегда лекси­ кографически минимален с а „ у < 0 . Он определяется до того, как отсе­ чение получено

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

Если требуется сохранить целочисленность таблицы, то добавляется одно неравенство.

20*

308

14. ПОЛНОСТЬЮ ЦЕЛОЧИСЛЕННЫЙ АЛГОРИТМ

14.2.Пример

Пусть требуется найти максимум

х0 =

1 0 ^! — 14х2 — 2 1 ж3

при условиях

 

 

 

2xj —{-

2 4~ 7х3 ^

14,

8xi +

11х 2 +

9х 3>>12,

9х^-{- 6х2

Зх3

Ю,

Xi х2, х3> 0 (целые).

Задачу можно свести в табл. 14.2, где первый столбец лексико­ графически минимален и все элементы производящей строки — отрицательны.

 

Таблица 14.2

 

 

 

 

1

-X ,

X »

- * з

 

 

х 0

1

10

14

21

 

 

Xi

0

- 1

0

0

 

 

х2

0

0

—1

-0

 

 

*3

0

0

0

—1

 

 

хк

- 1 4

—2

—2

—7

Производящая строка

Хь

- 1 2

- 8

- И

- 9

 

 

Хв

—10 —9

—6

—3

 

 

«1

—4

—1* —1

—2

X — 7/2

 

р1 == 1 , 1 0 <-J-4- ,

^ = [ ж ]

Юг 21_

1

 

 

Ра

йз

2.

х’ = ц = - г -

?i,= max^2 , 2 , у ) = -|- .

Отсечение * = [ — £ ] - [ н г ]

Р Й

[ н г ] *3’

Sj = —4 Xj + х2 4- 2х3 ^ 0.

Полученное отсечение записывается внизу табл. 14.2. Шаги итераций приводят к табл. 14.3, 14.4, 14.5 и 14.6. Оптимальное решение получается в табл. 14.6: х0 — —52, xt = 1, хг = О,

х3 = 2.

Т а б л и ц а • 1 4 . 3

1 — S j — х 2 —xs

ч - Производящая строка

Х= 3

Таблица' 14.4

1 — s t — х2 — s2

ч - Производящ ая строка

 

 

 

 

 

А, = 24

 

 

Таблица 14.5

 

 

 

1

- S 3

Х 2

— * а

 

Х0

- 5 1

9

4

1

 

X I

3

- 3

1

2

 

х2

0

0

- 1

0

 

*3

1

1

0

- 1

 

xk

- 1

1

. 0

- 3

ч - Производящ ая строка

Х5

21

- 1 5

- 3

7

 

х6

20

- 2 4

3

15

 

 

- 1

0

0

- 1*

1= 3

 

 

Таблица 14.6

 

 

 

1

—s3

— х 2

s4

 

*0

- 5 2

9

4

1

 

 

1

- 3

1

2

 

а:2

0

0

- 1

0

 

*3

2

1

0

- 1

 

*4

2

1

0

- 3

 

*5

14

- 1 5

- 3

7

 

*6

5

- 2 4

3

15

 

Г Л А В А 1 5

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

15.1.Введение (Гомори [81J)

Вэтой главе будут изучены такие задачи целочисленного программирования, в которых требование целочисленности рас­ пространяется не на все переменные, а только на некоторое под­ множество из них. Будут обсуждены два типа методов решения таких задач; первый излагается по работе Гомрри [81], второй —

по работе Вендерса [18].

Первый алгоритм в основном совпадает с алгоритмом, изло­ женным в гл. 13.

Ша г 1. Начать с оптимальной таблицы непрерывной задачи линейного программирования.

Ша г 2. Выбрать производящую строку.

Ша г 3. Составить по производящей строке отсечение и при­

писать

его

внизу таблицы.

Полученная

строка

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

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

 

 

 

 

 

Ш а г

4.

Провести

итерацию двойственного симплекс-метода

и вернуться к шагу 2 .

 

 

 

 

 

Единственное отличие предлагаемого алгоритма от описанного

в гл. 13

состоит в получении отсечения из производящей строки.

Пусть

требуется

найти максимум

 

 

 

 

 

 

X q

H qq

 

CIq ^ X i

^ 02 ^2

• • •

^0 п ^ п

( 1 )

при условиях

 

 

 

 

 

 

 

 

 

 

%n-И. —

^ п - И ,

0

&п+1,

1%1

• • *

&п-И, п

 

 

 

 

 

 

 

 

 

 

 

 

( 2)

 

 

% п-1—■& п + т , О

Q -n+ m t 1^1

• • •

Яп + т , п % п ^

0)

X j > 0 (; = 1 , . . . . /г).

Некоторые переменные xj должны быть целочисленными. Будем решать данную задачу как задачу линейного программирования, используя двойственный симплекс-метод. Если в таблице aoj ^ 0

0 = 1 , . . ., п), ai0 ^ 0 0 = 1 , . . ., п + т) и все переменные,

15.1. ВВЕДЕНИЕ

311

на которые наложено требование целочисленности, имеют целые значения, то, очевидно, получено оптимальное решение поставлен­ ной задачи. Поэтому предположим, что на переменную xt нало­ жено требование целочисленности, и ai0 ^ 0 — нецелое. Пере­ пишем соответствующее уравнение, опуская индекс строки:

а: == «о + S

( х}).

(3)

Поскольку х должно быть целым, х == 0 (mod 1). По предполо­ жению а0 — нецелое, а0 = / 0 (mod 1). Отсюда любое целочислен­ ное оптимальное решение задачи (2 ) должно удовлетворять усло­

вию

2 aixi = /о (modi).

(4)

1

 

Пусть коэффициенты левой части сравнения (4) разбиты на два множества / + = {/ | ^ 0} и /" = {/ | а;- < 0}. Тогда

2 ®А’+

2 a i x i == /о (mod 1),

(5)

5EJ+

i£J-

 

где 0 < /о < 1.

Левая часть сравнения (5) является либо положительной, либо отрицательной. Если она положительна,' то принимает значения / 0, 1 + / 0, и т. д. Тогда

2 a i x i >

2 a i x i + 2 «Я4'>/о•

(6)

i£J+

i£J-

 

Если левая часть сравнения (5) отрицательна, то ее значениями

должны

быть —1 +

/о, —2 +

/ 0 и т. д. Имеем

 

 

2

2 ajX)+

2 a j X j ^ — 1 + fo.

(7)

 

5£J-

i £ J +

j £ J ~

 

 

Умножив

обе части неравенства (7) на

> получим

 

 

 

2 Т ^ Т аА > / о -

 

(8)

 

 

j £ J ~

 

 

 

Таким образом, имеет место либо неравенство (6 ), либо неравен­

ство (8 ).

Поскольку левые

части неравенств

(6) и (8 ) неотрица­

тельны и

одна из них больше или равна / 0,

то

 

 

2 a i x i +

2 T ^ u a j X ^ f °

-

(9)

 

j £ J +

j £ J ~

 

 

Любое целочисленное решение должно удовлетворять нера­ венству (9). Текущее решение ему не удовлетворяет, поскольку,

312

ГЛ. 15. СМЕШАННЫЙ АЛГОРИТМ

подставив Xj = 0, получим в левой части неравенства (9) нуль. Следует заметить, что при получении неравенства (9) использо­ валось лишь условие целочисленности х в левой части (3) и неотри­ цательности Xj в правой части уравнения (3). Таким образом, получение ограничения (9) не зависит от того, было ли наложено ограничение целочисленности на переменную Xj. Вводя неотрица­ тельную слабую переменную s, можно переписать неравенство (9) в виде уравнения

( 10)

j£J+

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

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

мы хотим сделать коэффициенты a,] (j £ / +) и у з у (/ 6 J~)

насколько возможно малыми. Поскольку неравенство (9) полу­ чено из соотношения (4), рассмотрим в этом соотношении член акхк, где на xk наложено требование целочисленности. Очевидно, увеличение или уменьшение ak на целое число не нарушит Спра­ ведливости соотношения (4). Минимальным допустимым числом,

полученным из ап ^ 0 £ / +), является f k.

А для ak <

0 вели­

чиной, дающей наименьшее значение

а

будет

fh 1 .

Поэтому было бы желательно увеличивать или уменьшать в соот­ ношении (5) ак на целое число таким образом, чтобы получать минимальное значение коэффициентов в неравенстве (9), т. е. найти минимум из

( Заметим, что функция g(y)

возрастает с ростом у при

! /< ! • ) Очевидно, что

 

/ь (1 —/ о Х / о ( 1 —к ),

если / ь < / 0,

или, что равносильно,

 

 

если / h< /o ,

и

 

/ ь > 7 = 7 ^ 1 —^ ’ если /* > /о-

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