Файл: Ху, Т. Целочисленное программирование и потоки в сетях.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 {b23—4 ,, 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 .
Следовательно, условие (*) выполняется.