Порядок выполнения работы.
1. Изучить пример, приведённый в методическом пособии.
2. Построить общую математическую модель задачи о максимальном потоке.
3. Сформулировать частную модель задачи с указанными параметрами согласно выданному заданию.
4. Используя диалоговую программу Potok, решить сформулированную задачу.
6. Результаты лабораторной работы оформить в виде отчета.
Предварительные сведения.
Аналитически задача о максимальном потоке решается сведением ее к задаче целочисленного линейного программирования.
Пусть задана ориентированная 2 х –
полюсная сеть Рис. 1. Вход – узел № 0.
Выход – узел № 3. Весовые
коэффициенты дуг
– максимальные пропускные потоки дуг
из узла
в узел
представлены в таблице 1.
j i |
0 |
1 |
2 |
3 |
0 |
|
3 |
1 |
|
1 |
|
|
|
1 |
2 |
|
1 |
|
4 |
Обозначения и цифры рядом с дугами – максимальные пропускные способности дуг.
–
планируемые потоки в дугах.
Требуется определить максимальную пропускную способность сети.
Аналитически критерий максимального
потока в сети, обозначим его через
,
определяется потоком на выходе сети,
т.е.
(1)
Естественно этот максимальный поток в силу неразрывности потока эквивалентен максимальному потоку на входе, т.е.
Соответственно в силу неразрывности потока входящие и выходящие потоки в каждом промежуточном (транзитивном) узле (№ 1 и №2) должны быть равны. Поэтому максимальный поток на выходе сети (1) определяется при условиях, описывающих неразрывность потока узлах № 1 и № 2.
(2)
и ограничений, определяющих возможные значения переменных , которые ограничены сверху максимальной пропускной способностью дуги, т.е.
(3)
Таким образом, задача о максимальном потоке сети (1) – (3), представленной на Рис. 1, относится к классу задач линейного целочисленного программирования.
По теореме Форда – Фалкерсона максимальная пропускная способность сети равна минимальной пропускной способности ее сечений. Данная теорема позволяет находить максимальную пропускную сети геометрически. Следовательно, согласно теореме Форда – Фалкерсона, максимальная пропускная способность сети, представленной на Рис. 1, равна 2.
В общем виде задача о максимальном
потоке сети с
узлами определяется выражением (4) –
(6):
(4)
,
, (5)
,
. (6)
Здесь
множество
индексов узлов сети, с которыми связан
Вход – узел 0.
множество
индексов узлов сети, которые связаны с
Выходом – узлом n.
множество
индексов узлов сети, которые связаны с
промежуточным (транзитивном) узлом
.
множество
индексов узлов сети, с которыми связан
промежуточный (транзитивный) узел
.
максимальный
поток из узла
в узел
.
Пример выполнения работы
Содержательная постановка задачи.
С острова А на остров В Рис.2 можно попасть только на лодках. Прямого сообщения между островами нет. Лодки курсируют между островами архипелага по указанной схеме. Количество человек, которое может быть перевезено за сутки между каждой парой островов, для которых есть прямое сообщение, также указано на схеме. При движении от острова А к острову В люди на промежуточных островах не остаются. Новые пассажиры с промежуточных островов не подсаживаются.
Определить, какое максимальное количество человек за сутки может быть перевезено с острова А на остров В. Также определить количество пассажиров между каждой парой сообщающихся островов.
Построение математической модели. Всего островов 8. Пронумеруем острова: остров А- это узел № 0, остров В – это узел №7. Остальные острова уже пронумерованы. Обозначим xij - количество людей, перевозимое по дуге (i,j), т.е. с острова i на остров j. Значения i и j меняются от 0 до 7. Очевидно, все величины xij ограничены указанным на схеме максимальным количеством перевозимых за сутки пассажиров. Обозначим это количество как dij. Тогда задача (4) – (6) о максимальном потоке сети, представленной на Рис.2, запишется в виде
Таблица 2
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
|
12 |
14 |
|
|
|
|
|
1 |
|
|
9 |
9 |
|
|
|
|
2 |
|
|
|
11 |
|
|
|
|
3 |
|
|
|
|
17 |
|
12 |
11 |
4 |
|
|
|
|
|
4 |
|
|
5 |
|
|
|
|
|
|
7 |
17 |
6 |
|
|
|
|
|
8 |
|
10 |
7 |
|
|
|
|
|
|
|
|
х01- (х12+ х13)=0
х02-х23=0
х13+x23- (х34+ х36+ х37)=0
х34-х45=0
х45+x65- (х56+ х57)=0
х36+x56- (х65+ х67)=0
,
Здесь максимальные пропускные способности дуг представлены в таблице 2.
Сформулированная задача представляет собой задачу целочисленного линейного программирования. Задача решается по алгоритму Форда, который реализован в программе Potok. Порядок решения сформулированной задачи с использованием программы Potok осуществляется следующим образом.
Шаг 1
В проводнике
запускается исполняемый файл Potok.exe.
После запуска исполняемого файла
Potok.exe
открывается рабочая область Рис.1,
где необходимо указать количество узлов
сети (без учета нулевого узла-источника).
Рис. 1
После этого открывается окно ввода исходных данных- пропускных способностей сети по дугам. Ввод исходных данных осуществляется студентом самостоятельно, после чего необходимо нажать кнопку «Инициализация», что соответствует окончательному подтверждению введенных данных Рис. 2
Рис. 2
Далее, нажав на кнопку «Проверка дуг», производится проверка на наличие к каждой дуге графа обратной, что необходимо для работы алгоритма Форда. В случае отсутствия обратной дуги она добавляется искусственно с пропускной способностью, равной 0 Рис. 3.
Рис. 3
Кнопка «Найти поток» непосредственно активизирует вычисления по алгоритму Форда: в верхней части таблицы отражается пометка столбцов, определяется путь из источника в сток, и по нему пропускается максимально возможный поток по нажатии на кнопку «Улучшить». Все этапы отражаются в таблице с обозначениями, принятыми в алгоритме Рис. 4.
Рис. 4
После окончания работы алгоритма выдается соответствующее сообщение Рис. 5:
Рис. 5
И результирующая таблица с указанием потоков по дугам Error: Reference source not found6:
Таблица решения
Рис. 6
Решение данной задачи при помощи программы Potok дает следующие результаты: максимальный поток равен 20, нагрузка по дугам отражена в таблице решения.
Полученные результаты в терминах поставленной задачи могут быть интерпретированы
следующим образом: всего за сутки между островами А и В может быть перевезено 20 человек. При этом с острова А 9 человек будет перевезено на остров 1 и 11 на остров 2. С острова 1 будет перевезено 9 человек на остров 3. Также на остров 3 доставят 11 человек с острова 2. Далее с острова №3 4 человека доставят на остров 4, 5 человек на остров 6 и 11 человек в пункт назначения остров В. С четвертого острова 4 человека переедут на пятый, откуда они попадут на остров В. С шестого острова 5 человек переедут на В. Итого: всего переедет 20 человек.
