Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ДГИО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.33 Mб
Скачать

Лекция 6 Многополюсные максимальные потоки

Существует большой ряд технических и экономических за­дач, в которых рассматриваемые системы могут быть прибли­женно описаны в виде детерминированных многополюсных пото­ковых моделей. Примерами таких систем являются: 1) транс­портные сети, где автострады изображаются дугами, пропускные способности которых соответствуют максимально допусти­мой интенсивности движения; 2) телефонные сети, где телефонные линии представляются дугами, а пропускные способно­сти соответствуют максимальному числу вызовов, которые мо­гут обслуживаться в каждый момент времени; 3) электроэнер­гетические распределительные системы, где линии электропередачи представлены дугами, а пропускные способности соответ­ствуют максимальному объему электроэнергии, который может передаваться по линиям в единицу времени. Во всех этих за­дачах предполагается существование нескольких источников не­которого продукта. Предполагается также, что величина про­дукта, который может транспортироваться к нескольким сто­кам, ограничена только пропускными способностями распреде­лительных звеньев.

Рассмотрим неориентированную сеть с ограниченной про­пускной способностью, т. е. сеть, в которой потоки по дугам не должны превосходить пропускных способностей соответствую­щих дуг. Рассмотрим задачу на­хождения максимального потока для всех пар вершин в неориен­тированной сети. Данную задачу можно рассматри­вать как обобщение задачи с одним источником и одним сто­ком, и для ее решения можно воспользоваться методом Форда-Фалкерсона, применяя его к каждой паре вершин. Таких задач равно п (п—1)/2, где п — число вершин в сети Более эффективный метод был предложен Гомори и Ху [1]. На лекции используются основные резуль­таты, полученные в работе [1], и дается обоснование алго­ритма. При ра­боте алгоритма Гомори — Ху максимальный поток определяет­ся только п—1 раз.

В дальнейшем будем пользоваться следующим результатом.

Утверждение 1. Для того, чтобы остов взвешенного графа с весовой функцией c был максимальным, н. и д., чтобы для каждого ребра (i,j), не принадлежащего остову, выполнялось условие:

, (1)

где - цепь в остове, соединяющая i и j.

Алгоритм гомори—ху

Пусть G=(X, U)—неориентированный граф, где X — мно­жество вершин, U — множество дуг. Пусть с(i,j) — пропускная спо­собность дуги (i, j) из множества U, и пусть с(i,j) = с(j,i). Предполо­жим также, что множество вершин задается в виде X={1, 2, ... ..., п}. При описании алгоритма будут использоваться следую­щие обозначения:

— величина максимального потока между вершинами i и j;

— минимальный разрез, отделяющий i от j ;

— пропускная способность минимального разреза, отделяющего i от j.

Введем функцию v(i,j):= , определенную на множестве ребер. Таким образом, функция v является симметрической: v(i, j)=v(j, i). Будем называть v функцией величины потока на G, или, короче, потоковой функцией. Возникает вопрос, при каких условиях, симметрическая функция v может быть реализована в качестве потоковой функции некоторой сети

Лемма 1. Если v — потоковая функция в некоторой сети, то для любых троек вершин i,j,k

. (2)

Замечание. Из (2) следует, что из 3-х чисел два должны быть равны, а одно не меньше равных. Полагая v(i,i) = ∞, исключаем требование, чтобы вершины были различны.

Доказательство. Согласно теореме о максимальном потоке и минимальном разрезе

Тогда либо вершина и , либо вершина и . И условие (2) выполнено. 

Из (2) по индукции следует , что для любого подмножества вершин выполнено:

(3)

Л е м м а 2. Если неотрицательная симметрическая функция v удовлетворяет условию (2) для всех i,j,k, то существует неориентированная сеть, имеющая потоковую функцию V.

Доказательство. Поставив каждой неупорядоченной паре (i,j) в соответствие число v (i, j), мы получим неориентированный граф, каждое из ребер которого имеет «длину» v (i, j). Пусть тогда Т — некоторое макси-

мальное дерево-остов этого графа. Из (1) и (3) следует, что если цепь в дереве T , то

Поэтому если теперь каждому ребру в дереве приписать пропускную способность с(i, j)= v (i, j), а каждое ребро вне дерева удалить из сети, то сеть Т будет иметь потоковую функцию v. Таким образом, если функция v реализуема, то она реализуема некоторым деревом. , и поэтому она может принимать не более n—1 различных значений, где т — число вершин данного графа.

Рассуждения этого пункта мы можем резюмировать теоремой.

Теорем. Неотрицательная симметрическая функция v реализуема в качестве потоковой функции некоторой неориентированной сети в том и только в том случае, когда она удовлетворяет условию (1). Если функция V реализуема, то она реализуема деревом.

Две сети с n вершинами мы будем называть потоково-эквивалентными, или просто эквивалентными, если они

имеют одну и ту же потоковую функцию v. Таким образом, каждая сеть эквивалентна некоторому дереву.

Если некоторую вершину s рассматривать как источник, а дру­гую вершину t — как сток, то, согласно теореме о максимальном потоке и минимальном разрезе, . Если затем в качестве источника и стока выбирается другая пара вершин (i и j соответственно), удовлетворяющих условию

или ,

то в алгоритме Гомори — Ху при определении величины ис­пользуется решение задачи о максимальном потоке, найденное на предыдущем шаге. А именно, если , то множество вершин объединяется в одну вершину w (склеивание, сжатие). Строится вспомогательный (w-сжатый) граф , где , . Пропускные способности дуг вида (i,w) вычисляются по формуле:

При этом величина максимального потока из i в j будет одной и той же для исходной и для конденсированной сетей.

Лемма 3. Величина максимального потока v(i,j) между двумя вершинами i, j сжатой сети равна величине максимального потока v(i, j) в первоначальной сети G=(X, U).

Доказательство. Пусть минимальный разрез, отделяющий i и j в первоначальной сети G=(X, U).

Определим множества

Можем считать, что i, s  X , j 

Случай 1. .

Т.к. разрез также отделяет i,j, то

(4)

Разрез также отделяет s,t, то

(5)

Складывая (4) и (5), видим, что , и по-

этому . Из (4) и (5) тогда_ следует, что

Значит, также есть минимальный разрез, отделяющдий i и j

Случай 2. аналогично.

Итак, всегда существует минимальный разрез, отделяющий i и j , такой, что множество узлов лежит по одну сторону от этого разреза. Следовательно, сжатие множества в одну вершину не влияет на величину максимального потока из i в j .

Основная идея алгоритма состоит в итеративном построении максимального остовного дерева, ветви которого соответствуют разрезам, а параметры ветвей — величинам разрезов.

ОПИШЕМ АЛГОРИТМ.

Произвольным образом выберем два вершины i,j и решим задачу о максимальном потоке между ними. При этом решении будет выделен минимальный разрез который мы символически будем изображать двумя вершинами Y и , соединенными ребром пропускной способности . В одном узле перечисляются все вершины множества Y, а в другом — множества . Затем выберем две вершины , скажем в Y, и решим задачу о максимальном потоке между этими вершинами в -сжатой сети. Получающийся в результате минимальный разрез имеет пропускную способность V2 и изображается ребром этой пропускной способности, соединяющим две части, на которые разбивается множество Y этим разрезом, скажем Y1 и Y2. Если узел принадлежит к той же части разреза, что и Y1 , то прикрепляем его к Y1, а в противном случае к Y2. Этот процесс продолжаем дальше. На каждом этапе построения из диаграммы дерева на этом этапе выбираем некоторое множество Y, состоящее более чем из одной вершины. В этом дереве имеется некоторое количество ребер, инцидентных Y. Все врешины (множества) , которые можно достичь из Y , для следующей задачи о максимальном потоке сожмем в единственный узел. В получившейся сети решим задачу о максимальном потоке между какими-нибудь двумя вершинами множества Y. Найденным при этом решении минимальным разрезом множество Y разобьется на Y1 и Y2. Он (разрез) изображается на новом дереве ребром, соединяющим Y1 и Y2 и имеющим пропускную способность, равную пропускной способности разреза. Остальные вершины старой сети прикрепляются к У1 если они лежат в части разреза, содержащей Y1 и к Y2 в противном случае.

Для формального описания алгоритма используем следующие условия:

  1. Множества Y ( ), если они не одноэлементные, будем помещать в стек, последовательно их нумеруя, начиная с n+1.

  2. Стек представляет собой последовательность записей <numS, S>, где numS – номер множества, S –множество вершин.

  3. w-сжатый граф будем задавать матрицей пропускных способностей . Множество X’=S{w}, U’={(i,j)U| i,jS}  {(i,j)U| iS & jS}

  1. Дерево задавать списком ребер и их пропускных способностей

  2. Пусть для пары <numS, S> в графе построен минимальный разрез пропускной способности v. Если , то вычислить , найти номер k:=num( ), заменить в дереве вершину numS на k, пополнить список ребер дерева новым ребром <k, num( ), v>. Если , то вычислить , найти номер k:=num( ), заменить в дереве вершину numS на k, пополнить список ребер дерева новым ребром <k, num( ), v>.

  3. Функция num(S) возвращает номер вершины, если |S| =1, либо номер новой вершины-множество (счетчик) в противном случае.

Докажем, что построенное таким путем дерево T эквивалентно первоначальной сети G.

Л е м м а 4. Величина максимального потока между любыми двумя вершинами первоначальной сети G равна

(6)

где цепь в последнем дереве T.

Доказательство. Любое ребро u дерева T соответствует (согласно алгоритму) разрезу , где множества вершин двух компонент связности графа T-u. Этот разрез отделяет вершины одного множества от другого. Итак, вершины отделяются всеми разрезами, соответствующими дугам . Т.е. справедливо:

. (7)

Обратно. Покажем, что если на любом шаге построения узлы соединяет в дереве ребро пропускной способ-

ности v, то существуют такие вершины , что v(i,j)=v. На первом шаге это, конечно, верно. Докажем, что это свойство сохраняется и дальше.

Пусть на некоторой итерации будет разбито . Перед разбиением, по индукцион­ному предположению существуют вершины , что v(i,j)=v. Пусть

Тогда множество разобьется на , где

Если j , то двумя искомыми узлами будут i, j и v(i,j)=v . Если j , то рассмотрим вершины i,s. Эти вершины находятся по одну сторону от минимального (s,t)-разреза пропускной способности v’.Следовательно, сжатие множества не влияет на v(s,i). Вместо сжатия можно все пропускные способности в приравнять ∞. Имеем в такой сети новые величины максимальных потоков:

Из (2) имеем

Но , т.к. v минимальная пропускная способность (i,j)-разреза . Поэтому . Так как i и s отделяет разрез пропускной способности v, то , что и требовалось доказать.

Таким образом, пропускные способности дуг в последнем дереве Т фактически представляют величины

максимальных потоков между смежными узлами дерева Т. Из (3) следует, что

(8)

для любого подмножества вершин , соединяющего в последнем дереве. Это вместе с (7) устанавливает лемму и доказывает, что наше построение приводит к эквивалентному дереву.

ПРИМЕР ЗАДАЧИ О МНОГОПОЛЮСНОМ МАКСИМАЛЬНОМ ПОТОКЕ

Рассмотрим сеть, изображенную на рис. 2.57. Числа, при­писанные дугам, соответствуют их пропускным способностям. Требуется для каждой пары вершин сети определить величину максимального потока между ними.

Рис. 2.57. Сеть в задаче о многополюсном максимальном потоке.

Данная задача решается за 6 итераций алгоритма Гомори—Ху. Если процедура расстановки пометок применялась бы к каждой паре узлов, то потребовалось бы решить 21 задачу о максимальном потоке.

Итерация 1. Рассмотрим узлы s = 2 и t = 5. Величина макси­мального потока равна 13. Поэтому v(2,5)=v(5,2)= 13. По разрезу с минимальной пропускной способностью мы определяем, что построение дерева разрезов можно начать с ветви, соединяющей узел 5 и конденсированный узел, состоящий из вершин 1, 2, 3 4, 6, 7 (рис. 2.58а). Вес данной ветви равен 13.

Итерация 2. Рассмотрим узлы s=l и t = 2. Величина макси­мального потока равна 19. Поэтому v12 = v21 =19. По минималь­ному разрезу мы определяем, что узлы 2 и 5 лежат по одну его сторону, а все остальные узлы сети — по другую сторону этого разреза (рис. 2.586). Вес ветви, соединяющей узел 2 и конденсированный узел, состоящий из вершин 1, 3, 4, 6 и 7, равен 13.

1,2,3,4,6,7

5

13

{

. Рис. 2.58а. Задача о максимальном потоке: первая итерация.

5

2

13

19

1,3,4,6,7

Рис 2.586. Вторая итерация.

Итерация 3. Рассмотрим узлы 6 и 7. Величина максимального потока равна 21. Поэтому v67 = v76 = 21. По минимальному разрезу мы определяем, что узел 7 в дереве разрезов соединяется с конденсированным узлом, состоящим из вершин 1, 3, 4, 6, ребром, вес которого равен 21. Кроме того, узлы 2 и 5 и конденсированный узел (1, 3, 4, 6) расположены по одну сторону мини мального разреза, а узел 7 — по другую сторону этого разреза (рис. 2.58в).

Итерация 4. Рассмотрим узлы s = 4 и t = 6. Величина максимального потока равна 25. Поэтому v46 = v64 = 25. По минимальному разрезу видно, что узлы 6 и 7 расположены в той же части дерева разрезов, что и узел (1, 3, 4) (рис. 2.58г).

Рис. 2.58в. Третья итерация.

Рис. 2.58г. Четвертая итерация

Рис. 2.58Д. Пятая итерация

Рис. 2.58е. Шестая итерация.

Итерация 5. Рассмотрим узлы 5=1 и / = 4. Величина макси­мального потока равна 24. Поэтому 1;14 = а41=24. Определяя минимальный разрез, удаляем узел 1 из узла (1, 3, 4) и рас­полагаем его по ту сторону узла (3, 4), где не находится ни один из оставшихся вершин (рис. 2.58д). Вес соответствующей дуги в дереве разрезов равен 24.

Итерация 6. Рассмотрим узлы s = 3 и /=4. Величина макси­мального потока равна 22. Поэтому Уз4 = ^4з = 22. Найдя мини­мальный разрез, удаляем узел 3 из узла (3, 4) и соединяем его с узлом 4 дугой дерева разрезов, вес которой равен 22. Те­перь дерево разрезов стало полным, т. е. состоит из шести дуг. Поэтому процедура заканчивается (рис. 2.58е).