Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР 1 Форд-Фалкерсон.docx
Скачиваний:
6
Добавлен:
19.08.2019
Размер:
122.35 Кб
Скачать

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА № 51

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Ст. преп.

П. Л. Волков

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

Отчет по лабораторной работе

Оптимизация потока распределенных вычислительных сетей.

по курсу: Сети связи и системы коммутации

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР.

2851

А. С. Коренчук

подпись, дата

инициалы, фамилия

Санкт-Петербург 2012

1. Цель работы.

Изучение алгоритма оптимизации потока на графах и его применение.

2. Вариант задания.

3. Результаты исследования графа сети.

3.1. Построить три NS NT – разделяющих множества.

Назовем VW-разделяющим множеством такое множество дуг графа, которое обладает тем свойством, что каждая простая цепь из вершины V в вершину W содержит как минимум одну дугу из этого множества.

NsNт – разделяющие множества:

1) дуги (N2, N3), (N2, N5)

2) дуги (N5, N0), (N7, N0)

3) дуги (N3, N4), (N3, N6), (N5, N0), (N5, N6)

3.2. Построить три NS NT – отделяющих множества.

Аналогично VW-отделяющим множеством назовем такое множество вершин графа (не содержащее вершин V и W), которое обладает тем свойством, что каждая простая цепь из вершины V в вершину W содержит как минимум одну вершину из этого множества.

NsNт – отделяющие множества:

1) вершины N3, N5

2) вершины N5, N7

3) вершины N4, N5, N6

3.3. Построить три разреза между вершинами NS и NT.

Назовем разрезом такое разделяющее множество, никакое собственное подмножество которого не является разделяющим. В силу минимальности этого VW-разделяющего множества оно может содержать только одну дугу каждой простой цепи из V в W.

Разрезы между вершинами Ns и Nт:

1) разрез (N2, N3), (N2, N5)

2) разрез (N5, N0), (N7, N0)

3) разрез (N3, N4), (N6, N1), (N6, N7), (N5, N0).

3.4. Указать пропускные способности построенных разрезов.

Пропускной способностью разреза назовем сумму пропускных способностей принадлежащих ему дуг.

1) Пропускная способность разреза (N2, N3), (N2, N5): b = b23+b25 = 4+55 = 59

2) Пропускная способность разреза (N5, N0), (N7, N0): b = b50+b70 = 23+97 = 120

3) Пропускная способность разреза (N3, N4), (N6, N1), (N6, N7), (N5, N0):

b = b34+b61+b67+b50 = 12+1+8+23 = 44

3.5. Определить диаметр.

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

Диаметром графа является маршрут N2, N5, N0, N1 (или другие кратчайшие маршруты, соединяющие вершину графа с номер n с вершиной с номером n-1, например 3-ю и 2-ю, 4-ю и 3-ю).

4. Описание алгоритма Форда-Фалкерсона.

Теорема Форда-Фалкерсона. Если в сети существует цепь, идущая из NS в NT, то максимальный поток из NS в NT равен минимальной пропускной способности разрезов, разделяющих узлы NS и NT.

Алгоритм состоит в систематическом поиске всех возможных путей из NS в NT, увеличивающих поток (процесс расстановки пометок), и в соответствующем увеличении потока (изменение потока).

ШАГ 1. Процесс расстановки пометок.

На шаге 1 каждый узел находится в одном из трех состояний:

– "не помечен",

– "помечен и не просмотрен",

– "помечен и просмотрен".

Вначале все узлы не помечены. Пометка произвольного узла Nj всегда состоит из двух частей (i знак, E(j)). Первая часть – индекс узла Ni, который указывает, что нужно изменить поток из Ni в Nj и знак изменения этого потока (+ увеличение, - уменьшение). Вторая часть пометки – число, указывающее на величину изменения этого потока.

Источнику Ns приписываем пометку (S+, ∞) (узел Ns готов отправить в сеть поток неограниченной величины). Теперь узел Ns "помечен и не просмотрен". А все остальные узлы "не помечены".

Выберем любой помеченный и не просмотренный узел Nj. Пусть он имеет пометку (i+, E(j)) или (i–, E(j)). Два узла будем называть соседними, если они соединены дугой. Из всех узлов, соседних с Nj, выделим те узлы Nk, которые не помечены и для которых xjk< bjk (поток из узла Nj в узел Nk меньше пропускной способности). Припишем каждому узлу Nk пометку (j+, E(k)), где E(k)=min { E(j), bjk – xjk }. Такие узлы Nk теперь "помечены и не просмотрены".

После этого всем соседним с Nj узлам Nk, которые не помечены и для которых xkj > 0, приписываем пометку (j–, E(k)), где E(k)=min { E(j), xkj }. Такие узлы Nk теперь также "помечены и не просмотрены".

Сейчас все узлы, соседние с Nj, помечены или не могут быть помечены. Узел Nj считается помеченным и просмотренным, его можно больше не рассматривать на этом шаге.

Продолжим приписывать пометки узлам, которые являются соседними для помеченных и не просмотренных узлов до тех пор, пока либо узел NT окажется помеченным, либо нельзя будет больше пометить ни один узел и сток NT окажется непомеченным. Если NT не может быть помечен, то не существует пути из NS в NT, увеличивающего поток, и, следовательно, полученный поток максимален. Если же NT помечен, то на шаге 2 можно найти путь, увеличивающий поток.

ШАГ 2. Изменение потока.

Предположим, что сток NT имеет пометку (k+, E(T)). Тогда заменим xkT на (xkT +E(T)). Если же он имеет пометку (k–, E(T)), то xkT заменим на (xkT - E(T)). Затем в любом из этих случаев переходим к узлу Nk. Если узел Nk имеет пометку (j+, E(k)), то xjk заменим на (xjk + E(T)), и перейдем к узлу Nj. Если узел Nk имеет пометку (j–,E(k)), то xjk заменим на (xjk – E(T)) и перейдем к узлу Nj. Дойдя таким образом до узла NS стираем все старые пометки узлов и вновь переходим к шагу 1.

5. Нахождение максимального потока в сети.

Шаг 1.

1.1) Узлу NS приписываем пометку (S+, ∞);

1.2) Узел NS имеет два соседних узла: N1, N7, N3 и N5.

Узлы N1 и N7 не могут быть помечены, т.к. bS1-xS1=0 и x1S= 0, bS7-xS7=0 и x7S= 0;

Для узла N3: xS3<bS3, он может быть помечен, bS3-xS3=4-1=3, приписываем пометку (S+, 3), т.к. 3<∞;

Для узла N5: xS5<bS5, он может быть помечен, bS5-xS5=55-0=55, приписываем пометку (S+, 55), т.к. 55<∞;

Узел NS помечен и просмотрен, узлы N3, N5 помечены и не просмотрены, узлы N1, N7 не могут быть помечены;

1.3) Узел N3 имеет три соседних узла: NT, N4 и N6.

Узел NT не может быть помечен, т.к. b3T-x3T=0 и xT3= 0;

Узел N6 не может быть помечен, т.к. b36-x36=1-1=0;

Для узла N4: x34<b34, он может быть помечен, b34-x34=12-0=12, приписываем пометку (3+, 3), т.к. 3<12;

Узел N3 помечен и просмотрен, узел N4 – помечен, а узлы N6, NT – не могут быть помечены;

1.4) Узел N5 имеет три соседних узла: N4, N6 и NT.

Узел N4 помечен;

Для узла N6: x56<b56, он может быть помечен, b56-x56=102-0=102, приписываем пометку (5+, 55), т.к. 55<102;

Для узла NT: x5T<b5T, он может быть помечен, b5T-x5T=23-0=23, приписываем пометку (5+, 23), т.к. 23<55;

Узел N5 помечен и просмотрен, узлы N6, NT – помечены и не просмотрены;