Файл: И.А. Кузнецов Сетевые модели. Методические указания к практическим занятиям.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.06.2024

Просмотров: 46

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

12

3 - 8

0,75

-0,124939

0,124939

4 - 8

0,81

-0,091515

0,091515

4 - 9

0,51

-0,292430

0,292430

5 - 6

0,9

-0,045757

0,045757

5 - 7

0,85

-0,070581

0,070581

5 - 8

0,8

-0,096910

0,096910

6 - 7

0,93

-0,031517

0,031517

7 - 8

0,6

-0,221847

0,221847

7 - 10

0,7

-0,154902

0,154902

8 - 9

0,61

-0,214670

0,214670

8 - 10

0,74

-0,130768

0,130768

9 - 10

0,88

-0,055517

0,055517

Расчет показывает, что наиболее выгодным с точки зрения возможности беспрепятственного проезда является путь 1 - 6 - 7 - 10 - 9. Полная вероятность беспрепятственного проезда по нему составляет 0,560,930,70,88=0,3208. Длина этого пути составляет 12 км. Кратчайшим же является путь 1 - 2 - 5 - 8 - 9 (длина - 11 км), однако вероятность беспрепятственного проезда по нему равна

0,740,690,80,61=0,2492.

Практическое занятие № 4 ЗАДАЧА О МАКСИМАЛЬНОМ ПОТОКЕ

Цель работы

Освоить применение алгоритма для отыскания цепочек, по которым возможна пересылка максимального количества единиц продукции в заданные сроки.

Задание

1. Для заданной модели транспортной сети с указанными величинами пропускных способностей дуг отыскать цепь, поток по которой будет максимальным.


13

2.Сформулировать предложения по рациональному изменению пропускных способностей участков сети с тем, чтобы сделать возможной пересылку в требуемом объеме.

Исходные данные: ГТС с указанными величинами пропускных способностей дуг.

Методические указания

Задача о максимальном потоке состоит в поиске способа пересылки максимального количества единиц потока из источника в сток при условии отсутствия превышения пропускных способностей дуг исходного графа.

Через f (x, y) будем обозначать количество единиц потока, прошедших по дуге (x, y) . Для любого потока из s в t количество единиц,

выходящих из любой вершины x (x s, x

t) , должно быть равно коли-

честву единиц, входящих в эту вершину, т.е.

 

f ( x, y)

f( y, x) = 0

(x s, x t),

(1)

y

X

y

X

 

 

где Х - множество всех вершин рассматриваемого графа. Кроме того,

количество единиц потока, проходящего по каждой дуге

(x, y) , не

должно превышать пропускной способности этой дуги:

 

0 ≤ f (x, y) c( x, y)

( x, y) А ,

(2)

где А - множество всех дуг рассматриваемого графа.

Наконец, суммарное число единиц потока, выходящих из источника, должно быть равно суммарному числу единиц потока, входящих в сток. Если указанное число обозначить через v, то это условие можно

представить следующим образом:

 

 

 

 

f ( x, y)

f( y, s)

= ν,

(3)

y

X

y

X

 

 

f ( y,t)

f( t, y)

= ν.

(4)

y

X

y

X

 

 

Любой поток из s в t должен удовлетворять всем условиям (1) -

(4). И наоборот, если может быть найден набор величин

f (x, y) при

(x, y) А , для которого выполняются эти четыре условия, то такой на-

бор представляет собой поток из источника s в сток t.

Задача о максимальном потоке состоит в поиске потока, удовлетворяющего условиям (1) - (4), для которого величина v максимальна.


14

Задача о максимальном потоке является задачей линейного программирования и может быть решена симплексным методом. Однако существует более простой алгоритм решения этой задачи - так называемый алгоритм Форда - Фалкерсона.

Основная идея этого алгоритма состоит в следующем. Выбирается некоторый начальный поток из s в t и с помощью алгоритма поиска увеличивающей цепи выполняется поиск увеличивающей цепи. Если он оказывается успешным, то поток вдоль найденной цепи увеличивается до максимально возможного значения. Затем выполняется поиск новой увеличивающей цепи и т.д. Если на каком-то этапе этой процедуры увеличивающую цепь найти не удается, выполнение алгоритма заканчивается: найденный поток является максимальным.

Поиск увеличивающей цепи. Применительно к графам, вообще говоря, поток задает способ пересылки некоторых объектов из одной вершины в другую. Вершина, из которой начинается перемещение объектов, называется источником и обычно обозначается через s. Вершина, в которой заканчивается перемещение объектов, называется стоком и обычно обозначается через t. Объекты, которые перемещаются из источника в сток, называются единицами потока (или просто единицами).

Если количество единиц потока, которое может проходить по дуге (x, y) , ограничено, то говорят, что дуга (x, y) имеет ограниченную пропускную способность. Максимальную величину пропускной способности будем обозначать через c(x, y) . Кроме того, через a(x, y) будем обозначать стоимость перемещения единицы потока по дуге (x, y) .

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

f (x, y) . Очевидно, 0 ≤ f (x, y) c( x, y) . Дуги графа можно отнести к трем

различным категориям:

1) дуги, в которых поток не может не увеличиваться, не уменьшаться (множество таких дуг обозначим через N);

2) дуги, в которых поток может увеличиваться (множество таких дуг обозначим через I)

3) дуги, в которых поток может уменьшаться (множество таких дуг обозначим через R).

Множеству N, например, должны принадлежать дуги, имеющие нулевую пропускную способность или значительную стоимость прохо-


15

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

Обозначим через i(x, y) максимальную величину, на которую может быть увеличен поток в дуге. Очевидно, что i(x, y) = c( x, y) - f( x, y) .

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

min

{ i(x, y) }.

(5)

(x,y)

P

 

Каждая цепь из s в t, по которой могут быть посланы дополнительные единицы потока, называется увеличивающей цепью. Нахождение увеличивающей цепи осуществляется с помощью описываемого ниже алгоритма, основная идея которого заключается в построении растущего из вершины s дерева, составленного из окрашенных дуг, по которому могут посылаться дополнительные единицы потока.

Шаг 1. Определить состав множеств N, I и R. Дуги множества N из дальнейшего рассмотрения исключить (поскольку в них поток увеличиваться не может).

Шаг 2. Окрашивать дуги и вершины в соответствии с приведенными ниже правилами до тех пор, пока либо не будет окрашена вершина t, либо окраска новых вершин станет невозможной.

Правила окрашивания вершины у и дуги (x, y) при уже окрашенной вершине х:

а) если (x, y) I , то окрашивают вершину у и дугу (x, y) ; б) если (x, y) R , то окрашивают вершину у и дугу (y, x) ;

в) в противном случае окрашивание вершины у и дуги (x, y) не

производится.

В случае окрашивания вершины t действие алгоритма прекращается: в сети находится единственная увеличивающая цепь. В противном


16

случае, когда вершина t не окрашена, а окрасить новые вершины и дуги уже невозможно, в сети отсутствуют увеличивающие цепи из s в t.

Формальное описание алгоритма выглядит следующим образом. Шаг 1. Выбрать любой начальный поток из вершины s (источник)

в вершину t (сток), т.е. любой набор величин f (x, y) , удовлетворяющий соотношениям (1) - (4). Если ни один из начальных потоков из s в t неизвестен, задать начальный поток, положив для всех (x, y) f( x, y) = 0 .

Шаг 2. Сформировать множества дуг I и R согласно правилам, приведенным в алгоритме поиска увеличивающей цепи.

Шаг 3. На множествах I и R, сформированных на предыдущем шаге, применить к исходному графу алгоритм поиска увеличивающей цепи. Если при этом увеличивающую цепь найти не удастся, закончить процедуру алгоритма: найденный поток является максимальным. В противном случае осуществить максимально возможное увеличение потока вдоль найденной увеличивающей цепи. Затем вернуться к шагу

2.

Пример. Решим задачу о максимальном потоке для ГТС, изображенного на рис. 1. Источником является вершина 11, стоком - вершина 9. Будем считать, что цифры возле дуг - их пропускные способности c(x, y) . Общее количество единиц потока, которое необходимо переслать, v=7 (т.к. пересылка большего количества из вершины 11 невозможна).

На первом шаге попытаемся найти цепь, дающую возможность переслать максимальное количество единиц потока. Такой цепью будет цепь 11 - 1 - 2 - 3 - 4 - 9, по ней возможно переслать 3 единицы потока. После этого дуги (2 - 3) и (3 - 4) попадают во множество N (их пропускные способности исчерпаны). Остается переслать 4 единицы потока.

2-й шаг. Ищем по тому же принципу увеличивающую цепь. Это цепь 11 - 1 - 6 - 7 - 10 - 9, по ней можно переслать 2 единицы потока. Во множество N переходят дуги (1 - 6) и (6 - 7). Остается переслать 2 единицы потока.

3-й шаг. Ищем новую увеличивающую цепь. Единственный возможный вариант - цепь 11 - 1 - 2 - 5 - 8 - 9, по ней возможно переслать 1 единицу потока (т.к. 3 единицы уже пересылаются по первой цепи, а с(1,2)=4). После этого дуга (1 - 2) также переходит во множество N, и выполнение алгоритма заканчивается (из вершины 1 больше нельзя выслать ни одной единицы потока).