—1.15—

Мы уже познакомились с рядом ключевых идей этой части курса. Мы начали с дискретных формулировок леммы Холла и её эквивалентов. Затем при помощи линейной релаксации мы перешли к более непрерывным постановкам задач Эгервари и Биркгофа–Фон Неймана. Тем не менее, эти постановки касались взвешенных паросочетаний в двудольных графах. Сейчас мы откажемся от предположения двудольности и рассмотрим более общую задачу Форда–Фалкерсона, которая решится при помощи круга уже известных нам идей. От задачи Форда–Фалкерсона нам останется лишь один шаг до блестящей идеи двадцатого века – двойственности линейного программирования. Уже сейчас вы можете заметить, как мы постепенно движемся от комбинаторных постановок в сторону геометрических – и формулируем задачи в терминах выпуклых многогранников в многомерных пространствах.

Итак, рассмотрим постановку транспортной задачи, или задачи о максимальном потоке в сети.

Пусть \(G = (V,E)\) – ориентированный граф (его рёбра мы иногда будем называть дугами, просто чтобы отличать их от неориентированных рёбер). Пусть граф также взвешен, то есть каждой дуге \(e = (x,y) = (x \to y)\) приписан вес \(c(e) = c(x,y) \in \mathbb{R}\). Мы будем полагать веса неотрицательными и будем называть их пропускными способностями. Для нас не будет никакой различия между отсутствием дуги и дугой с нулевой пропускной способностью. В этом связи мы можем полагать, что \(E = V \times V\). Наконец, пусть в графе отмечены две различные вершины \(s, t \in V\) – источник и сток, соответственно. Все эти объекты \(N = (V,A,c,s,t)\) в совокупности называются сетью. Функция \(f : E \to \mathbb{R}\) называется (допустимым) потоком в сети \(N\), если выполняются следующие условия:

  • \(0 \le f(e) \le c(e)\) для каждой дуги \(e \in E\).
  • \(\sum\limits_{u:~u \to v} f(u,v) = \sum\limits_{w:~v \to w} f(v,w)\) для каждой вершины \(v \in V \setminus \{s,t\}\).

Физическая интерпретация: в сети из (односторонних) труб с заданными пропускными способностями (измеряемых в единицах типа литр в секунду) нужно прокачать поток нефти из источника (производителя нефти) к стоку (потребителю). При этом в узлах сети, отличных от источника и стока, нефть не накапливается и не генерируется.

Задача состоит в том, чтобы найти допустимый поток в сети, максимизирующий следующую величину \[ F(f) = \sum_{v:~s \to v} f(s,v) - \sum_{u:~u \to s} f(u,s) = \sum_{u:~u \to t} f(u,t) - \sum_{v:~t \to v} f(t,v). \] Почему эти две суммы равны? Это очевидно из физической интерпретации: раз нефть нигде не накапливается, то сколько нефти производится в \(s\) в единицу времени (левая часть), столько её и приходит в \(t\) в единицу времени. Формально это равенство можно получить так: просуммировать равенства \(\sum\limits_{u \to v} f(u,v) = \sum\limits_{v \to w} f(v,w)\) по всем \(v \in V \setminus \{s,t\}\) и сократить подобные слагаемые.

В некотором смысле двойственными по отношению к потокам объектами будут разрезы сети. Назовём разрезом сети \(N\) разбиение вершин \(V = S \sqcup T\) на два множества, так что \(s \in S, t \in T\). Неформально об этом нужно думать так: представим, что часть труб вышла из строя (мы их разрезали), и теперь из \(s\) невозможно попасть в \(t\) по дугам сети. Все вершины, достижимые из \(s\) по дугам остаточной сети, отнесём в \(S\), а все остальные – в \(T\). Соответствующая двойственная задача состоит в том, чтобы найти разрез \((S, T)\), минимизирующий величину \[ C(S,T) = \sum_{\substack{x \in S \\ y \in T}} c(x,y). \]

Простое следствие всей этой деятельности состоит в том, что \(F(f) \le C(S,T)\) для любых потоков и разрезов. Интуитивно: нельзя прокачать нефти больше, чем тотальная пропускная способность любого разреза сети. Тем самым, чтобы найти максимальный поток в сети, имеет смысл поискать самый “узкий” разрез сети. В свете многих предыдущих формулировок аналогов леммы Холла (типа “такой-то максимум равен такому-то минимуму”) следующая теорема может выглядеть вполне ожидаемой.

Теорема [Ford–Fulkerson, 1956]. Величина максимального потока \(F_{\max}\) равна пропускной способности минимального разреза \(C_{\min}\).

Доказательство. Мы начнём с того, что докажем строго упомянутое выше неравенство \(F(f) \le C(S,T)\). Суммируя равенства “непрерывности потока” \(\sum\limits_{u \to v} f(u,v) = \sum\limits_{v \to w} f(v,w)\) по всем \(v \in S \setminus {s}\), получим \[ F(f) = \sum_{v:~s \to v} f(s,v) - \sum_{u:~u \to s} f(u,s) = \sum_{\substack{x \in S \\ y \in T}} f(x,y) - \sum_{\substack{y \in T \\ x \in S}} f(y,x) \le \sum_{\substack{x \in S \\ y \in T}} c(x,y) = C(S,T). \]

Теперь опишем метод Форда–Фалкерсона, который может быть преобразован в множество алгоритмов поиска максимального потока (например, Эдмондса–Карпа), зависящих от того, как реализованы детали. Основная идея – поиск увеличивающих путей в остаточной сети. Введём необходимые понятия. Пусть мы уже построили некий поток \(f\), возможно, немаксимальный. Рассмотрим произвольную дугу \(x\to y\) с положительной пропускной способностью. Для начала предположим, что обратной дуги в сети нет, то есть \(c(y,x) = 0\). По дуге \(x\to y\) уже может идти поток \(f(x,y)\). Мы можем думать, что у неё есть остаточная пропускная способность \(c’(x,y) = c(x,y) - f(x,y)\). Иными словами, если эта труба ещё не насыщена (то есть \(c(x,y) > f(x,y)\)), то мы можем пустить по ней дополнительно ещё \(c’(x,y)\) единиц потока. Что касается остаточной пропускной способности в обратную сторону, её имеет смысл положить равной \(c’(y,x) = f(x,y)\). Это означает, что отправляя дополнительный поток по остаточной дуге \(y \to x\) (которой не было в исходной сети, но она появилась в остаточной), мы как бы “разворачиваем” часть потока \(f(x,y)\) обратно (то есть не отправляем по дуге \(x \to y\), как было запланировано в потоке \(f\)). Но что если изначально существовали обе дуги \(x \to y\) и \(y \to x\)? Общее определение будет таким. Для сети \(N\) с допустимым потоком \(f\) определим остаточную сеть как сеть с тем же базовым графом, но с новыми пропускными способностями \[ c’(x,y) = c(x,y) - f(x,y) + f(y,x). \] Предположим, что нам удалось найти путь из \(s\) в \(t\) по дугам положительной остаточной пропускной способности, пусть минимальная из них равна \(\varepsilon\). Такой путь будем называть увеличивающим. Тогда вдоль этого пути можно пропустить дополнительный поток величины \(\varepsilon\). Для этого вдоль каждой дуги \(x \to y\) увеличивающего пути мы проделаем следующее: если \(c(x,y) - f(x,y) > 0\), то мы можем немного нарастить \(f(x,y)\); если \(f(y,x) > 0\), мы можем немного уменьшить \(f(y,x)\). Комбинируя эти два действия, мы можем увеличить \(f(x,y) - f(y,x)\) на \(\varepsilon\). Проделаем это вдоль всех рёбер увеличивающего пути, тем самым изменив поток \(f\) и увеличив \(F(f)\) на \(\varepsilon\).

Метод Форда–Фалкерсона теперь описывается крайне просто:

  • начинаем с нулевого потока \(f\);
  • пока в остаточной сети есть увеличивающий путь, увеличиваем поток вдоль этого пути.

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

Итак, рассмотрим произвольный максимальный допустимый поток \(f\). Он существует из соображений компактности. Если в остаточной сети есть увеличивающий путь, то поток не максимален, как объяснено выше. Значит, увеличивающего пути нет. Сформируем разрез: \(S\) – множество всех вершин, достижимых из \(s\) в остаточной сети по дугам положительной остаточной пропускной способности; \(T\) – все остальные вершины, включая \(t\). Этот разрез уже насыщен потоком \(f\) в следующем смысле: для любых \(x \in S, y \in T\) выполнено \(c’(x,y) = 0\) (по определению этого разреза), откуда мы получаем, что \(c(x,y) = f(x,y)\) и \(f(y,x) = 0\). Это означает, что в неравенстве \(F(f) \le C(S,T)\) достиглось равенство: \[ F(f) = \sum_{v:~s \to v} f(s,v) - \sum_{u:~u \to s} f(u,s) = \sum_{\substack{x \in S \\ y \in T}} f(x,y) - \sum_{\substack{y \in T \\ x \in S}} f(y,x) = \sum_{\substack{x \in S \\ y \in T}} c(x,y) = C(S,T). \] Тем самым мы нашли разрез с пропускной способностью, равной величине потока \(f\). Это доказывает теорему. \(\square\)

Следствие (из доказательства). Если все пропускные способности в сети целочисленные, то и максимальный поток целочисленный.

Доказательство. Каждый шаг метода Форда–Фалкерсона увеличивает поток на целую величину, и поэтому метод закончится и возвратит целый максимальный поток. \(\square\)

Замечание. Неориентированный аналог теоремы Форда–Фалкерсона можно получить, объявив в сети симметричные пропускные способности \(c(x,y) = c(y,x)\).

—1.16—

Теорема Форда–Фалкерсона – мощное утверждение и влечёт многое из того, что мы уже обсуждали. Я приведу в качестве примера вывод теоремы Менгера, которую тоже относят к условной серии аналогов леммы Холла (её можно доказать из теоремы Холла или Кёнига, но вывод из теории потоков проще). Теорема Менгера о связности графов существует в разных версиях, мы рассмотрим две вариации для неориентированных графов.

Теорема [Menger, 1927]. Пусть дан (конечный) неориентированный граф и \(s\), \(t\) – две его вершины. Тогда наибольшее количество рёберно-непересекающихся путей из \(s\) в \(t\) равно наименьшему количеству рёбер, которые надо удалить, чтобы в оставшемся графе не существовало пути из \(s\) в \(t\).

Доказательство. Вначале превратим граф в ориентированный, заменяя рёбра на пары дуг. После этого объявим наш граф сетью с единичными пропускными способностями всех дуг, источником \(s\) и стоком \(t\). Тогда максимальный поток насыщает максимальный набор рёберно-непересекающихся путей из \(s\) в \(t\) 1 , а минимальный разрез отвечает минимальному набору рёбер, которые надо удалить, чтобы в оставшемся графе не существовало пути из \(s\) в \(t\). \(\square\)

Теорема [Menger, 1927]. Пусть дан (конечный) неориентированный граф и \(s\), \(t\) – две несмежные вершины в нём. Тогда наибольшее количество вершинно-непересекающихся путей из \(s\) в \(t\) равно наименьшему количеству вершин, которые надо удалить (с инцидентными рёбрами), чтобы в оставшемся графе не существовало пути из \(s\) в \(t\).

Доказательство. Вначале превратим граф в ориентированный, заменяя рёбра на пары дуг. Чтобы свести задачу к максимальному потоку, воспользуемся идеей раздвоения вершин. А именно, заменим каждую вершину \(v\) на две вершины \(v^+\) и \(v^-\). В \(v^+\) мы направим все дуги, входившие ранее в \(v\). Из \(v^-\) мы направим все дуги, исходившие ранее из \(v\). У всех этих дуг пропускную способность назначим очень большим целым числом. Также проведём дугу пропускной способности 1 из \(v^+\) в \(v^-\). Теорема теперь доказывается применением Форда–Фалкерсона к полученной сети с источником \(s^-\) и стоком \(t^+\) 2 . \(\square\)

—1.17*—

Другое стандартное приложение метода Форда–Фалкерсона – поиск паросочетаний в двудольном графе. Метод, который можно так получить, далеко не лучший, но он для нас будет ещё одной (финальной) стадией привыкания к языку линейного программирования, перед тем, как мы его введём.

Пусть дан двудольный граф \(G = (V = L\cup R, E)\). Преобразуем его в сеть следующим образом: все рёбра графа ориентируем от \(L\) к \(R\); добавим новую вершину – источник \(s\), из которого нарисуем дуги во все вершины доли \(L\); добавим ещё одну новую вершину – сток \(t\), в который проведём дуги из всех вершины доли \(R\). Назначим единичные пропускные способности у всех новых дуг, и бесконечные (читай: очень большие целые) пропускные способности у всех дуг оригинального двудольного графа. Чему отвечает максимальный поток в такой сети? Если мы вспомним следствие из теоремы Форда–Фалкерсона в —1.15—, то метод Форда–Фалкерсона построит нам нам некий целочисленный поток, пропускающий через каждую оригинальную дугу поток величины либо 0, либо 1. Последние можно проинтерпретировать как максимальное паросочетание в графе \(G\)! Представим однако, что мы пользовались каким-нибудь другим методом поиска максимального потока, и он нам мог вернуть любой, в том числе дробный, максимальный поток. Ограничения, накладываемые свойствами сети на величины потока на оригинальных дугах, таковы:

(1) \(f(x,y) \ge 0 \quad \forall x \in L, y \in R\);

(2) \(\sum\limits_{y :~ x \to y} f(x,y) \le 1 \quad \forall x \in L\); \(\quad \sum\limits_{x :~ x \to y} f(x,y) \le 1 \quad \forall y \in R\).

Полиэдр \(\mathcal{M}(G) = \{(f(x,y))_{(x \to y) \in E}\text{, удовлетворяющие неравенствам (1)-(2)}\} \subset \mathbb{R}^{|E|}\) называется политопом паросочетаний. В тот момент, когда мы называем его политопом, неплохо бы описать множество вершин. Ими оказываются целочисленные потоки, соответствующие паросочетаниям в \(G\) 3 . Доказательство более общего утверждения будет приведено ниже.

Если в пунктах 2 и 3 мы заменим неравенства на равенства, то получится система ограничений, задающая политоп совершенных паросочетаний:

(1) \(f(x,y) \ge 0 \quad \forall x \in L, y \in R\);

(2’) \(\sum\limits_{y :~ x \to y} f(x,y) = 1 \quad \forall x \in L\); \( \quad \sum\limits_{x :~ x \to y} f(x,y) = 1 \quad \forall y \in R\).

Иными словами, эти ограничения задают множество всех максимальных потоков (для случая, когда существует совершенное паросочетание). Его вершинами, как нетрудно догадаться, являются целочисленные потоки, отвечающие совершенным паросочетаниям в \(G\). Частным случаем этого утверждения (для полного двудольного графа \(K_{n,n}\)) является теорема Биркгофа–фон Неймана, которую мы уже видели не один раз. Сформулируем это результат аккуратно.

Теорема [Birkhoff, 1946].

  1. Политоп паросочетаний двудольного графа, заданный как выпуклая оболочка индикаторных векторов паросочетаний в \(\mathbb{R}^{|E|}\), может быть описан двойственным образом как полиэдр, заданный неравенствами (1), (2).
  2. Политоп совершенных паросочетаний двудольного графа, заданный как выпуклая оболочка индикаторных векторов совершенных паросочетаний в \(\mathbb{R}^{|E|}\), может быть описан двойственным образом как полиэдр, заданный ограничениями (1), (2’).

Если мы работаем с недвудольным графом \(G\), то условий (1)-(2) уже недостаточно для описания политопа паросочетаний. Обсудим это подробно.

Пусть \(G = (V,E)\) – граф. Пронумеруем рёбра от 1 до \(|E|\). Для каждого подмножества рёбер \(M \subseteq E\) мы можем рассмотреть вектор \( 1_M \in \mathbb{R}^{|E|}\), компоненты которого равны единицам в позициях, отвечающих элементам из \(M\), и нулям в позициях, отвечающих элементам из \(E \setminus M\). Определим два замечательных многогранника в пространстве \(\mathbb{R}^{|E|}\). Политопом паросочетаний \(\mathcal{M}(G)\) называется выпуклая оболочка всех векторов \(1_M\) по всем паросочетаниям \(M\) графа \(G\). Политопом совершенных паросочетаний \(\mathcal{PM}(G)\) называется выпуклая оболочка всех векторов \(1_M\) по всем совершенным паросочетаниям \(M\) графа \(G\). Для вершины \(v \in V\) будем обозначать через \(\delta(v)\) множество рёбер, инцидентных вершине \(v\). Для подмножества вершин \(U \subseteq V\) через \(\delta(U)\) будем обозначать множество рёбер, у которых один конец лежит в \(U\), а второй – в \(V\setminus U\); через \(E(U)\) будем обозначать множество рёбер, у которых оба конца лежат в \(U\). Следующая теорема обобщает теорему Биркгофа, хотя это может быть не очень очевидно (точно так же, как теорема Татта влечёт лемму Холла).

Теорема [Edmonds, 1965].

  1. Политоп паросочетаний \(\mathcal{M}(G)\) может быть описан двойственным образом как полиэдр, заданный следующими неравенствами на вектор \(x \in \mathbb{R}^{|E|}\):

(i) \(x_e \ge 0 \quad \forall e \in E\);

(ii) \(\sum\limits_{e \in \delta(v)} x_e \le 1 \quad \forall v \in V\);

(iii) \(\sum\limits_{e \in E(U)} x_e \le \lfloor |U|/2 \rfloor \quad \forall U \subseteq V, ~U \text{ нечётной мощности}\).

  1. Политоп совершенных паросочетаний \(\mathcal{PM}(G)\) может быть описан двойственным образом как полиэдр, заданный следующими ограничениями на вектор \(x \in \mathbb{R}^{|E|}\):

(i) \(x_e \ge 0 \quad \forall e \in E\);

(ii’) \(\sum\limits_{e \in \delta(v)} x_e = 1 \quad \forall v \in V\);

(iii’) \(\sum\limits_{e \in \delta(U)} x_e \ge 1 \quad \forall U \subseteq V, ~U \text{ нечётной мощности}\).

Доказательство. Вначале докажем часть 2 про совершенные паросочетания.

Ясно, что любая точка из \(\mathcal{PM}(G)\) удовлетворяет (i), (ii’), (iii’). Чтобы доказать обратное утверждение, предположим, что нашлась вершина \(x\) полиэдра \(Q\), заданного неравенствами (i), (ii’), (iii’), которая не принадлежит \(\mathcal{PM}(G)\). Предоположим также, что этот контрпример минимизирует \(|V|+|E|\). Тогда \(0<x_e<1\) для всех \(e\in E\) (в противном случае, если \(x_e=0\)), то мы можем выбросить ребро \(e\), а если \(x_e=1\), то мы можем выбросить ребро \(e\) вместе с обоими концами). Теперь степень каждой вершины хотя бы 2, и поэтому \(|E| \ge |V|\). Если \(|E| = |V|\), каждая степень равна ровно 2, граф распадается на циклы, и теорема легко проверяется. Значит, \(|E| > |V|\). Из условия (iii’) для \(U = V\) следует, что \(|V|\) чётное.

Так как \(x\) – вершина \(Q\), то по крайней мере \(|E|\) линейно независимых ограничений из числа (i), (ii’), (iii’) выполняются в виде равенства 4 . В частности, хотя бы одно ограничение типа (iii’) обращается в равенство (так как \(|E| > |V|\)). Поэтому существует подмножество нечётной мощности \(U \subset V\), \(3 \le |U| \le |V|-3\), такое что \(\sum\limits_{e \in \delta(U)} x_e = 1\).

Рассмотрим (мульти)графы \(G/U\) и \(G/ (V\setminus U)\), которые получаются из \(G\) отождествлением вершин из \(U\) и \(V\setminus U\) соответственно. Пусть \(x’, x’’\) – проекции вектора \(x\) на соответствующие пространства вида \(\mathbb{R}^{|E|}\), отвечающие этим двум графам. Ограничения типа (i), (ii’), (iii’) выполнены для этих векторов (и для соответствующих графов). Из минимальности \(|V|+|E|\) следует, что \(G/U\) имеет совершенные паросочетания \(M_1’, \ldots, M_k’\), так что \(x’\) может быть представлена как выпуклая комбинация векторов \(1_{M_1’}, \ldots, 1_{M_k’}\). Важное замечание: эту комбинацию можно полагать рациональной, потому что \(Q\) задан рациональными неравенствами! Тогда без потери общности можно считать, что \[ x’ = \frac{1}{k} \sum_{i=1}^k 1_{M_i’}. \] Аналогично, \(G/(V\setminus U)\) имеет совершенные паросочетания \(M_1’’, \ldots, M_k’’\), так что \[ x’’ = \frac{1}{k} \sum_{i=1}^k 1_{M_i’’}. \]

Для любого \(e \in \delta(U)\) количество паросочетаний \(M_i’\), содержащих \(e\), равно \(k x’_e = k x_e = k {x’’}_e\), и равно количеству паросочетаний \(M_i’’\), содержащих \(e\). Поэтому мы можем полагать, что \(M_i’\) и \(M_i’’\) имеют общее ребро в \(\delta(U)\) для любого \(i = 1, \ldots, k\). Поэтому \(M_i := M_i’ \cup M_i’’\) – совершенное паросочетание в \(G\). Тогда \[ x = \frac{1}{k} \sum_{i=1}^k 1_{M_i}, \] и \(x\) принадлежит \(\mathcal{PM}(G)\).

Часть 1 выводится из части 2 следующим образом.

Опять-таки ясно, что любая точка из \(\mathcal{M}(G)\) удовлетворяет (i), (ii), (iii). Пусть \(x\) удовлетворяет (i)-(iii). Пусть \(G’ = (V’,E’)\) – копия графа \(G\), и пусть \(\widetilde{G} = (\widetilde{V},\widetilde{E})\) получается объединением \(G\) и \(G’\), в которое мы ещё добавим все рёбра вида \(vv’\), где \(v’ \in V’\) обозначает копию вершины \(v \in V\).

Вектор \(x \in \mathbb{R}^{|E|}\) определяет вектор \(\widetilde{x}\in \mathbb{R}^{|\widetilde{E}|}\) по правилам \[ \begin{cases} \widetilde{x}_e = x_e, & e \in E; \\ \widetilde{x}_{e’} = x_e, & e’ \in E’; \\ \widetilde{x}_{vv’} = 1 - \sum\limits_{e \in \delta(v)} x_e, & v \in V. \end{cases} \]

Согласно части 2, \(\widetilde{x} \in \mathcal{PM}(\widetilde{G})\) (условия (i), (ii’), (iii’) нужно проверить, но это нетрудно). Отсюда следует, что \(x \in \mathcal{M}(G)\). \(\square\)

  1. Нужно, конечно, это объяснить поподробней. Здесь важно не только утверждение самой теоремы, но и конструкция её следствия: то, как работает метод Форда--Фалкерсона на целочисленной сети.

  2. Заполните детали этого рассуждения!

  3. Вообще говоря, политоп паросочетаний определяется через свои вершины, а доказывать нужно как раз факт, что его можно представить системой неравенств. Аккуратно всё это будет сформулировано ниже.

  4. Это утверждение известно под названием "алгебраический критерий вершины". Смысл его в том, что в n-мерном пространстве любая вершина любого многогранника прилежит хотя бы к n граням. Интуитивно это весьма очевидно: каждая грань имеет коразмерность 1, и пересечь нужно хотя бы n граней, чтобы получить множество размерности 0 (вершину).