В теории оптимизации задачи максимального потока подразумевают поиск допустимого потока через сеть потоков , который обеспечивает максимально возможную скорость потока.
Проблему максимального потока можно рассматривать как частный случай более сложных проблем сетевых потоков, таких как задача циркуляции . Максимальное значение потока st (т. е. потока из источника s в сток t) равно минимальной пропускной способности разреза st (т. е. разреза, отделяющего s от t) в сети, как указано в теореме о максимальном потоке и минимальном разрезе .
Задача о максимальном потоке была впервые сформулирована в 1954 году Т. Э. Харрисом и Ф. С. Россом как упрощенная модель советского железнодорожного транспортного потока. [1] [2] [3]
В 1955 году Лестер Р. Форд-младший и Делберт Р. Фулкерсон создали первый известный алгоритм — алгоритм Форда–Фулкерсона . [4] [5] В своей статье 1955 года [4] Форд и Фулкерсон написали, что проблема Харриса и Росса формулируется следующим образом (см. [1] стр. 5):
Рассмотрим железнодорожную сеть, соединяющую два города через ряд промежуточных городов, где каждому звену сети присвоен номер, представляющий его пропускную способность. Предполагая устойчивое состояние, найдите максимальный поток из одного заданного города в другой.
В своей книге «Потоки в сетях » [5] в 1962 году Форд и Фулкерсон писали:
Весной 1955 года этот вопрос был задан авторам Т. Э. Харрисом, который совместно с генералом Ф. С. Россом (в отставке) сформулировал упрощенную модель железнодорожного транспортного потока и обозначил эту конкретную проблему как центральную, предложенную моделью [11].
где [11] относится к секретному отчету 1955 года «Основы метода оценки пропускной способности железнодорожной сети» Харриса и Росса [3] (см. [1] стр. 5).
За эти годы были обнаружены различные улучшенные решения задачи максимального потока, в частности, алгоритм кратчайшего увеличивающегося пути Эдмондса и Карпа и независимо Диница; алгоритм блокирующего потока Диница; алгоритм push-relabel Голдберга и Тарьяна ; и алгоритм двоичного блокирующего потока Голдберга и Рао. Алгоритмы Шермана [6] и Кельнера, Ли, Ореккии и Сидфорда [7] [8] соответственно находят приблизительно оптимальный максимальный поток, но работают только в неориентированных графах.
В 2013 году Джеймс Б. Орлин опубликовал статью, описывающую алгоритм. [9]
В 2022 году Ли Чен, Расмус Кинг, Ян П. Лю, Ричард Пэн, Максимилиан Пробст Гутенберг и Сушант Сачдева опубликовали алгоритм с почти линейным временем работы для задачи потока минимальной стоимости , частным случаем которой является задача максимального потока. [10] [11] Для задачи кратчайшего пути из одного источника (SSSP) с отрицательными весами также был представлен другой частный случай задачи потока минимальной стоимости — алгоритм с почти линейным временем работы. [12] [13] Оба алгоритма были признаны лучшими докладами на Симпозиуме по основам компьютерных наук 2022 года . [14] [15]
Сначала введем некоторые обозначения:
Определение. Пропускная способность ребра — это максимальный объем потока, который может пройти через ребро. Формально это карта
Определение. Поток — это карта , которая удовлетворяет следующим условиям:
Замечание . Потоки кососимметричны: для всех
Определение. Величина потока — это количество потока, проходящего от источника к стоку. Формально для потока это определяется как:
Определение. Задача максимального потока заключается в том, чтобы направить как можно больший поток от источника к приемнику, другими словами, найти поток с максимальным значением.
Обратите внимание, что может существовать несколько максимальных потоков, и если разрешены произвольные действительные (или даже произвольные рациональные) значения потока (вместо просто целых чисел), то существует либо ровно один максимальный поток, либо бесконечно много, поскольку существует бесконечно много линейных комбинаций базовых максимальных потоков. Другими словами, если мы отправляем единицы потока по ребру в одном максимальном потоке, а единицы потока по другому максимальному потоку, то для каждого мы можем отправить единицы и направить поток по оставшимся ребрам соответственно, чтобы получить другой максимальный поток. Если значения потока могут быть любыми действительными или рациональными числами, то существует бесконечно много таких значений для каждой пары .
В следующей таблице перечислены алгоритмы решения задачи максимального потока. Здесь и обозначают количество вершин и ребер сети. Значение относится к наибольшей емкости ребер после масштабирования всех емкостей до целочисленных значений (если сеть содержит иррациональные емкости, может быть бесконечной).
Дополнительные алгоритмы см. в книге Голдберга и Тарьяна (1988).
Теорема о интегральном потоке утверждает, что
Утверждение заключается не только в том, что значение потока является целым числом, что следует непосредственно из теоремы о максимальном потоке и минимальном разрезе , но и в том, что поток на каждом ребре является целым числом. Это имеет решающее значение для многих комбинаторных приложений (см. ниже), где поток через ребро может кодировать, должен ли элемент, соответствующий этому ребру, быть включен в искомый набор или нет.
Учитывая сеть с набором источников и набором стоков вместо только одного источника и одного стока, мы должны найти максимальный поток через . Мы можем преобразовать задачу с несколькими источниками и несколькими стоками в задачу максимального потока, добавив объединенный источник, соединенный с каждой вершиной в , и объединенный сток, соединенный каждой вершиной в (также известный как суперисточник и суперсток ) с бесконечной пропускной способностью на каждом ребре (см. рис. 4.1.1.).
Учитывая двудольный граф , мы должны найти паросочетание максимальной мощности в , то есть паросочетание, которое содержит наибольшее возможное число ребер. Эту задачу можно преобразовать в задачу максимального потока, построив сеть , где
Тогда значение максимального потока в равно размеру максимального паросочетания в , а паросочетание максимальной мощности можно найти, взяв те ребра, поток по которым является целочисленным максимальным потоком.
Учитывая направленный ациклический граф , мы должны найти минимальное число вершинно-непересекающихся путей для покрытия каждой вершины в . Мы можем построить двудольный граф из , где
Тогда можно показать, что имеет паросочетание размера тогда и только тогда, когда имеет вершинно-непересекающееся покрытие путей, содержащее ребра и пути, где — число вершин в . Таким образом, задачу можно решить, найдя вместо этого паросочетание максимальной мощности в .
Предположим, что мы нашли соответствие и построили из него покрытие . Интуитивно понятно, что если две вершины сопоставлены в , то ребро содержится в . Очевидно, что число ребер в равно . Чтобы увидеть, что является вершинно-непересекающимся, рассмотрим следующее:
Таким образом, ни одна вершина не имеет двух входящих или двух исходящих ребер в , что означает, что все пути в не пересекаются по вершинам.
Чтобы показать, что покрытие имеет размер , мы начинаем с пустого покрытия и строим его постепенно. Чтобы добавить вершину к покрытию, мы можем либо добавить ее к существующему пути, либо создать новый путь нулевой длины, начинающийся с этой вершины. Первый случай применим всякий раз, когда либо и какой-то путь в покрытии начинается в , либо и какой-то путь заканчивается в . Последний случай применим всегда. В первом случае общее количество ребер в покрытии увеличивается на 1, а количество путей остается прежним; во втором случае количество путей увеличивается, а количество ребер остается прежним. Теперь ясно, что после покрытия всех вершин сумма количества путей и ребер в покрытии равна . Следовательно, если количество ребер в покрытии равно , то количество путей равно .
Пусть будет сетью. Предположим, что в каждом узле есть емкость в дополнение к емкости ребра, то есть отображение , при котором поток должен удовлетворять не только ограничению емкости и сохранению потоков, но и ограничению емкости вершины
Другими словами, величина потока, проходящего через вершину, не может превышать ее пропускную способность. Чтобы найти максимальный поток через , мы можем преобразовать задачу в задачу максимального потока в исходном смысле, расширив . Сначала каждая заменяется на и , где соединена ребрами, входящими в и соединена с ребрами, выходящими из , затем назначаем пропускную способность ребру, соединяющему и (см. рис. 4.4.1). В этой расширенной сети ограничение пропускной способности вершины снимается, и поэтому задачу можно рассматривать как исходную задачу максимального потока.
Дан ориентированный граф и две вершины и , нам нужно найти максимальное количество путей из в . Эта задача имеет несколько вариантов:
1. Пути должны быть непересекающимися по ребрам. Эту задачу можно преобразовать в задачу максимального потока, построив сеть из , где и являются источником и стоком соответственно, и назначив каждому ребру пропускную способность . В этой сети максимальный поток равен , если и только если существуют пути, непересекающиеся по ребрам.
2. Пути должны быть независимыми, т.е. вершинно-непересекающимися (за исключением и ). Мы можем построить сеть из с пропускными способностями вершин, где пропускные способности всех вершин и всех ребер равны . Тогда значение максимального потока равно максимальному числу независимых путей из в .
3. В дополнение к тому, что пути не пересекаются по ребрам и/или вершинам, пути также имеют ограничение по длине: мы учитываем только те пути, длина которых точно равна или не превышает . Большинство вариантов этой задачи являются NP-полными, за исключением небольших значений . [27]
Замыкание ориентированного графа — это множество вершин C , такое, что ни одно ребро не покидает C . Задача замыкания — это задача нахождения замыкания с максимальным или минимальным весом в ориентированном графе со взвешенными вершинами. Она может быть решена за полиномиальное время с использованием сведения к задаче максимального потока.
В задаче на выбывание в бейсболе есть n команд, соревнующихся в лиге. На определенном этапе сезона лиги w i — это количество побед, r i — это количество игр, оставшихся для игры за команду i, а r ij — это количество игр, оставшихся против команды j . Команда выбывает, если у нее нет шансов закончить сезон на первом месте. Задача задачи на выбывание в бейсболе — определить, какие команды выбывают в каждой точке сезона. Шварц [28] предложил метод, который сводит эту задачу к максимальному сетевому потоку. В этом методе создается сеть для определения того, выбывает ли команда k .
Пусть G = ( V , E ) будет сетью, в которой s , t ∈ V являются источником и стоком соответственно. Добавляется игровой узел ij – который представляет собой количество игр между этими двумя командами. Мы также добавляем командный узел для каждой команды и соединяем каждый игровой узел { i , j } с i < j с V , и соединяем каждый из них из s ребром с пропускной способностью r ij – который представляет собой количество игр между этими двумя командами. Мы также добавляем командный узел для каждой команды и соединяем каждый игровой узел { i , j } с двумя командными узлами i и j , чтобы гарантировать победу одного из них. Не нужно ограничивать значение потока на этих ребрах. Наконец, ребра сделаны от командного узла i до приемного узла t , а пропускная способность w k + r k – w i установлена так, чтобы команда i не выиграла больше, чем w k + r k . Пусть S будет множеством всех команд, участвующих в лиге, и пусть
В этом методе утверждается, что команда k не исключается тогда и только тогда, когда в сети G существует значение потока размера r ( S − { k }) . В упомянутой статье доказано, что это значение потока является максимальным значением потока из s в t .
В авиационной отрасли одной из основных проблем является планирование работы экипажей. Задача планирования работы авиакомпаний может рассматриваться как приложение расширенного максимального сетевого потока. Входными данными этой задачи является набор рейсов F , содержащий информацию о том, где и когда каждый рейс отправляется и прибывает. В одной из версий планирования работы авиакомпаний цель состоит в том, чтобы составить допустимое расписание с не более чем k экипажами.
Для решения этой проблемы используется вариация задачи циркуляции, называемая ограниченной циркуляцией, которая является обобщением задач сетевых потоков с дополнительным ограничением в виде нижней границы потоков на ребрах.
Пусть G = ( V , E ) будет сетью с s , t ∈ V в качестве исходного и приемного узлов. Для исходного и конечного узлов каждого рейса i добавляются два узла к V , узел s i как исходный и узел d i как конечный узел рейса i . Также добавляются следующие ребра к E :
В упомянутом методе утверждается и доказывается, что нахождение значения потока k в G между s и t равнозначно нахождению допустимого расписания для набора полетов F с не более чем k экипажами. [29]
Другой вариант планирования авиалиний заключается в поиске минимально необходимого экипажа для выполнения всех рейсов. Чтобы найти ответ на эту задачу, создается двудольный граф G' = ( A ∪ B , E ) , где каждый рейс имеет копию в множестве A и множестве B . Если тот же самолет может выполнить рейс j после рейса i , i ∈ A соединяется с j ∈ B . Сопоставление в G' индуцирует расписание для F и, очевидно, максимальное двудольное сопоставление в этом графе создает расписание авиалиний с минимальным количеством экипажей. [29] Как упоминалось в части «Приложение» этой статьи, максимальное кардинальность двудольного сопоставления является приложением задачи максимального потока.
Есть несколько фабрик, которые производят товары, и несколько деревень, куда эти товары должны быть доставлены. Они соединены сетью дорог, каждая из которых имеет пропускную способность c для максимального количества товаров, которые могут по ней пройти. Задача состоит в том, чтобы найти, есть ли циркуляция, которая удовлетворяет спрос. Эту задачу можно преобразовать в задачу максимального потока.
Пусть G = ( V , E ) будет этой новой сетью. Существует циркуляция, которая удовлетворяет спрос, если и только если:
Если циркуляция существует, то рассмотрение решения о максимальном потоке даст ответ на вопрос, сколько товаров необходимо отправить по конкретной дороге для удовлетворения спроса.
Проблему можно расширить, добавив нижнюю границу потока на некоторых ребрах. [30]
В своей книге Клейнберг и Тардос представляют алгоритм сегментации изображения. [32] Они представляют алгоритм для поиска фона и переднего плана на изображении. Точнее, алгоритм принимает в качестве входных данных растровое изображение, смоделированное следующим образом: a i ≥ 0 — вероятность того, что пиксель i принадлежит переднему плану, b i ≥ 0 — вероятность того, что пиксель i принадлежит фону, а p ij — штраф, если два соседних пикселя i и j помещены один на передний план, а другой на задний план. Цель состоит в том, чтобы найти разбиение ( A , B ) набора пикселей, которое максимизирует следующее количество
Действительно, для пикселей в A (рассматриваемых как передний план) мы получаем a i ; для всех пикселей в B (рассматриваемых как фон) мы получаем b i . На границе, между двумя соседними пикселями i и j , мы теряем p ij . Это эквивалентно минимизации величины
потому что
Теперь мы строим сеть, узлами которой являются пиксель, а также источник и сток, см. рисунок справа. Мы соединяем источник с пикселем i ребром веса a i . Мы соединяем пиксель i со стоком ребром веса b i . Мы соединяем пиксель i с пикселем j с весом p ij . Теперь осталось вычислить минимальный разрез в этой сети (или, что эквивалентно, максимальный поток). На последнем рисунке показан минимальный разрез.
1. В задаче о потоке минимальной стоимости каждое ребро ( u ,v) также имеет коэффициент стоимости a uv в дополнение к своей пропускной способности. Если поток через ребро равен f uv , то общая стоимость равна a uv f uv . Требуется найти поток заданного размера d с наименьшей стоимостью. В большинстве вариантов коэффициенты стоимости могут быть как положительными, так и отрицательными. Для этой задачи существуют различные алгоритмы с полиномиальным временем.
2. Задача максимального потока может быть дополнена дизъюнктивными ограничениями : отрицательное дизъюнктивное ограничение говорит, что определенная пара ребер не может одновременно иметь ненулевой поток; положительное дизъюнктивное ограничение говорит, что в определенной паре ребер по крайней мере одно должно иметь ненулевой поток. С отрицательными ограничениями задача становится сильно NP-трудной даже для простых сетей. С положительными ограничениями задача является полиномиальной, если допускаются дробные потоки, но может быть сильно NP-трудной, когда потоки должны быть целыми. [33]
{{cite book}}
: CS1 maint: multiple names: authors list (link)