Файл: Ху, Т. Целочисленное программирование и потоки в сетях.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 15.10.2024
Просмотров: 191
Скачиваний: 0
|
|
|
|
|
8.1. |
ВВЕДЕНИЕ |
|
|
141 |
||
Поскольку с(Х, |
|
|
|
|
|
|
Щ, т. е- |
|
|
||
c(Q, P) + c(Q, R) + c(S, |
P) + c( S , Д )< |
|
|
|
|||||||
|
|
|
|
|
|
|
|
< c ( P , |
R)-\-c(Q , R)-\-c(S, R), |
||
получаем |
|
|
|
|
|
|
|
|
|
|
|
|
|
c(Q, |
P) + |
c(S, P ) ^ c ( P , |
R). |
(4) |
|||||
Аналогично из выражения с (У, |
У )^ с (Q, |
P\JR\JS) |
находим |
||||||||
|
|
с{Р, |
R) + c(P, S) ^c ( Q, |
Р), |
(5) |
||||||
а из выражения c(Y, Y ) ^ c (Р [J Q (J S, |
R) |
следует |
|
||||||||
|
|
с(Р, |
S) + |
c(Q, S ) ^ c ( S , |
R). |
(6 ) |
|||||
Складывая (3), (4), (5) и |
(6), |
получим 2с (S, Р)-\-2с(Р, S ) ^ . 0. |
|||||||||
Так как |
0, |
то |
|
|
|
|
|
|
|
|
|
|
|
|
c(S, |
Р) = |
с(Р, S) = 0. |
(7) |
|||||
Подставляя (7) |
в (3), (4), |
(5) и (6), имеем |
|
|
|||||||
|
|
|
|
c(S, |
R)<^c(Q, |
S), |
|
|
|||
|
|
|
|
c{Q, |
P ) < c ( P , |
R), |
|
|
|||
|
|
|
|
c(P, |
R ) < c ( Q , |
P), |
|
|
|||
|
|
|
|
c(Q, S ) ^ c ( S , |
R), |
|
|
||||
откуда следует |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c(S, |
R) = c(Q, |
S), |
|
(8 ) |
|||
|
|
|
|
c(Q, |
|
P) = c(P, |
R). |
|
(9) |
||
Из (7), (8 ) и (9) имеем |
|
|
|
|
|
|
|
|
|||
c(X, |
X) = c(Q, |
P) + c(Q, |
R) + c(S, |
R) = |
|
||||||
|
= c(<?, P) + c(Q, |
R) + c(Q, |
S) = c(X{] Y, |
A ffT ), |
|||||||
c(X, |
X) — c (Q, |
P) + c(Q, |
R) + c(S, |
R) = |
|
||||||
|
= c ( P , |
R) + c(Q, |
R) + c(S, |
R) = c ( X[ ) Y, |
Х Ц ? ) . , |
Так как существует много минимальных разрезов, возникает естественный вопрос: какой из минимальных разрезов получается в конструктивном доказательстве теоремы о максимальном потоке
и минимальном разрезе? Пусть |
(X*, X,) |
(£ = 1, |
т) — все |
||
минимальные |
разрезы, |
разделяющие N s и |
N t . Пусть |
(X, X) — |
|
минимальный |
разрез, |
полученный |
в конструктивном доказатель- |
||
<стве теоремы |
|
т |
|
|
|
8.1. Тогда Х = П X,-. |
|
|
|
142 |
|
ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК |
|
Чтобы |
доказать этот факт, покажем сначала, |
что разрез |
|
т |
т |
_ |
_ |
( П Xt, |
П Xi) является минимальным. Пусть (Х4, Х 4) и (Х2, Х2) — |
г = 1
любые два минимальных разреза. Тогда из теоремы 8.2 следует, что (Xi П Х2, X t f| Х 2) — тоже минимальный разрез. Пусть (Х3, Х 3) —еще один минимальный разрез. Снова используя теоре
му 8.2, мы получаем, |
что (X* f| Х2П Х 3, Х4 (~| Х 2П Х3) —тоже мини |
|
мальный разрез. Если |
этот процесс повторим т — 1 раз, то полу |
|
чим, что |
(Xj П х 2П • |
• • п Х т, Х 4 П х 2п • • • П Хт ) —минимальный |
разрез. |
заметим, что рекуррентное определение множества X |
|
Теперь |
||
не может |
быть использовано для того, чтобы пометить какой- |
нибудь узел из X, если величина потока в сети равна с(Х, X). Отсюда следует, что множество X не содержит в качестве собствен
ного подмножества ни одного из множеств Х 4, таких, что (X;, X, ) — минимальный разрез. В частности, X не может содержать в каче-
т
стве собственного подмножества и П -^г- Следовательно, учиты-
i —1
вая, что множество X является одним из множеств Х 4, получим
т
х = n Xt. а
г= 1
8.2.Метод расстановки пометок для нахождения максимального потока
Мы уже рассмотрели конструктивное доказательство теоремы о максимальном потоке и минимальном разрезе. Теперь остано вимся подробнее на алгоритме нахождения максимального потока. Как уже отмечалось в § 8.1, задача о максимальном потоке в сети , может быть сформулирована как задача линейного программиро-
\у вания. Однако метод расстановки пометок не является частным случаем симплекс-метода. В симплекс-методе происходит движе ние от одной вершины многогранника к другой, пока не будет достигнута оптимальная. Как станет ясно в дальнейшем, в методе расстановки пометок дело обстоит не так.
Метод расстановки пометок начинается с произвольного потока (в качестве начального можно взять нулевой поток). Затем пред принимается попытка получить поток с большей величиной. Вычисления заканчиваются, когда получен максимальный поток. Алгоритм заключается в систематическом поиске всех возможных путей из N s в N t, увеличивающих поток. Это осуществляется с помощью процедуры «расстановки пометок». Узлы получают специальные «пометки», указывающие направление, в котором
8.2. МЕТОД РАССТАНОВКИ ПОМЕТОК |
14S |
может быть увеличен некоторый дуговой поток. После того как найден некоторый путь, увеличивающий поток, определяют вели чину максимальной пропускной способности этого пути; далее поток увеличивают на эту величину, а все пометки на узлах сти рают. Затем начинается расстановка новых пометок узлов исходя из только что полученного потока.
Алгоритм состоит из двух шагов. Шаг 1 — это процесс, в ходе которого узлы получают пометки. Шаг 2 заключается в измене нии потока. Шаги 1 и 2 повторяются до тех пор, пока увеличение потока становится невозможным.
Ш а г 1 (процесс расстановки пометок). На шаге 1 каждый узел находится в одном из трех состояний: «помечен и просмотрен»,, «помечен и не просмотрен» или «не помечен». Вначале все узлы не помечены. Пометка произвольного узла N s всегда состоит из двух частей. Первая часть — индекс i узла N и который указы вает, что можно «послать» поток из N г в N j. Вторая часть помет ки — число, указывающее максимальную величину потока, кото рый можно «послать» из источника N s в N], не нарушая ограниче ний на пропускные способности дуг.
Прежде всего источник N s получает пометку [s+, е (s) = оо]„ Первая часть этой пометки означает, что можно послать поток из узла N g в этот же узел; символ оо означает, что величина потока не ограничена сверху. Теперь узел N s «помечен и не просмотрен», а все остальные узлы «не помечены».
Вообще выберем любой помеченный и непросмотренный узел N j. Пусть он имеет пометку В+, е (/)] или В“, s (/)]. Два узла будем называть соседними, если они соединены дугой. Из всех узлов, соседних с N j, выделим те узлы N k, которые не помечены и для
которых |
xjk < |
bjh. |
Припишем |
каждому |
узлу N k |
пометку |
[/+, е (Л)], |
где |
е (к) |
= min [е (/), |
bjh — xjk]. |
(Такие |
узлы N k |
теперь «помечены и не просмотрены».) После этого всем соседним
с N j узлам N к, которые не помечены и для которых xhj > |
0, при |
писываем пометку [/- , е (ft)], где е (к) = min [е (/), xhj] *). |
(Такие |
узлы N h теперь также «помечены и не просмотрены».) Теперь все узлы, соседние с N j, имеют пометки. Тогда узел N j считается поме ченным и просмотренным, и его можно больше не рассматривать на этом шаге. Может оказаться, что некоторые соседние с N j узлы помечены, а остальные не могут быть помечены (либо все соседние с А /узлы не могут быть помечены); в этих случаях узел N j также-
х) |
Д л я |
неориентированной дуги |
мы |
могли бы определить е ( к ) — |
= m in |
[е (;'), |
xhj + bjh). Это повысило |
бы |
пропускную способность п ути , |
увеличивающего поток. Е сли принять такую процедуру, то появление отри цательного дугового потока на шаге 2 (изменение потока) будет означать, что дуговой поток имеет направление, противоположное направлению пер воначального дугового потока.
144 ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК
считается помеченным и просмотренным. Знаки «+» и «—» в пер вой части пометок указывают, как должен быть изменен поток на шаге 2 .
Продолжим приписывать пометки узлам, которые являются соседними для помеченных и непросмотренных узлов, до тех пор, пока либо узел N t окажется помеченным, либо нельзя будет боль
ше пометить ни один узел и |
сток N t окажется непомеченным. |
||
Если |
N t не может быть помечен, |
то не существует пути из N s |
|
в N t, |
увеличивающего поток, |
и, |
следовательно, построенный |
поток максимален. Если же N t помечен, то на шаге 2 можно найти путь, увеличивающий поток.
III а г 2 (изменение потока). Предположим, что сток N t имеет пометку [Ат, е (£)]. Тогда заменим xht на xht + е (t). Если же он имеет пометку [А;- , е (/)], то xtk заменим на xth — е (t). Затем в любом из этих случаев переходим к узлу N k. Вообще если узел N h имеет пометку [у'+, е (А;)], то xjh заменим на Xjk + е (t) и перей дем к узлу N у, если узел N h имеет пометку [/“, е (А;)],, то xhj заме
ним на xkj — г (t) и перейдем к Nj. Продолжим эти действия, пока не достигнем источника N s. После этого сотрем все старые пометки узлов и вновь перейдем к шагу 1 .
Чтобы обеспечить конечность процесса, будем предполагать, что дуговые пропускные способности btj целочисленны. (Ниже будет рассмотрена модификация метода, обеспечивающая конеч ность процесса при любых неотрицательных Ъц.)
Когда алгоритм заканчивается на шаге 1, то получается мно
жество X |
помеченных узлов и |
множество дуг А ц с N , |
£ X , N j £ |
£ X , на |
которых xtj = btj (и |
нет дуг А ц , таких, что |
Хц > 0 ). |
Отсюда следует, что (X , X) — минимальный разрез, поток через который равен его пропускной способности. Таким образом, получен максимальный поток. G другой стороны, каждый раз величина потока увеличивается по крайней мере на единицу (предполагаем, что пропускные способности дуг и исходный поток являются целочисленными). Поскольку величина максимального потока ограничена сверху пропускной способностью минимально го разреза (целым числом), то алгоритм расстановки пометок конечен х).
Рассмотрим сеть, изображенную на рис. 8.4. Каждой ориенти рованной дуге поставлено в соответствие 2 числа. Первое из них —.
1 1А Если вычисления начались с целочисленного потока, то все после дующие потоки (в частности, максимальный), получаемые при работе рас смотренного алгоритма, будут целочисленными. Этот простой, но важный факт известен под названием т е о р е м ы о ц е л о ч и с л е н н о с т и : если пропускные способности дуг b t j целочисленны, то сущ ествует максимальный поток, который целочислен.— П р и м , п ерев .