1. Задача о максимальном потоке в транспортной сети.

Определение 1. Транспортной сетью называется конечный граф img001, состоящий из (img002) вершин img003, img004,…, img005 и из дуг (img006,img007), соединяющих некоторые пары этих вершин, причем каждой дуге поставлено в соответствие число img008 ³ 0, называемое пропускной способностью дуги (img009,img010).

Вершина img011 называется входом сети, а img012 – выходом транспортной сети.

Будем считать, что граф симметрический, т.е. если в него входит дуга (img013,img014), то входит и дуга (img015,img016).

img017 – определяет количество вещества (машин, и т.п.), которое может протекать по дуге в единицу времени.

Например:

img018img019 = 0, если img020 иimg021 не соединены дугой.

По путям m(img022, img023, img024,…, img025, img026), составленным из дуг (img027,img028), (img029,img030), …, (img031,img032) сети направляется транспорт из img033 в img034.

Потоком img035 по дуге (img036,img037) (img038, img039) называется количество вещества, проходящее через эту дугу в единицу времени.

Потоком по сети или просто потоком будем называть совокупность {img040} потоков по всем дугам сети.

Потоки должны удовлетворять следующим ограничениям:

  1. img041 (img042, img043),

  2. img044 (img045), что означает: количество вещества, притекающее в вершину сети равно количеству вещества, вытекающего из него (кроме img046 и img047).

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

Из (2) видно, что общее количество вещества, вытекающего из img048, img049, совпадает с общим количеством вещества, притекающего в img050, img051, т.е.

3. img052.  Линейная форма img053 называется потоком по сети.


Задача о максимальном потоке в транспортной сети заключается в отыскании такого решения img054 (img055) системы (1 – 2) (т.е. такого допустимого потока), который максимизирует img056.

Это решение {img057} называется максимальным потоком сети.

Рассмотрим такой простейший пример:


img058Найти максимальный поток из img059 в img060. Толстые дуги насы­ще­ны, т.е.  img061 = img062, пол­ный поток  img063, а максимальный поток равен 6. Разобьем множество всех вершин img064 на два подмножества img065 и img066 так, что img067 и img068. Сечением (img069,img070) сети img071 назо­вем совокупность всех дуг (img072,img073), концы которых принадлежат разным подмножествам.

Каждому сечению поставим в соответствие неотрицательное число img074 – пропускную способность сечения, равную сумме img075 всех дуг сечения, начинающихся в U и кончающихся в V, т.е.

img076

Любой путь из img077 в img078 обязательно содержит хоть одну дугу сечения (img079,img080), которая начинается в U и заканчивается в V. Ясно, что пропускная способность пути не превышает пропускной способности каждой его дуги. Поэтому величина любого потока из img081 в img082, которая является суммарной величиной пропускной способности всех путей из img083 в img084, не может превысить пропускной способности любого сечения (img085,img086), т.е. всегда img087.

Теорема Форда-Фалкерсона утверждает: Для заданной транспортной сети наибольшая величина потока равна наименьшей пропускной способности сечения, т.е.

img088

по всем возможным сечениям. Т.е. если удастся построить такой поток {img089}, что img090, то этот поток будет максимальным, а сечение img091  – обладать минимальной пропускной способностью.

Естественно, что каждую транспортную сеть стремятся использовать оптимально, т.е. организовать перевозки по транспортным путям таким образом, чтобы поток перевозимых грузов был максимальным.


Алгоритм построения максимального потока в транспортной сети


Предварительный шаг:

Условия 1. записываются в виде следующей таблицы:

Если img092, img093, то в клетке img094 ставим 0,

Если же img095, то клетки img096 и img097 не заполняем.



Начальная таблица:  (4)



img098 img099 img100 img101
img102

img103
img104
img105







img106 img107


img108
img109







img110 img111
img112


img113







img114 img115
img116
img117


Общий шаг: (из трех действий)

  1. Отыскание по таблице нового пути из img118 в img119. Сначала отмечаем img120–й столбец *. Затем отыскиваем в строке img121 все положительные img122 и содержащие их столбцы отмечаем сверху числом 0 (номером вершины img123)

Т.е. выделили все дуги (img124,img125), которые могут быть первыми дугами различных путей из img126 в img127.

Просматриваем затем строки затем строки, имеющие те же номера, что и отмеченные столбцы.

В каждой такой строке (например img128) отыскиваем все неотрицательные img129, расположенные в неотмеченных столбцах, и отмечаем эти столбцы номером рассматриваемой строки (например img130).

Этим самым будут выделены дуги (img131,img132) с положительной пропускной способностью, которые могут служить вторыми дугами различных путей из img133 в img134, т.е. уже выделены (img135,img136) и (img137,img138).

Продолжаем аналогичный просмотр строк с номерами отмеченных столбцов. Процесс оканчивается, если:

а) Отмечен img139–й столбец, т.е. удалось выделить дугу (img140, img141) с img142 > 0, которая служит последней дугой некоторого пути из img143 в img144.

б) Просмотрены все строки и нельзя отметить новых столбцов (т.е. в неотмеченных столбцах нет img145 > 0), это означает отсутствие пути из img146 в img147, все дуги которого обладают положительными пропускными способностями (Алгоритм закончен). В случае а) искомый новый путь из img148 в img149 отыскиваем следующим образом. Начиная от img150. Пусть столбец img151 был отмечен номером k, т.е. предшествующая вершина в пути, соединяющем img152 с img153, – img154. (При просмотре строки img155 был отмечен столбец img156). Число img157 > 0 помечаем знаком “–“ (img158). Число img159, расположенное симметрично к диагонали, помечаем знаком “+” (img160). Раз рассматривалась img161–я строка, значит перед этим был отмечен img162 столбец номером img163 (например). По столбцу img164 двигаемся вверх до img165 –ой строки. img166 отмечаем “–“ (img167), а img168 знаком “+”. Этот процесс продолжаем до тех пор, пока не придем к img169 – ой строке и не отметим элемент этой строки и симметричный элемент.

  1. Определяем пропускную способность найденного пути img170

  2. Вычисляем новые пропускные способности дуг найденного пути и симметричных с ними

img171,  img172 ,

img173,  img174.

В результате получаем новую таблицу, с которой повторяем эти 3 шага.

q представляет собой  пропускную способность найденного пути. Если дуга (img175,img176) входила в предыдущий путь, то по ней уже пропущено q вещества. Если (img177,img178) входит в один путь, то естественно, что в этом пути по ней нельзя пропустить больше чем img179 – q вещества в единицу времени.

После действия 3 получаем таблицу для сети img180 с новыми пропускными способностями. Все старые отметки убираются и возвращаемся к действию 1 общего шага, который применяем до тех пор, пока не придем к окончательной таблице, в которой нет ни одного пути из img181 в img182.

По этой таблице легко определить любую дугу, по которой протекает поток. Пропускная способность дуг, по которым протекает поток, уменьшилась по сравнению с img183 на величину img184, а пропускная способность противоположно направленной (симметричной) дуги увеличилась на img185, что свидетельствует об отсутствии потока по ней.

Обозначим через img186 множество вершин сети img187, которые достижимы из img188 по некоторому пути в последней таблице, а множество остальных вершин через img189.

Тогда увидим, что все дуги сечения (img190,img191), направленные из img192 в img193, загружены полностью до пропускных способностей (т.е. img194 для (img195,img196), что img197, img198, img199), а дуги (img200,img201) противоположного направления, идущие из img202 в img203 в построенном потоке не используются (т.е. img204=0, img205,img206), так что величина потока равна:

img207

т.е. построенный поток максимален, а (img208,img209) – сечение с минимальной пропускной способностью.

Для определения полученного максимального потока img210,  img211,  вычитаем из всех элементов начальной таблицы (4) соответствующие элементы таблицы, полученной на последнем шаге. Положительные значения найденных разностей дают величины потоков img212 по дугам (img213,img214), а величины потока в сети вычисляются по следующей формуле:

img215.


Hosted by uCoz