Максимальный поток в сети пример решения. Алгоритм нахождения максимального потока


При планировании рационального распределения продукции в сети распределения необходимо согласовывать пропускную способность каналов с потребностями клиентов и с мощностью производственного предприятия. Данный класс задач решается методом нахождения максимального потока.

Рассмотрим сеть распределения (рис. 4.21), в которой выделены пункты 0 (вход, например, склад готовой продукции производителя) и п (выход, распределительные центры, склады оптовых и розничных организаций, потребитель) и каждой дуге (отрезку), связывающей пункты i и j, сопоставлено число dij > 0, называемое пропускной способностью дуги. Величина пропускной способности характеризует максимальное допустимое количество материального потока, которое может проходить по соответствующей дуге в единицу времени.

Рис. 4.21.

Количество продукции, проходящее по дуге от i до j , будем называть потоком по дуге (i ,j ) и обозначать через . Очевидно, что

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

Из естественного требования равенства потоков на входе и на выходе имеем

Величину Z назовем величиной потока в сети и поставим задачу максимизации Z при соблюдении обозначенных выше условий.

Поиск максимального потока сводится к поиску пропускной способности минимального разреза.

Рассмотрим универсальный алгоритм поиска в матричной форме.

Начальный этап алгоритма состоит в построении матрицы D 0, в которую заносятся значения пропускных способностей (для неориентированной дуги берем симметричные значения элементов матрицы ).

Основные шаги алгоритма состоят в поиске некоторого пути и коррекции потока на этом пути.

При поиске пути используем процесс отмечаний. Метим символом * нулевые строку и столбец матрицы (вход сети). В 0-й строке отыскиваем , метим соответствующие столбцы индексами

и переносим метки столбцов на строки. Затем берем ί-ю отмеченную строку, ищем в ней непомеченный столбец с , которому сопоставляем метки-индексы

Метки столбцов переносим на строки, и этот процесс продолжаем до тех пор, пока не будет отмечен п-й столбец.

Затем "обратным ходом" по индексам выясняем путь, приведший к η-й вершине, уменьшаем пропускные способности дуг пути (элементы матрицы) на V n и увеличиваем симметричные элементы на эту же величину.

Такая процедура продолжается до тех пор, пока отмечание n -й вершины не станет невозможным.

Максимальный поток может быть найден вычитанием из исходной матрицы D 0, получаемой после приведенной выше корректуры матрицы пропускных способностей:

Пример 4.4

Производство размещено в Москве. Для распределения продукции предприятие привлекает посредников, которые работают с предприятием через распределительные центры различных уровней. В европейской части России работает оптовое предприятие 1, обслуживаемое центральным распределительным центром. Оптовое предприятие 2 работает в ближайшем зарубежье (Украина, Белоруссия) и обслуживается региональным распределительным центром. Есть у предприятия на местном рынке (Москва и Московская область) свои клиенты – ритейлеры, которые получают продукцию с городского распределительного центра. Запасы регионального и городского распределительных центров пополняются с центрального распределительного центра.

Выделим фрагмент распределительной сети:

  • склад готовой продукции производственного предприятия;
  • центральный распределительный центр;
  • региональный распределительный центр;
  • городской распределительный центр;
  • два оптовых предприятия;
  • розничная точка, принадлежащая компании;
  • потребители.

Рис. 4.22.

Каждое звено сети распределения обозначим цифрой, а над дугами проставим пропускную способность. Пропускная способность в зависимости от вида звена может быть выражена через объем производственной мощности, плановую потребность (спрос) потребителей и емкость рынка.

Граф сети распределения продукции представлен на рис. 4.23. Построим матрицу D 0, в которую занесем значения пропускных способностей звеньев распределительной сети (рис. 4.24).

Рис. 4.23.

Рис. 4.24.

Из нулевой строки отметим вершины (строки-столбцы) 1, 2 и 3 индексами μ = 0 и V, равными 30,10 и 10.

Из помеченной строки 1 отметим вершины 4 и 5 индексами μ = 1 и V4 = min (30,15) = 15, V5 = min (30,10) = 10.

Из строки 3 отметим вершину 6 и, наконец, из строки 4 – вершину 7 (рис. 4.25).

Рис. 4.25.

Обратным ходом по μ обнаруживаем путь: к вершине 7 от 4, к вершине 4 от 1, к вершине 1 от 0; корректируем элементы D 0 на величину потока V7 = 15.

Очередной шаг дает путь с потоком 5 (рис. 4.26).

Рис. 4.26.

Последующий шаг дает результат, представленный на рис. 4.27.

Рис. 4.27.

Дальнейшее отмечание невозможно. Отсюда получаем матрицу максимального потока (рис. 4.28).

Рис. 4.28.

В результате применения алгоритма нахождения максимального потока в сети получены результаты, представленные на рис. 4.29. Пары цифр в скобках, показанные на дугах графа, означают максимальную пропускную способность дуги и рекомендуемый объем поставки товаров в сеть.

Транспортная задача
Может возникать в физике, экономике и т.д.
На отдельные компоненты транспортной сети
(сеть железнодорожных, автомобильных и т.д.
путей; сеть трубопроводов и т.д.) наложены
ограничения – их максимально допустимая
нагрузка.
Необходимо определить максимально
возможное количество пассажиров, товара,
продукта и т.д., которое можно провезти по этой
сети и каким образом.
Мы построим графовую дискретную модель
этой транспортной задачи и решим ее в этой
модели.

Математик Джордж Бернард Данциг, с 1941 года
работая в отделе статистического управления Военновоздушных сил США в Вашингтоне, впервые решил
задачу о максимальном потоке в ходе подготовки
воздушного моста во время блокады Западного Берлина.
В 1951 году Джордж Данциг впервые сформулировал
задачу в общем виде. В 1955 году, Лестер Форд и
Делберт Фалкерсон впервые построили алгоритм,
специально предназначенный для решения этой задачи.
Их алгоритм получил название алгоритм ФордаФалкерсона.
В 2010 году исследователи Джонатан Кёлнер и
Александер Мондры из МТИ вместе со своими
коллегами Дэниелем Спилманом из Йельского
университета и Шень-Хуа Тенем из ЮжноКалифорнийского университета продемонстрировали
очередное улучшение алгоритма.

Дан ориентированный граф
(транспортная сеть) G=(V, E), вершина
графа s (источник) и вершина t (сток).
Каждой дуге (i, j) приписана некоторая
пропускная способность с(i,j) 0 (без
потери общности считаем её
целочисленной величиной),
определяющая максимальное значение
потока, который может протекать по
данной дуге.

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

2. Сохранение потока
Для любой вершины q V,
выполняется равенство
q s
и
q t
f (i, q) f (q, j)
i V
(i , q) E
j V
(q , j) E
Т. е. сумма потока, заходящего в q, равна
сумме потока, выходящего из q (поток без
потерь и накоплений)

Требуется определить значение
максимального потока, который
можно пропустить от источника s к
стоку t, и его распределение по дугам.

Пример
У компании Lycky Puck в Ванкувере есть фабрика
(источник s), производящая хоккейные шайбы, а в
Виннипеге – склад (сток t), где эти шайбы хранятся.
Компания арендует места на грузовиках других фирм
для доставки шайб с фабрики на склад. Поскольку
грузовики ездят по определенным маршрутам (ребрам)
между городами (вершинами) и имеют ограниченную
грузоподъемность, компания Lycky Puck может
перевозить не более c(u,v) ящиков в день между каждой
парой городов u и v. Компания Lycky Puck не может
повлиять на маршруты и пропускную способность. Ее
задача – определить, какое наибольшее количество
ящиков в день можно отгружать, и затем производить
именно такое количество, поскольку не имеет смысла
производить шайб больше, чем можно отправить на
склад.

Методы решения задачи
Линейное программирование
Представить задачу о максимальном потоке как задачу
линейного программирования. Переменными являются
потоки по рёбрам, а ограничениями - сохранение потока
и ограничение пропускной способности.
Алгоритм Форда-Фалкерсона
Найти любой увеличивающий путь. Увеличить поток по
всем его рёбрам на минимальную из их остаточных
пропускных способностей. Повторять, пока
увеличивающий путь есть. Алгоритм работает только
для целых пропускных способностей.

10.

Пример 1
Дадим формулировку задачи о максимальном
потоке в терминах линейного программирования.
Пусть ХKM - объем перевозок из пункта К в пункт М.
К = 0,1,2,3, М = 1,2,3,4, причем перевозки возможны
лишь в пункт с большим номером. Значит, всего
имеется 9 переменных ХKM, а именно, Х01 , Х02 , Х03 , Х12
, Х13 , Х14 , Х23 , Х24 , Х34 .
s=0
t=4

11.

Задача линейного программирования,
нацеленная на максимизацию потока, имеет вид:
F → max ,
Х01 +Х02 +Х03 =F
-Х01 +Х12 +Х13 +Х14 = 0
-Х02 -Х12 +Х23 +Х24 = 0
-Х03 -Х13 -Х23 +Х34 = 0
-Х14 -Х24 -Х34 = - F
Х01 ≤ 2
Х02 ≤ 3
Х03 ≤ 1
Х12 ≤ 4
Х13 ≤ 1
Х14 ≤ 3
Х23 ≤ 1
Х24 ≤ 2
Х34 ≤ 2
ХКМ ≥ 0 , К, М = 0, 1, 2, 3, 4
F≥0.

12.

Разрезом
называют множество дуг,
удаление которых из сети приводит к
«разрыву» всех путей, ведущих из s в t.
Пропускная способность разреза – это
суммарная пропускная способность дуг, его
составляющих.
!!! Найти разрезы в примере 1

13.

Теорема Л. Форда и Д. Фалкерсона:
Величина каждого потока из s в t не
превосходит
пропускной
способности
минимального разреза, разделяющего s и t,
причем поток, достигающий этого значения,
существует.
(Величина
максимального
потока
в
транспортной
сети
равна
величине
минимального разреза в ней)
!!! Найти минимальный разрез в примере 1

14.

С алгоритмической точки зрения эта
теорема малопродуктивна.
Генерация всех подмножеств дуг и
проверка,
является
ли
очередное
подмножество разрезом – «лобовое решение»,
приводит к высокой сложности алгоритма.
Кроме того, данный факт не помогает
найти способ распределения максимального
потока по дугам.

15.

Алгоритм Форда-Фалкерсона
«Техника меток» Л. Форда и Д. Фалкерсона
заключается в последовательном
(итерационном, поиском в ширину) построении
максимального потока путем поиска на каждом
шаге увеличивающей цепи, то есть пути, по
которому можно увеличить поток.
При этом узлы (вершины графа)
специальным образом помечаются. Отсюда и
возник термин «метка».

16.

Алгоритм Форда-Фалкерсона
Что представляет из себя метка
вершины?
первая цифра в метке – это номер
вершины, из которой идет поток в
данную вершину;
вторая цифра в метке – численное
значение потока, который можно
передать в данную вершину.

17.

Алгоритм Форда-Фалкерсона
На каждом шаге алгоритма вершины сети
могут находиться в одном из трех состояний:
вершина не имеет метки;
вершине присвоена метка, и она не
просмотрена, т. е. не все смежные с ней
вершины обработаны;
вершине присвоена метка, и она
просмотрена.

18.

Алгоритм Форда-Фалкерсона
Как только вершина-сток становится
помеченной, это говорит о том, что
очередная увеличивающая поток цепочка
найдена, итоговый суммарный поток
необходимо увеличить на величину потока
найденной цепочки, и перейти к
следующему шагу алгоритма.

19.

Алгоритм Форда-Фалкерсона
Дуга e=(u, v) сети является допустимой
дугой из u в v относительно потока f, если
e=(u, v) и f(e) прямые);
e=(v, u) и f(e)>0 (дуги второго типа,
обратные).
Второе условие говорит о том, что
допустимыми являются и дуги, входящие в
вершину u, по которым «уже пропущен
ненулевой поток». Крайний случай: если матрица вся одного цвета - ответ 0.
Добавим фиктивные исток и сток. От истока ко всем белым вершинам проведем ребра, весом в B (цена перекраски в черный). От черных вершин ко стоку проведем ребра, весом в W (цена перекраски в белый). И между всеми соседними вершинами (будь они одного или разных цветов) - ставим ребро весом в G (серая линия). Величина максимального потока будет ответом на задачу.
Источник: Всеукраинская школьная олимпиада по информатике, 2007, День 1
  • Задача с ограничением на вершины. Пусть надо найти величину максимального потока и на вершины наложено ограничение, сколько они могут пропустить.
    Решение
    Все, что нам надо - это разделить каждую вершину на две, и между ними поставить ребро, весом в ограничение пропускной способности данной вершины
  • Минимальный разрез. Дан граф. Сколько вершин надо удалить, что бы не существовало пути из A в B?
    Решение
    В классической задаче о минимальном разрезе удалять нужно ребра. Не проблема! Разобьем вершины на 2, и поставим между ними ребро, весом в 1. Тогда ответ к задаче - нахождение минимального разреза в графе (что и есть максимальным потоком).
    Источник: Харьковская зимняя школа по программированию, 2009, День 3
  • Сочинитель стихов. Имеется детерминированный конечный автомат с одним начальным состоянием A и одним конечным B. Каждый переход задается тройкой чисел (i, j, k), переход из состояния i в состояние j по ребру k.
    После перехода по автомату из i в j по ребру k, стираются все переходы из i по ребру k, а также все переходы в j по ребру k. Требуется вывести количество путей из A в B по такому автомату.
    Решение
    Задача сводится к нахождению максимального количества путей, причем из одной вершины не выходят более одного ребра одного цвета. Сведем задачу к нахождения максимального потока. Для каждой вершин создадим k+1 вершину в перестроенной сети. Первая вершина будет входом, остальные вершины будут представлять цвета. Из вершины входа проведем по ребру пропускной способностью 1 в каждую из k вершин, соответствующих цвету. Из вершины соответствующих цвету i проведем все ребра цвета i во входы концов ребер. Найдя максимальный поток в такой сети, получим максимальное количество путей удовлетворяющих требуемому свойству.
  • Коллекционирование монет. Есть n коллекционеров и m видов монет. Для вступления в клуб, необходимо иметь не меньше одной монеты каждого типа. Вы (у Вас номер 1) можете меняться с коллекционерами имеющимися монетами. Любой коллекционер обменяет монету свою монету a на Вашу монету b , если у него больше одной монеты типа a и нету ни одной монеты типа b . Вы, в свою очередь, можете нарушать это правило. Нужно набрать как можно больше типов монет по известной ситуации у всех коллекционеров.
    Решение
    Построим сеть. Создадим для каждого типа монет по одной вершине. Эти вершины будут соответствовать Вашим монетам. Нужно собрать как можно больше уникальных монет, поэтому проведем ребро пропускной способности 1 в сток из каждой такой вершины. В вершины, соответствующие монетам, которые у Вас есть изначально, проведем ребро, пропускная способность которого равна количеству таких монет у Вас.
    Для каждого члена клуба (кроме 1, тоесть Вас) заведем по одной вершине. Эта вершина может принимать не более одной монеты, которой у него нет и отдавать
    не более k-1 монеты, которых у него k (k > 1). Естественно, член клуба отдает одну монету взамен одной полученной.
    Таким образом, в каждую такую вершину нужно провести ребро пропускной способности 1 из вершин соответствующих монетам, которых нет у этого члена клуба. А из этих вершин нужно провести ребра пропускной способностью k i - 1 в вершину i, соответствующую монетам, которых у члена клуба больше одной.
    Построенная сеть отражает процессы обмена в клубе. Максимальный поток в такой сети будет равен максимальному количеству монет, которые могуть быть собраны Вами.
    Источник: Харьковская зимняя школа по программированию, 2009, День 4
  • Циркуляция. Система охлаждения реактора представляет собой набор труб, соединяющих узлы. По трубам течет жидкость, причем для каждой трубы строго определено направление, в котором она должна по ней течь. Узлы системы охлаждения занумерованы от 1 до N. Система охлаждения должна быть спроектирована таким образом, чтобы для каждого узла за единицу времени количество жидкости, втекающей в узел, было равно количеству жидкости, вытекающей из узла. У каждой трубы имеется пропускная способность c ij . Кроме того, для обеспечения достаточного охлаждения требуется, чтобы по трубе протекало не менее l ij единиц жидкости за единицу времени. То есть для трубы, ведущей из i-го узла в j-ый должно выполняться l ij ≤ f ij ≤ c ij .
    Дано описание системы охлаждения. Нужно выяснить, каким образом можно пустить жидкость по трубам, чтобы выполнялись все указанные условия.
    Решение
    Это задача на нахождение циркуляции в сети с заданными нижними ограничениями на ребра. Если по ребру (u, v) должен проходить поток в отрезке , то в перестроенной сети будет три ребра (откуда, куда, вес): (u, v, r - l), (S, v, l), (u, T, l). S, T - дополнительно введенные сток и исток соответственно. Фактически мы пропускаем по ребру необходимый минимальный поток, после чего балансируем его так, чтобы получить циркуляцию.
  • Алгоритм расчета максимального потока в сетях

    ШАГ 1. Начальные присваивания. Текущему значению А т максимального потока в сети присваиваем значение 0. ШАГ 2. Выбор независимых маршрутов в сети и определение потоков в них. Из всего множества возможных маршрутов в сети от источника к стоку выбираем независимые маршруты М 1 , … , М k , не имеющие общих вершин, кроме начальной (источника v и ) и конечной (стока v с ). Для каждого выбранного маршрута М i (1£ i £ k ) определяем максимальный поток А (М i ).ШАГ 3. Коррекция текущего значения максимального потока в сети. Прибавляем найденные на ШАГе 2 значения максимальных потоков в независимых маршрутах М 1 , … , М k к текущему общему максимальному потоку в сети: А т := А т + А (М 1)+ А (М 2)+…+ А (М k ).ШАГ 4. Коррекция сети. Найденные на ШАГе 2 максимальные потоки А (М 1), … , А (М k )вычитаем из пропускной способности соответствующих дуг сети. Дуги с нулевой остаточной пропускной способностью удаляем.ШАГ 5. Проверка завершения работы алгоритма. Если после коррекции в сети не осталось маршрутов из источника v и в сток v с , то искомый максимальный поток в сети равен найденному текущему А := А т , алгоритм завершает свою работу, поскольку все пропускные возможности сети исчерпаны. Если же в корректированной сети существуют маршруты из источника v и в сток v с , то переход на ШАГ 2 и продолжение выполнения алгоритма. Пример 2. Найти максимальный поток в сети на рис.1.15 по данному алгоритму. Решение.ШАГ 1. Начальные присваивания. А т : = 0.

    I итерация. ШАГ 2. Выбор независимых маршрутов в сети и определение потоков в них. В качестве М 1 возьмем маршрут(v и =V 1 , V 2 , V 5 , v с =V 7), рассмотренный в примере 1. Для него А (М 1) = 10.

    Также несложно выделить независимый от М 1 маршрут М 2 = (v и =V 1 , V 3 , V 6 , v с =V 7). Выполним для него расчет максимальной пропускной способности и скорректируем пропускную способность дуг: А (М 2)= min {d 13 , d 36 , d 67 }= min {45, 40, 30}= 30. d 13 ¢= d 13 - 30 = 15, d 36 ¢= d 36 - 30 = 10, d 67 ¢= d 67 - 30 = 0.

    ШАГ 3. Коррекция текущего значения максимального потока в сети. А т := А т + А (М 1)+ А (М 2) = 0 + 10+ 30 = 40.ШАГ 4. Коррекция сети. Найденные на ШАГе 2 максимальные потоки А (М 1), А (М 2) в маршрутах М 1 , М 2 вычитаем из пропускной способности их дуг. Дуги с нулевой остаточной пропускной способностью удаляем. Результат дан на рис.1.16 а. а) б)Рис.1.16. Результат коррекции сети после итераций I и IIШАГ 5. Проверка завершения работы алгоритма. В корректированной сети (рис.1.16 а) существуют маршруты из источника v и в сток v с , например М 3 = (v и =V 1 , V 4 , V 2 , V 5 , v с =V 7). Продолжение выполнения алгоритма.

    II итерация. ШАГ 2. В качестве единственного независимого маршрута примем М 3 = (v и =V 1 , V 4 , V 2 , V 5 , v с =V 7). Для него:

    А (М 3)= min {d 14 , d 42 , d 25 , d 57 }= min {15, 10, 10, 15}= 10.

    d 14 ¢= d 14 - 10 = 5, d 42 ¢= d 42 - 10 = 0, d 25 ¢= d 25 - 10 = 0, d 57 ¢= d 57 - 10 = 5.

    ШАГ 3. А т := А т + А (М 3) = 40 + 10= 50.

    ШАГ 4. Коррекция сети. Максимальный поток А (М 3)вычитаем из дуг маршрута М 13 . Результат дан на рис.1.16 б.

    ШАГ 5. В корректированной сети не осталось маршрутов из источникав сток. А := А т := 50, завершение работы алгоритма.Ответ: максимальный поток в сети на рис.1.15 равен 50.

    Еслив сети задано несколькоисточников, ее достраивают, вводя новый общий источник, который соединяют с исходными источниками дугами, имеющими неограниченную пропускную способность. Затем задачу решают по обычному алгоритму. Искомыми потоками через исходные источники будут потоки по вновь добавленным дугам, входящим в них из нового общего источника. Аналогично поступают при наличии в сети нескольких стоков.

    Сетевое планирование

    Любую задачу по проектированию либо построению достаточно сложного объекта (проект ) можно разбить на ряд более мелких составляющих шагов. От правильного выбора последовательности выполнения данных шагов зависят сроки выполнения всего проекта.

    Весь комплекс действий по выполнению проекта представляют в виде совокупности событий и работ . Событиями называют отдельные этапы проекта. Работами называют процесс их выполнения. Весь комплекс событий и работ, необходимых для выполнения проекта, может быть представлен в виде двухполюсной сети Г = ({v и, v з }, V, X ), в которой:

    а) все события обозначены множеством вершин V, среди них выделено исходное событие v и (начало работ) и завершающее событие v з (завершение выполнения всего проекта), внутренние вершины сети задают промежуточные события - этапы, которые необходимо выполнить в процессе реализации проекта,

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

    Графическое изображение данной сети называют сетевым графиком. Для обозначения последовательности действий в сетевой график вводят также фиктивные работы , которые не связаны с выполнением каких-либо действий. Соответствующие работы обозначают штриховыми дугами.

    В качестве примера рассмотрим организацию некоторого производства. Проект требует выполнения следующих работ:

    I) маркетинговые исследования, II) предпроектные исследования по оборудованию, III) организация сети сбыта, IV) проведение рекламной кампании, V) разработка технического задания на производственное оборудование, VI) разработка технической документации на производственные помещения и коммуникации, VII) закупка стандартного оборудования, VIII) проектирование и изготовление нестандартного оборудования, IX)строительство производственных помещений и монтаж коммуникаций, X) монтаж стандартного оборудования, XI) монтаж нестандартного оборудования, XII) пусконаладочные работы.

    Данные работы обозначим в сетевом графике дугами с соответствующими номерами.

    Событиями в данном проекте будут следующие:

    1) начало работ (исходное событие), 2) завершение маркетинговых исследований, 3) завершение предпроектных исследований, 4) организация сети сбыта, 5) организация рекламной кампании, 6) подготовка технического задания на производственное оборудование, 7) завершение разработки технической документации на производственные помещения и коммуникации, 8) завершение закупки стандартного оборудования, 9) завершение проектирования и изготовления нестандартного оборудования, 10) завершение строительства производственных помещений и монтажа коммуникаций, 11) завершение установки оборудования и пуско-наладочных работ,

    12) завершение проекта (завершающее событие).

    Событиям сопоставляем вершины с соответствующими номерами. Сетевой график выполнения проекта дан на рис. 1.17:



    Рис.1.17. Сетевой график выполнения проекта

    Потоки в сетях

    Задача о максимальном потоке

    Пусть задана сеть, состоящая из множества вершин Е и множества дуг, соединяющих некоторые упорядоченные пары вершин, взятых из Е. Будем предполагать, что она является симметрическим графом, т. е. если дуга () входит в сеть, то в нее входит и симметричная дуга (), хотя реально такой дуги может и не быть. Для определенности присвоим вершинам сети следующие номера: . Каждая вершина характеризуется интенсивностью . Вершины, для которых , назовем источниками, вершины, для которых , - стоками, а остальные - промежуточными. По путям сети направляются некоторые потоки - однородное вещество (газ, жидкость) или транспорт - из источников в стоки. Каждой дуге () сети поставлено в соответствие число , называемое пропускной способностью дуги. Под пропускной способностью дуги понимается максимальный поток, который она может пропустить за единицу времени. Пусть , и для остальных вершин, тогда - единственный источник, - единственный сток, а - промежуточные вершины сети.

    Ставится задача определить для заданной сети максимальную величину потока из источника в сток . Под потоком в сети из источника в сток будем понимать совокупность потоков {} по всем дугам сети, где - поток по дуге (), , равный количеству перемещаемой по ней субстанции в единицу времени. Математически задача о максимальном потоке формулируется следующим образом: найти неотрицательные значения для всех , максимизирующие

    (3.9)

    при ограничениях:

    (3.11)

    Условие (3.9) отражает величину максимального потока, который равен количеству вещества, вытекающего из источника, или притекающего в сток. Условия (3.10) означают, что поток по каждой дуге должен быть неотрицательным и не превышать ее пропускной способности; из условия (3.11) следует, что количество вещества, притекающего в любую промежуточную вершину, равно количеству вещества, вытекающего из нее.

    До сих пор мы рассматривали сети с единственным источником и стоком. На практике, однако, число источников и стоков может быть произвольным. Покажем, что с помощью незначительных изменений топологии задачи такого типа могут быть сведены к уже рассмотренным.

    Проиллюстрируем это на примере.

    Рассмотрим сеть, состоящую из трех источников и двух стоков (Рис. 3.10). Пусть, для определенности, данная сеть описывает следующую задачу.

    Места добычи нефти расположены в географических пунктах . Из мест добычи нефть транспортируется на нефтеперерабатывающие заводы через некоторые промежуточные пункты . Совокупность пунктов с соединяющими их транспортными магистралями изобразим в виде сети на Рис. 3.10, дуги соответствуют транспортным магистралям, а вершины - отдельным пунктам (местам добычи, заводам, станциям перекачки или железнодорожным станциям). Пропускные способности транспортных магистралей приписаны дугам сети. Чтобы определить, какое максимальное количество нефти можно транспортировать из мест добычи на нефтеперерабатывающие заводы, необходимо расширить сеть, добавив один фиктивный источник и один фиктивный сток (фиктивные дуги на рисунке нанесены штриховыми линиями).

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


    Рис. 3.10. Введение фиктивного источника и стока

    Пример 3.

    Приведем пример решения задачи о максимальном потоке в Excel. Рассмотрим некоторую транспортную сеть (Рис. 3.11.). Предположим также, что транспортные потоки могут идти в обоих направлениях некоторых дуг (очевидно, данный случай является более общим и сложным для решения, чем случай односторонних транспортных потоков). На рисунке обозначены максимальные пропускные способности в обоих направлениях: например из пункта 3 в пункт 6 может быть транспортирован поток интенсивностью 4 единицы, и такой же поток – из пункта 6 в пункт 3 (нули у окончаний некоторых дуг означают невозможность транспортировки в соответствующем направлении). Требуется определить максимальную пропускную способность сети в целом, т.е. максимальное значение потока .

    Рис. 3.11. Сетевой график примера 3.

    Решение.

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

    Максимизировать при ограничениях:

    Введем данные на рабочий лист в соответствии с Рис. 3.12.

    Рис. 3.12. Данные для решения задачи о максимальном потоке

    Диапазон ячеек A6:Q6 отведем под расчетные значения переменных. В ячейки A8:A14, а также в целевую ячейку F13 введем следующие формулы

    C6+D6+I6-E6-H6-J6

    G6+N6+H6+K6-L6-I6-M6-P6

    F13 (целевая)

    После запуска Поиска решения введем следующие ограничения:

    В окне диалога Поиска решения в для диапазона изменяемых ячеек укажем A6:Q6.

    В результате решения получим ответ: ; потоки в дугах представлены ниже

    Пункты (узлы)

    Пункты (узлы)

    Следует отметить, что данная задача имеет неединственное оптимальное решение, то есть при максимальном потоке в 17 единиц может иметь место различное распределение потоков по дугам.

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

    Домашние вечеринки настолько вошли в моду у европейцев, что их устраивают едва ли не каждую неделю. Вкусная еда, приятная компания, много...

    Когда на улице мороз и снежная зима в самый раз устроить коктейльную домашнюю вечеринку. Разогревающие алкогольные коктейли,...

    Характерными блюдами для национальной венгерской кухни считаются те, в которых использовано большое количество молотой паприки, репчатого...
    Когда на улице мороз и снежная зима в самый раз устроить коктейльную домашнюю вечеринку. Разогревающие алкогольные коктейли,...
    Три дня длилось противостояние главы управы района "Беговой" и владельцев легендарной шашлычной "Антисоветская" . Его итог – демонтаж...
    Святой великомученик Никита родился в IV веке в Готии (на восточной стороне реки Дунай в пределах нынешней Румынии и Бессарабии) во...
    РЕШЕНИЕ ИМЕНЕМ РОССИЙСКОЙ ФЕДЕРАЦИИ 07 мая 2014 года г. Ефремов Тульская областьЕфремовский районный суд Тульской области в...
    Откуда это блюдо получило такое название? Лично я не знаю. Есть еще одно – «мясо по-капитански» и мне оно нравится больше. Сразу...