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

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

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

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

Добавлен: 15.10.2024

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

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

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

11.1. Д В У Х П РО Д У К Т О В Ы Е п о т о к и

231

Теперь рассмотрим алгоритм, с помощью которого можно определить, допустимы ли потоки / ( 1 , 1 ') и / ( 2 , 2 ') и, если они

допустимы, построить их. (Этот же алгоритм может быть исполь­

зован для построения max

[/ (1 , 1 ') + / (2 , 2 ')].)

Пусть

r (l , 1')

и г (2,

2') — требуемые значения потоков

/ (1, 1') и /

(2, 2').

Чтобы обеспечить конечность алгоритма, будем

предполагать, что г (1, 1'), г (2, 2') и — четные числа. (В одно­ продуктовой задаче о максимальном потоке предполагается, что btj — целые числа.) В вычислительном отношении это не является ограничением, потому что рациональные дуговые пропускные способности можно свести к четным целым числам.

Алгоритм построения двухпродуктовых потоков, называемый

методом циклического потока, заключается в следующем ([106]).

Ш а г 0. Найти / (1, 1'), равный г (1, 1') (если это возможно), исходя из заданных bij. Это обычная задача нахождения однопро­ дуктового потока. Для ее решения можно воспользоваться мето­ дом расстановки пометок Форда и Фалкерсона [65].

Если окажется, что max / (1, 1') < г (1, 1'), то заданные огра­ ничения на поток являются несовместными. В противном случае перейти к шагу 1. (Если требуется найти max [/ (1, 1') + / (2, 2')],

то на шаге 0 найти m a x / ( l , 1 ')

= с ( 1 ,

1 ').)

Ш а г

1. Найти максимальный поток /

(2, 2'), исходя из про­

пускных

способностей b\j = Ъц

| x\j | ±

x\j. Это тоже обычная

задача о максимальном потоке (т. е. требуется определить, при­

надлежит ли узел N 2' к Х 2 или нет). Если при этом получается / ( 2 , 2 ') ^ г (2 , 2 '), то алгоритм построения допустимых потоков

закончен. Если же / (2, 2') < г (2, 2'), перейти к шагу 2.

Ш а г 2. Найти двойной путь из JV2 в N 2>. Если его не суще­ ствует, то заданные ограничения на поток являются несовмест­ ными. (Если решается задача максимизации потоков, то получен max [/(1, 1') + / (2, 2')].) Если же двойной путь существует, то положить h — min (x\f, 0,5bbt) *). (Если существует несколько прямых и обратных путей, то можно выбрать из них любую пару путей.)

Двойной путь можно рассматривать как цикл. Поэтому можно отправить поток 1 -го продукта величины h от N 2 к N 2' по обрат­

ному пути, а затем дальше от N 2>к N 2 по прямому пути. Очевидно, что эта операция не изменит величины / (1 , 1 '), и в каждом узле N t

J)

Алгоритм и все утверждения этого параграфа остаются справедли­

выми,

если положить h = 0,5bbf, а величины xj, х\,

не вводить в рас­

смотрение (см. [15*])»— Прим. перева

 


232

ГЛ.

11.

МНОГОПРОДУКТОВЫЕ п о т о к и

 

будет

выполняться

условие

^ хц =

0. Но для некоторых

дуг

может оказаться, что

| xjj | +

з

Ъц. (Совершенно ясно,

что

| хц | >

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

Ш а г 3. Увеличить / (2, 2') на 2h. Для этого надо направить поток 2 -го продукта по прямому и по обратному пути, т. е. h еди­

ниц потока по каждому из путей. После этого величина / (2, 2')

увеличится

на 2h. Далее мы

покажем,

что при

этом | xjj | +

+ I ХЬ I ^

bij на каждой дуге.

Перейти

к шагу

1.

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

Рассмотрим сеть, изображенную на рис. 11.2. На рис. 11.3— 11.6 линии из длинных черточек со стрелками указывают направление потока 1 -го продукта, из коротких черточек со стрелками — на­

правление потока 2-го продукта. Сплошные линии изображают дуги, на которых нет дуговых потоков. Возле каждой дуги указы­ вается 3 числа: первое число — Ъц, второе — хц, третье — xfj. Если имеется только одно или два числа, это означает, что осталь­ ные числа — нули. На рис. 11.2 числа рядом с дугами означают их пропускные способности Ьгу. Мы хотим найти m a x / ( 1 , 1 ' )

и max [ / ( 1 , 1 ') + / ( 2 , 2 ')].

Ш а г

0.

Находим

 

максимальный

поток

m a x / ( 1 , 1 ' ) =

= с (1, 1') =

6 .

Этот поток изображен

на рис.

11.3.

Ш аг

1.

Находим /(2,

2'), исходя из остаточных пропускных

способностей Ъц-—Ъц\ x

\j

\ ± x \j . Для этого находим цепь, состоя­

щую из дуг А23, А 38, A s2

'-

Величина потока 2-го продукта равна 2.

Это изображено

на рис.

11.4.

 

 



 

11.1.

 

Д В У Х П Р О Д У К Т О В Ы Е

потоки

233

Ш аг 2.

Находим

обратный

путь

из

N z

в N z>,

состоящий

из дуг А 23,

А 34, И47,

 

И78,

А 8 2 ',

для которого

 

 

 

х\ =

min (ж£3, х\7) = min (2 , 2 ) =

2 ,

 

f e f t = m i n ( b 23 —

Я м » &34 + 4 з »

5 47, &78 +

4 7, &82' — 4 ' )

=

 

 

 

= min (2, 4, 2, 4, 2) =

2.

 

 

Находим

прямой

 

путь

из

iV2 в N 2>,

состоящий из дуг А23,

Азв, А в7, A 7i, A ib и П52 ',

для

которого

 

 

 

 

xj = min (xle, х\„ х\ъ) = min (2 , 2 , 2 ) = 2 ,

bf = min {b234 ,, b3&+ х\„ b67+ x\v b74, bi5 + x\b, 6M<) =

= min (2, 4, 4, 2, 4, 2) = 2.

Следовательно,

x\f = 2 , bbf = 2, h = min (4 /, 0,5bbf) = min (2 , 1 ) = 1 .

Мы направляем единицу потока 1-го продукта по циклу, обра­ зованному двойным путем. Результат изображен на рис. 11.5.

 

 

Р и с . 11.4.

Р и с . 11.5.

по

Ш а г

3. Поток /

(2, 2') увеличиваем на 2 единицы, посылая

одной

единице по

каждому из путей. Результат изображен

на

рис.

1 1 .6 .

 

 

Дальнейшее использование шага 1 не может увеличить / (2, 2 ),

а использование шага 2 не приводит к получению двойного пути.

Отсюда потоки, полученные на рис. 11.6,— максимальные, т. е. ве­ личина / (1, 1') + / (2, 2') = 6 + 4 = 10 максимальна.

Минимальное разделяющее множество состоит из дуг A i5, А к1,

^4 38» ^в7-


234

ГЛ. И . МНОГОПРОДУКТОВЫЕ п о т о к и

 

Чтобы доказать справедливость алгоритма, нужно доказать

следующие

утверждения.

 

 

1°. После выполнения шага 3 для всех дуг выполняется усло­

вие IZjjl +

lzfjK&ii-

 

 

2°. Когда алгоритм заканчивается,

то либо

находятся по­

 

токи, удовлетворяющие задан­

 

ным ограничениям, либо выя­

 

сняется, что заданные потоко­

 

вые ограничения являются не­

 

совместными. (Если решается

 

задача максимизации / ( 1 ,1 ') +

 

+ / ( 2 , 2 '), то в результате ра­

 

боты

алгоритма

оказывается

найденной величина

шах [ /( 1 , 1 ') +

/

( 2 , 2 ')].)

3°. Величины x\j

и xfj —це­

лые числа.

 

 

4°. Алгоритм

конечен.

Д оказательство.

1°. Докажем сначала, что после выполнения шага 3 для любой

дуги А ц прямого пути выполняется условие

 

IХЬ I +

1 xh I

bij-

{*)

Пусть направление от А/ к Nj —положительное.

 

Из определения прямого пути следует, что

 

b i j - x \ j

x\j ]> 0.

(5)

Перед выполнением шага 2 имеем

 

 

Ьц — | x\j | — | хц |> 0 .

(6 )

По определению

 

 

 

min [x\j, 0,5 (btj +

xlj — xb)].

(7)

На шаге 2

мы направляем h единиц потока 1-го продукта от Nj

к N t , а на

шаге 3 h единиц потока 2-го продукта от N t к N j .

Возможны 4 случая.

Случай 1. Пусть на рассматриваемой дуге A tj перед выполне­ нием шага 2 x\j > 0 и x\j ^ 0. На шаге 2 величина потока 1-го продукта уменьшается на h единиц, а на шаге 3 величина потока 2 -го продукта увеличивается на h единиц.

Из (6 ) тогда имеем

Ьц — | x\j —h | — | x\j -f h | > 0 .

Следовательно, условие (*) выполняется.