Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на вопросы по СА и ИО1.doc
Скачиваний:
14
Добавлен:
01.03.2025
Размер:
6.8 Mб
Скачать

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

Задачи, в которой критерием является поток сети - задача о макс. потоке:

Z max; kt, ks; 0xijdij.

Для нее разработаны алгоритмы, которые эффективнее методов решения транспортных задач. Они работают с сетью как разновидностью графов. Пусть дан ориентированный граф G=(V,U), где V и U - множества вершин и дуг соответственно. Разрез сети на подмножестве вершин AV, A, AV, tA, sV\A - множество дуг ijU таких, что iA jV\A. Обозначим его P(A). Сумма пропускных способностей дуг разреза - величина (пропускная способность) разреза:

Пример: Построим один из разрезов сети.

Если A={t,1,2,3}, то разрезом будет множество дуг P(A)={1,4; 1,6; 2,5; 3,6}, а его величина определяется как d(A)=d14+d16+d25+d36. Дуги, составляющие этот разрез, выделены жирными линиями. Разрез сети, имеющий минимальную пропускную способность - минимальный разрез. Задачи максимизации потока и минимизации величины разреза являются двойственной парой. -> Теорема Форда и Фалкерсона: Величина потока сети (от истока к стоку) не превосходит пропускной способности минимального разреза и существует макс. поток, величина которого равна пропускной способности минимального разреза.

Методы решения задачи о максимальном потоке основаны на последовательном увеличении потока при соблюдении условий задачи. Аналогом цикла пересчета является увеличивающая цепь - цепь, соединяющая исток и сток, все дуги которой допустимые. Дуга является допустимой увеличивающей, если ее направление совпадает с направлением потока и поток на ней < пропускной способности xij<dij. Дуга - допустимой уменьшающей, если напр-е дуги противоположно потоку и xij >0.

На увеличивающей дуге поток м возрасти на ij=dij-xij, а на уменьшающей дуге возможно снижение потока, равное ij=xij. Макс. допустимое изменение величины потока по увеличивающей цепи определяется как минимальное из возможных: 0= Макс. поток сети может быть определен по следующему алгоритму.

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

  2. Построить увеличивающую цепь. Если это невозможно, решение завершено.

  3. В ычислить 0.

  4. Переместить вдоль цепи 0, прибавляя к потокам на увеличивающих дугах и вычитая из потоков уменьшающих дуг. Поток сети увеличивается на 0. На шаг 2.

П ример: Определить максимальный поток сети. Пропускные способности дуг показаны у стрелок перед косой чертой. Задаем начальный поток. Значения начальных потоков дуг даны за косой чертой, они удовлетворяют условиям задачи. Величина потока сети Z(0)=7.

Первая итерация. Строим увеличивающую цепь. Она показана на рис. утолщенными линиями. Определяем приращение потока: 0 = min(7-3, 5-1, 6-4)=2. Увеличиваем потоки дуг цепи на 2 --->

Z(1)= Z(0) + 0=7+2=9.

Вторая итерация.

Строим увеличивающую цепь {t,1; 1,4; 4,s}. 0 = min(7-5, 3-2, 5-1)=1.Увеличиваем потоки по дугам цепи на 0.

<--- Z(2)= Z(1) + 0 = 9+1=10.

Третья итерация.

Н овая цепь состоит из увеличивающих дуг t,3 и 4,s и уменьшающей дуги 4,3. 0 = min(4-2, 1, 5-2)=1. Изменяем потоки: на дугах t,3 и 4,s увеличиваем, а на дуге 4,3 уменьшаем на величину 0. --->

Тогда получаем Z(3)= Z(2) + 0 = 10+1=11.

Так как увеличивающую цепь построить нельзя, последнее решение является оптимальным. Максимальный поток сети равен 11.

Минимальный разрез рассмотренной сети соответствует множеству вершин А={t,1,2,3,5,6}, то есть P(A)={1,4; 5,s; 6,s}. Его пропускная способность d(A)=d14+d5s+d6s=3+2+6=11 равна величине максимального потока, что согласно теореме Форда-Фалкерсона также является признаком оптимальности найденного решения.