Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Исследование операций и теория игр. Учебное пособие
.pdf
221
Минимальная из этих двух величин называется максимальным
увеличением потока по соответствующей цепи. Для того, чтобы
максимально увеличить поток по увеличивающей цепи, нужно на
каждой прямой дуге увеличить поток на максимальное увеличение
потока, а на каждой обратной дуге — уменьшить на максимальное
увеличение потока. В результате хотя бы одна из дуг цепи станет
насыщенной или пустой.
Итак, для того, что бы переслать дополнительное количество
единиц потока из источника в сток, необходимо найти
увеличивающую цепь. Идея алгоритма поиска увеличивающей цепи
состоит в окрашивании дуг, по которым возможно увеличить поток в
сети. Окрашиваются так же и вершины, до которых существуют
увеличивающие цепи.
Алгоритм поиска увеличивающей цепи
1. Определить множества дуг N, I и R. Дуги множества N из
дальнейшего рассмотрения исключить. Окрасить вершину s и
включить ее в множество M окрашенных, но еще не обработанных
алгоритмом вершин.
2. Пока вершина t не окрашена и множество M не пусто, взять
произвольную вершину x из множества M и для каждой неокрашенной
вершины y выполнить:
1) если (x, y) ∈ I, то окрасить дугу (x, y), вершину y окрасить и
включить ее в множество M;
2) если (y, x) ∈ R, то окрасить дугу (y, x), вершину y окрасить и
включить ее в множество M.
3. Если вершина t окрашена, то выбрать окрашенные дуги,
образующие увеличивающую цепь, иначе увеличивающей цепи не
существует. Конец алгоритма.
Пример 9.1. Найти увеличивающую цепь в сети (рис. 9.2) и
максимально увеличить по ней поток. Вершину 1 считать истоком,
вершину 7 — стоком. На дугах сети первое число обозначает
пропускную способность дуги, второе — поток в дуге.
Определяем в данной сети множества дуг N, I и R:
N = ∅;
I = {(1,6), (2,3), (2,4), (2,5), (3,4), (4,7), (5,1), (5,7), (6,3), (7,6)};
R = {(1,2), (1,3), (2,3), (2,4),(3,7), (4,7)}.

6
7
3,0
7,1
10,1
1,1
3,3
8,0
2,2
6,0
4,4
7,0
9,0
5,0
1,0
7,0
6
7
3,0
7,1
10,1
1,1
3,3
8,0
2,2
6,0
4,4
7,0
9,0
5,0
1,0
7,0
222
4
3
2
1
5
Рис. 9.2. Диаграмма сети
Окрашиваем вершину 1 и включаем ее в множество M, M = {1}.
Берем из множества M вершину 1 (множество M становится
пустым) и окрашиваем дугу (1,6), вершину 6 и вершину 6 включаем в
множество M, M = {6}. Окрасить больше ничего не можем. Результат
окраски представлен на рис. 9.3.
4
3
2
1
5
Рис. 9.3. Диаграмма сети

6
7
3,0
7,1
10,1
1,1
3,3
8,0
2,2
6,0
4,4
7,0
9,0
5,0
1,0
7,0
223
Множество M не пусто, берем из него вершину 6 и окрашиваем
дугу (6,3), вершину 3 и вершину 3 включаем в множество M, M = {3}.
Окрасить больше ничего не можем. Результат окраски представлен на
рис. 9.4.
4
3
2
1
5
Рис. 9.4. Диаграмма сети
Множество M = {3} не пусто, берем из него вершину 3 и
окрашиваем дуги (2,3), (3,4), вершины 2 и 4 и вершины 2 и 4 включаем
в множество M, M = {2,4}. Окрасить больше ничего не можем.
Результат окраски представлен на рис. 9.5.
Множество M = {2,4} не пусто, берем из него вершину 2 и
окрашиваем дугу (2,5), вершину 5 и вершину 5 включаем в множество
M, M = {4,5}. Окрасить больше ничего не можем. Результат окраски
представлен на рис. 9.6.
Множество M = {4,5} не пусто, берем из него вершину 5 и
окрашиваем дугу (5,7) и вершину 7. Вершина 7 (сток) окрашена.
Результат окраски представлен на рис. 9.7. Увеличивающую цепь
образуют дуги (1,6), (6,3), (2,3), (2,5), (5,7). В этой цепи дуга (2,3)
обратная, остальные — прямые. Максимальное увеличение потока по
этой цепи составит одну единицу. После увеличения потока на одну
единицу (рис. 9.8) дуга (2,3) станет пустой.

6
7
3,0
7,1
10,1
1,1
3,3
8,0
2,2
6,0
4,4
7,0
9,0
5,0
1,0
7,0
6
7
3,0
7,1
10,1
1,1
3,3
8,0
2,2
6,0
4,4
7,0
9,0
5,0
1,0
7,0
224
4
3
2
1
5
Рис. 9.5. Диаграмма сети
4
3
2
1
5
Рис. 9.6. Диаграмма сети

6
7
3,0 7,1
10,0
1,1
3,3
8,0
2,2
6,1
4,4
7,1
9,0
5,1
1,0
7,1
6
7
3,0
7,1
10,1
1,1
3,3
8,0
2,2
6,0
4,4
7,0
9,0
5,0
1,0
7,0
225
4
3
2
1
5
Рис. 9.7. Диаграмма сети
4
3
2
1
5
Рис. 9.8. Диаграмма сети

6
7
3
7
10
1
3
8
2
6
4
9
5
1
7
226
9.3. Задача о максимальном потоке
Напомним, что потоком в сети N = (G, C) называется функция
F, определенная на множестве дуг сети, если выполняются условия
(9.1) — (9.4) (см. выше). Значение v в условиях 9.3 и 9.4 называется
величиной потока. Задача о максимальном потоке заключается в
поиске потока, величина v которого максимальна, т. е. в максимизации
величины v при соблюдении ограничений (9.1) — (9.4). Как видно, эта
задача является задачей линейного программирования и может быть
решена с помощью симплекс-метода. Здесь же мы рассмотрим более
простой и естественный подход к решению рассматриваемой задачи,
предложенный Фордом и Фалкерсоном.
Идея алгоритма Форда и Фалкерсона очень проста. Выбирается
некоторый начальный поток (можно взять нулевой поток) и с
помощью алгоритма поиска увеличивающей цепи выполняется поиск
увеличивающей цепи. Если цепь найдена, то поток вдоль найденной
цепи увеличивается на максимально возможную величину. Затем
выполняется поиск новой увеличивающей цепи и т. д. Если на
некоторой итерации увеличивающую цепь найти не удается,
выполнение алгоритма заканчивается: текущий поток является
максимальным.
Пример 9.2. Найти максимальный поток в сети (рис. 9.9). Вершину
1 считать истоком, вершину 7 — стоком. На дугах сети указана
пропускная способность.
4
3
7
2
1
5
Рис. 9.9. Диаграмма сети

6
7
3,0
7,0
10,0
1,0
3,0
8,0
2,0
6,0
4,0
7,0
9,0
5,0
1,0
7,0
6
7
3,0 7,0
10,0
1,0
3,0
8,0
2,0
6,0
4,0
7,0
9,0
5,0
1,0
7,0
227
В качестве начального потока выберем нулевой поток (рис. 9.10).
4
3
1
5
Рис. 9.10. Диаграмма сети
При поиске увеличивающей цепи окрасятся вершины и дуги,
отмеченные на рис. 9.11.
4
3
1
2
2
5
Рис. 9.11. Диаграмма сети

6
7
3,0 7,0
10,0
1,0
3,3
8,0
2,0
6,0
4,3
7,0
9,0
5,0
1,0
7,0
6
7
3,0
7,0
10,0
1,0
3,3
8,0
2,0
6,0
4,3
7,0
9,0
5,0
1,0
7,0
228
Увеличивающую цепь образуют дуги (1,3), (3,7). Поток по этой
цепи можно увеличить на три единицы. Дуга (1,3) станет насыщенной.
Результат увеличения потока представлен на рис. 9.12.
4
3
1
5
Рис. 9.12. Диаграмма сети
При поиске увеличивающей цепи в сети (рис. 9.12) окрасятся
вершины и дуги, отмеченные на рис. 9.13.
4
3
1
2
2
5
Рис. 9.13. Диаграмма сети

6
7
3,0 7,0
10,1
1,0
3,3
8,0
2,1
6,0
4,4
7,0
9,0
5,0
1,0
7,0
6
7
3,0
7,0
10,1
1,0
3,3
8,0
2,1
6,0
4,4
7,0
9,0
5,0
1,0
7,0
229
Увеличивающую цепь образуют дуги (1,2), (2,3), (3,7). Поток по
этой цепи можно увеличить на одну единицу. Дуга (3,7) станет
насыщенной. Результат увеличения потока представлен на рис. 9.14.
4
3
1
5
Рис. 9.14. Диаграмма сети
При поиске увеличивающей цепи в сети (рис. 9.14) окрасятся
вершины и дуги, отмеченные на рис. 9.15.
4
3
1
2
2
5
Рис. 9.15. Диаграмма сети

6
7
3,0 7,0
10,1
1,0
3,3
8,0
2,2
6,0
4,4
7,0
9,0
5,1
1,0
7,1
6
7
3,0
7,0
10,1
1,0
3,3
8,0
2,2
6,0
4,4
7,0
9,0
5,1
1,0
7,1
230
Увеличивающую цепь образуют дуги (1,2), (2,5), (5,7). Поток по
этой цепи можно увеличить на одну единицу. Дуга (1,2) станет
насыщенной. Результат увеличения потока представлен на рис. 9.16.
4
3
1
5
Рис. 9.16. Диаграмма сети
При поиске увеличивающей цепи в сети (рис. 9.16) окрасятся
вершины и дуги, отмеченные на рис. 9.17.
4
3
1
2
2
5
Рис. 9.17. Диаграмма сети
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
