УЗБЕКСКОЕ АГЕНТСТВО СВЯЗИ И ИНФОРМАТИЗАЦИИ
ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЙ
Кафедра:
«Автоматизация почтовой службы»
Методическое пособие по курсу
«Теоретические основы почтовой связи»
Направление: 5840200-«Почтовая служба»
Ташкент-2006
СОДЕРЖАНИЕ
Введение……………………………………………………………………….3
1. Некоторые
сведения из теории графов и сетей…………………………….4
2.
Теорема о максимальном потоке и алгоритм определения
максимального потока……………………………………………………………9
3. Задача о кратчайшем пути и алгоритмы нахождения кратчайших
путей………………………………………………………………………………12
4. Список литературы……………………………………………………………21
5. Приложение……………………………………………………………………22
ВЕДЕНИЕ
Почтовая связь как система обладает
такими свойствами (большое количество взаимодействующих элементов и связей
между ними, иерархичность, воздействие внешних факторов, способность к
самоорганизации и т.д.), которые позволяют отнести ее к классу сложных систем.
Их исследование возможно только с использованием математического моделирования.
Однако нередко такие исследования сложны или практически неосуществимы, поэтому
сложные системы разбиваются на самостоятельные подсистемы, которые поддаются
либо аналитическому, либо имитационному моделированию.
В данном
методическом пособии рассмотрены примеры решения некоторых задач почтовой связи
на основе теории графов и сетей.
1. НЕКОТОРЫЕ СВЕДЕНИЯ
ИЗ ТЕОРИИ ГРАФОВ И СЕТЕЙ
Сетевые модели оптимизации охватывают широкий класс задач, встречающихся при
проектировании систем почтовой связи, организации
перевозки почты, размещении
предприятий почтовой связи и ряда других. Как правило, эти задачи
характеризуются линейной целевой функцией и линейными
ограничениями, так что для их решения могут использоваться известные методы
линейного
программирования. Однако характерной особенностью этих задач является их большая размерность, обуславливающая необходимость поиска
эффективных алгоритмов решения, учитывающих особенности каждой конкретной задачи по
сравнению с общей задачей линейного программирования. Основой для построения таких алгоритмов
служит представление решаемой задачи в виде сети или графа. В данной главе
рассмотрены алгоритмы решения
нескольких таких задач, которые имеют непосредственное приложение в почтовой связи.
Граф G задается конечным
множеством вершин (w1,...,
wm), которое обозначается W и множеством ребер
(d1,
... , dn), которое обозначается D,
соединяющих некоторые или все вершины.
Геометрическая иллюстрация графа приведена на рис.1. Множества W
и D определяют граф, который обозначается G(W, D). Если ребра из множества D ориентированы, что обычно показывается стрелками, то они называются дугами, а граф с такими ребрами называется ориентированным графом, или, короче, орграфом. Если ребра
не имеют ориентации, то граф называется
неориентированным.
Каждая дуга может быть задана упорядоченной парой вершин (wi, wj). При этом направление
дуги считается от wj к wj; wi называется начальной, a wj — конечной вершиной дуги (wi, wj). Иногда говорят, что
дуга (wi, wj) инцидентна wi и wj.
Как правило, неориентированное ребро можно представить в виде пар (wi, wj) и (wj, wj),
и наоборот, если направление дуги несущественно, ее можно заменить на ребро.
Ориентированный граф можно
задать в виде множества вершин W и множеств Г(wi), показывающих, с какими
вершинами связана вершина wi. Например, для графа,
показанного на рис.1, Г(wi) = {w2, w4}, a Г(w4)=w5. Множество Г(wi) назовем
соседями вершины Г(wi). В случае
неориентированного графа множества Г определяются после замены каждого
неориентированного ребра на два ориентированных.
Путем в ориентированном графе называется последовательность дуг, в которой каждая конечная
вершина (кроме последней) является начальной вершиной следующего ребра. Так, в
графе на рис.1
последовательности дуг d4, d5, d6, d8, d4; d1 d2, d3, d4, d5 являются путями.
Простым путем называется
путь, у которого каждая вершина используется
не более одного раза. Путь d1 d2, d3, d4, d5 — простой, a d4, d5, d6, d8, d4— нет. Часто для обозначения пути используется перечень вершин, через которые проходит путь. Например, путь d5, d6, d1 на рис.1 можно записать так: w5, w6, w1, w2. Такая запись используется чаще, чем перечень дуг и по ней проще выявить, является ли
данный путь простым. Если в простом пути
Рис. 1 Рис. 2
ориентации
дуг не совпадают, то такой путь называется простой цепью. Например,
последовательность w1 w6, w3, w4 на рис.1 является простой цепью, так как при движении от начальной вершины w1 к -конечной w4 ориентация дуги (w1 w6) не совпадает с ориентацией остальных
дуг. В дальнейшем будут рассматриваться только простые пути и цепи, поэтому термин
«простой» будет
опускаться.
Граф называется связным, если
между любой парой вершин существует цепь, соединяющая эти вершины. В дальнейшем
всегда
будут рассматриваться связные графы и это свойство графа отдельно оговариваться
не будет.
Цепь d1 ... dK называется замкнутой, если начальная вершина дуги d1 совпадает с конечной вершиной дуги dK. Замкнутая цепь называется циклом. Например, в графе на рис.1 d5, d6, d9 образуют
цикл. Этот же цикл можно записать в виде перечня вершин w1, w5 w6, w1
Контуром называется путь, у которого начальная и
конечная вершины
совпадают. Так, в графе на рис.1 w1 w4, w5, w1 образуют контур. Контур
называется гамильтоновым, если
он содержит
все вершины графа. Ясно, что не любой граф содержит гамильтоновым контур. Например,
граф на рис.2 такого контура не имеет,
а в графе на рис. 1
гамильтоновым контуром является
d1, d2, d3, d4, d5, d6.
Граф G называется полным, если для любой пары вершин существует, по крайней
мере, одно ребро, связывающее эту пару. На рис.3 изображен полный
неориентированный граф с четырьмя вершинами. Полный граф содержит максимально возможное число ребер (если не учитывать
возможность проведения параллельных ребер
между двумя вершинами). Для неориентированного графа это число равно m(m—1)/2,
где m — число вершин.
Рис. 3 Рис. 4
В известной степени противоположностью полному графу является, дерево. Следующие определения дерева
эквивалентны. Неориентированное
дерево есть:
а) связный
граф, содержащий m вершин и m-1
ребро;
б) связный граф, не имеющий циклов;
в) граф, в
котором каждая пара вершин соединена одним и только одним путем. Из этих определений следует, что в
произвольном графе G(W, D) можно
последовательно вычеркивать ребра, так чтобы граф оставался связным. После
того как в графе останется m-1 ребро, образуется основное дерево графа G(W,
D).
Конечно, это можно сделать не единственным способом и существует
несколько основных деревьев графа G(W, D). На
рис.4 изображены два основных дерева графа, показанного на
рис.3.
В ориентированном графе количество дуг, направленных к вершине wi, называется
полустепенью захода вершины wi, а количество дуг, направленных от wi, полустепенью
исхода этой вершины. Множество дуг,
направленных от вершины wj обозначается C+( w1), а множество дуг, направленных к вершине W1-C-(wi). На рис.1 C+(w1) = {d1 d8}, a C-(wi) = {d9, d6}. Используя
это понятие
можно дать определение ориентированного дерева в графе. Ориентированное дерево представляет
собой ориентированный граф без циклов, в котором полустепень захода каждой
вершины (за
исключением одной) равно 1, а полустепень захода этой вершины, называемой корнем, равно 0. На рис.5 показано
ориентированное дерево с корнем w1. Очевидно, что не всякий ориентированный граф имеет основное ориентированное
дерево. Это отражает тот факт, что в ориентированном графе не всегда существует путь между любыми вершинами, в
противоположность неориентированному, в
котором такой путь всегда есть (речь идет только о связных графах).
Неориентированное дерево всегда можно преобразовать в ориентированное, если
выбрать произвольную вершину в качестве корня и ребрам приписать такую ориентацию,
чтобы каждая вершина соединялась с корнем одним и только одним простым путем.
Вершины ориентированного дерева, для которых полустепень исхода равна пулю, называются висячими. Так, в графе на рис.5
Рис. 5
Рис.6
вершины w2, w4, w6, w7, w6 являются висячими, a w1, w3 и w5— нет.
Граф G называется мультиграфом, если между одной или несколькими парами вершин существует более одного ребра. На рисунке 6 показан мультиграф. Введение мультиграфа
целесообразно в тех случаях, когда
различные ребра между вершинами отличаются
некоторыми характеристиками, например длиной, пропускной способностью и т. д. В ряде случаев можно
заменить совокупность ребер между
двумя вершинами одним ребром с некоторой
эквивалентной характеристикой. Имея это в виду в дальнейшем мультиграфы рассматриваться не будут.
Для
алгебраического задания графа используются следующие
матрицы.
Матрицей смежности называется квадратная
матрица S, номер строки и номер столбца которой
соответствуют вершине графа. Элемент этой матрицы
Sij =
={1, если в
графе существует ребро между вершинами w1 и
wj;
={О, если такого ребра нет.
Количество строк и столбцов в матрице S равно количеству вершин графа. Для
неориентированного графа матрица смежности симметрична относительно главной
диагонали. Множество столбцов, имеющих единицу в i - й строке, — множество
номеров вершин,
являющихся соседями вершины wi.
Матрица инциденций А—матрица с
количеством строк m и количеством столбцов n, где m — количество вершин, а n — количество ребер в
графе. Каждая строка матрицы соответствует вершине в графе, а каждый столбец - ребру. Элемент матрицы aij для орграфа
aij =
={ 1, если дуга dj инцидентна вершине wi и направлена от wi;
={-1, если дуга dj инцидентна вершине wj и направлена к wi;
={, 0 для всех остальных случаев.
Поскольку каждое ребро инцидентно всегда двум различным вершинам и
направлено от одной к другой, то
каждый столбец
Рис. 7
Рис.8
матрицы содержит один
элемент, равный +1 и один равный -1, остальные элементы равны нулю. Отсюда
вытекает, что сумма всех строк матрицы А равна нулевому вектору. На рис.7
показан
ориентированный граф, ниже приведены матрицы смежности и инциденций этого
графа.
Матрица смежности
|
W1 |
W2 |
W3 |
W4 |
W5 |
W6 |
W1 |
0 |
1 |
1 |
0 |
0 |
0 |
W2 |
0 |
0 |
0 |
0 |
1 |
1 |
W3 |
0 |
0 |
0 |
0 |
0 |
0 |
W4 |
0 |
0 |
1 |
0 |
0 |
0 |
W5 |
1 |
0 |
0 |
1 |
0 |
0 |
W6 |
1 |
0 |
0 |
0 |
1 |
0 |
Матрица инциденций
|
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
D8 |
W1 |
1 |
1 |
0 |
0 |
0 |
0 |
-1 |
-1 |
W2 |
-1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
W3 |
0 |
-1 |
0 |
-1 |
0 |
0 |
0 |
0 |
W4 |
0 |
0 |
0 |
1 |
-1 |
0 |
0 |
0 |
W5 |
0 |
0 |
-1 |
0 |
1 |
-1 |
1 |
0 |
W6 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
Для неориентированного графа в столбце j, соответствующем ребру dj=(wi, wk), записываются единицы >в i-й и k-й
строках и нули
в остальных строках.
Представление графа матрицей инциденций не всегда оправдано, так как для
хранения такой матрицы в памяти ЭВМ требуется mn
слов. Кроме того, доступ к информации часто неудобен. Например, ответ на
вопрос типа: существует ли ребро (wi, wj)? - в худшем случае
требует перебора всех столбцов матрицы. Аналогичными недостатками обладает и матрица
смежности. Значительно удобнее представлять граф в виде списков, например списка ребер или дуг,
заданных в виде (wi, wj), упорядоченных по возрастанию wi, а внутри этого
множества — по возрастанию wj. В этом случае
существенно экономится память и упрощается поиск различных подмножеств вершин и
ребер в графе.
В практических задачах часто вершинам и (или) ребрам графа приписывают числа.
Такой граф называется сетью. Иногда
сеть ассоциируется с
транспортной сетью или сетью связи. В
этом случае вершины графа — города,
транспортные пункты, узлы связи, а
ребра — дороги, соединяющие эти города, или линии связи. В случае транспортных сетей или сетей связи числа,
приписываемые вершинам и (или)
ребрам, могут означать: длину ребра, стоимость перевозки единицы продукта по данному ребру, пропускную способность вершины или ребра, надежность ребра
или вершины и т. д.
2. ТЕОРЕМА О МАКСИМАЛЬНОМ ПОТОКЕ И АЛГОРИТМ ОПРЕДЕЛЕНИЯ МАКСИМАЛЬНОГО ПОТОКА
Рассмотрим произвольный ориентированный граф G(W,
D). Каждой дуге графа (х, у) сопоставим число f(x,
у), которое называется пропускной способностью
(х, у). Выделим источник s и сток t. Функция φ(х, у) называется потоком на сети, если она удовлетворяет
следующим условиям:
1. φ (х,у)≥0. (1)
2.
Для любой вершины х, не являющейся источником или стоком, сумма входящего
потока равна сумме выходящего потока, т. е.
Σ φ (х, y)
- Σ φ (х, у) = 0.
(2)
3. φ
(х, у) ≤ f
(х, у). (3)
Величиной потока называется сумма
потока по всем дугам, исходящим из s, v=
Σ φ (s,
у). Согласно условию
сохранения потока
(2), эта величина равна сумме потока по всем дугам, входящим в t.
Задача состоит в нахождении такого потока, для которого величина v
была бы максимальной.
Пусть AW такое, что s не принадлежит
A, a tA. Разрезом сети G(W,
D) называют множество дуг, заходящих в А, т.
е. непосредственно
связывающих вершины из А с вершинами, принадлежащими к А. Пропускной способностью разреза называется сумма пропускных
способностей дуг, входящих в разрез. Дуга (х, у) называется насыщенной, если φ (х, y)=f(x,
у). Рисунок 8 иллюстрирует введенные понятия. Цифры около дуг показывают их пропускные
способности. Функция φ(s, 3)=3; φ(3, 2)=2; φ(3, 4)=1, φ(4, t)=l;
φ(2, t)
=2 является потоком с величиной v = 3. Пусть в множество А входят вершины 2, t, 4. Тогда разрезом будет множество дуг (s, t), (1,
t), (3, 2), (3, 4) с пропускной способностью 1+9+6+2=18. Дуга (s,
3) является насыщенной, а остальные не насыщены.
Теорема о максимальном потоке формулируется
следующим образом. Для заданной сети максимальная величина потока равна минимальной пропускной способности
разреза. Доказательство теоремы основывается на следующих рассуждениях. Рассмотрим
некоторый путь из s
в t. Если все дуги этого пути не насыщены, то
можно увеличить поток. Обозначим δ(х, y)=f(x,
у)—
φ (х, у) и
δ*=min
δ(x,
у). Очевидно, что величина потока может возрасти на δ* без нарушения условий (1) — (). Например, на
рис. 8 для пути s, 3, 4, t с величиной потока по этому пути, равной 1, значениями δ(s, 3)=2; δ(3, 4) = 1; δ(4, t)=3
и δ*=1 можно увеличить поток на 1.
Рассмотрим теперь цепь, в которой направление части дуг не совпадает с
направлением прохождения цепи. Для дуг, направление которых совпадает с направлением
прохождения цепи, сохраним
введенные выше обозначения, а те, направление которых не совпадает, обозначим
φ*=min φ (х, у) и введем ε = min(φ*, δ*); тогда величина потока может быть увеличена на ε по каждой дуге, направление которой совпадает с направлением
прохождения цепи, и уменьшено на е для тех дуг, направление которых противоположно направлению
прохождения цепи без нарушения условий (1) — (3). Так, для цепи s,
1, 4, t на рис. 8 и φ(s,
1)=3 φ(4, 1)= 1 и φ(4, t)
= l и получим δ(s, 1)=2, δ(4, t)=3,
δ* = 2, φ*=1 и ε =1. Следовательно, поток может быть увеличен на 1 на дугах (s, 1) и (4, t) и уменьшен на единицу на дуге (4, 1).
Наконец, заметим, что, если не существует цепи от s
к t с ε >0, то величину потока
увеличить нельзя, т. е. получен максимальный поток. Исключая при этом из графа все
дуги, для которых δ(х, у) = = 0 или φ (х, у)=0, получим хотя бы два несвязных
подграфа, один
из которых содержит вершину t. Этот подграф
определяет разрез А,
пропускная способность которого равна максимальному потоку, поскольку все дуги,
ведущие из в А, насыщены. Но поскольку для любого потока его величина
не может быть больше пропускной способности
любого разреза, то теорема доказана.
Рассмотрим теперь алгоритм
нахождения максимального потока. Он состоит из двух
частей. Первая из них предназначена для нахождения цепи, по которой можно
увеличить поток. Если такой цепи нет, то это означает, что максимальный поток
найден. Вторая
часть увеличивает поток вдоль найденной цепи. Каждая вершина сети в
процессе работы алгоритма получает пометку вида (±у, ε).
Первая часть пометки показывает, что поток должен быть увеличен (знак
+) или уменьшен (знак -) на дуге (х, у) или (у, х). Вторая часть — это текущее значение,
на которое должен быть
увеличен поток. Когда установится равным t, ε — максимально возможное увеличение потока по найденной
цепи.
Алгоритм начинает работу с произвольного допустимого потока, в качестве
которого может быть принят и нулевой. Расстановка пометок разбивает вершины сети на
три типа: непомеченные — те, которые не имеют пометок; помеченные — те, которые
имеют пометки,
но соседние вершины еще не обработаны; присмотренные— те, которые
помечены, и соседние вершины обработаны. Вначале все вершины не помечены.
Описание
алгоритма.
I. Нахождение увеличивающей цепи.
1. Присвоить вершине s
пометку ( +s,
∞). Вершина s не просмотрена, x=s.
2.
Для непросмотренной
вершины х с пометкой [±z,
ε(x)] и
для
непомеченной соседней с ней вершины у выполнить:
2а. Если дуга направлена от х к у и φ (х, у) <f
(х, у), то вершина у получает
пометку ( +х, min[ε (x), f(x,
у)—
φ (х,
у)]).
26. Если дуга направлена от у к х и φ (у, х) >0, то вершина у получает пометку (-х,
min>[e(x),
ф(у, х)]).
После выполнения хотя бы одного из шагов (2а или 26) вершина у помечена, в
противном случае - нет.
3. Если y=t,
то перейти к шагу 6.
4.
Если все соседи вершины х обработаны, то х становится просмотренной; в противном случае выбрать новую вершину, соседнюю с вершиной х, и
перейти к шагу 2а.
5.
Если все
вершины просмотрены, то
максимальный поток найден; в противном
случае выбрать новую непросмотренную вершину и перейти к шагу 2.
II. Увеличение потока.
6.
Положить х=t.
7.
Если пометка в вершине х имеет вид +z,
ε (x)], то φ (z,
x) = φ (z,
x)+ ε (t),
в противном случае φ (х, z)= φ (x,
z)- ε (t).
8. Если z
= s, то все вершины становятся непомеченными. Перейти к шагу 1; в
противном случае положить x = z
и перейти к шагу 7.
Нетрудно видеть, что работа алгоритма фактически повторяет доказательство
теоремы о максимальном потоке, поэтому не требуется
приводить обоснования его
правильной работы.
Приведем пример построения максимального потока для сети, изображенной на рис. 5.8 (рис. 5.9). Начальный поток φ(s, t)=l.
В начале
вершина s получает пометку ( +s, ∞). Соседними
с ней являются
вершины 1, t и
3.
Вершина t не может получить пометку, так как φ(s, t)=f(s, t), вершины 1 и 3
получают пометки ( +s, 5) и ( +s, 3). Из вершины 1
можно пометить вершину t. Величина ε(t)=min(5,
4) =4, следовательно, пометка вершины t будет(+1,4). Поскольку вершина t
помечена, то увеличивающая цепь найдена. Величина потока по этой цепи равна ε(t). На рис. 9,а показан результат этой итерации. Цифры
около дуг равны величине потока. Жирными линиями обозначены насыщенные дуги. Вторая
итерация алгоритма показана на рис.9,6. Здесь увеличивающая цепь есть s,
3, 2, t с величиной потока 3. На третьей итерации (рис.9, в) из вершины s
можно пометить только вершину 1, а из этой вершины нельзя пометить ни одной
вершины. Следовательно, найден максимальный поток, величина которого равна 8.
Насыщенные дуги образуют разрез сети с пропускной способностью 8. В множество А входят
узлы 2, 3, 4, t, а в множество А — 1 и s.
Рис.9
3. ЗАДАЧА О КРАТЧАЙШЕМ ПУТИ И АЛГОРИТМЫ НАХОЖДЕНИЯ КРАТЧАЙШИХ ПУТЕЙ
В этом параграфе будет рассмотрена одна из основных задач теории сетей — задача нахождения кратчайшего пути между
двумя
заданными вершинами. Эта задача имеет многочисленные практические
приложения, а также часто используется как составная часть при решении
различных задач оптимизации на сетях.
Пусть дан граф G(W,
D), ребрам которого приписаны числа сj. Обозначим через μ путь,
представленный последовательностью дуг d1, d2,..., dq. Длиной пути называется число l(μ), равное сумме всех тех чисел cj, для которых дуга dj входит в путь μ:
(5.4)
Задача о кратчайшем
пути состоит в нахождении пути от заданной вершины ws к другой вершине wt, такого, чтобы его длина была минимальна. Заметим, что эта
задача может иметь решение только в том случае,
если существует путь из ws в wt, что и будет предполагаться в дальнейшем. На числа cj не накладывается никаких ограничений: они могут быть положительными, отрицательными, равными нулю. Не предполагается
выполнение неравенства треугольника.
Единственное ограничение состоит в том, чтобы в G
не было циклов отрицательной длины. Пусть существует такой цикл. Тогда,
двигаясь из ws к некоторой вершине в
таком
цикле, а затем, обходя этот цикл достаточное число раз и попадая потом в wt, можно получить сколь угодно малое l(μ). Это означает,
что min l(μ)->
-∞
и в данном случае кратчайшего пути и не существует.
Отсюда вытекает, что неориентированные ребра не могут иметь отрицательной
длины. Из неотрицательности циклов следует
также, что кратчайший путь всегда простой. Действительно, если этот путь содержит повторяющиеся вершины,
то часть пути есть цикл. Но длина
цикла по предположению неотрицательна, поэтому его можно удалить, уменьшив
длину пути или оставив ее без
изменения. Таким образом, удаляя из пути все циклы, придем к тому, что оставшаяся часть — простой путь.
Следующие задачи являются обобщением задачи о кратчайшем пути.
1. Найти
кратчайшие пути между
заданной вершиной ws и всеми другими
вершинами сети.
2. Найти
кратчайшие пути между
всеми парами вершин
в сети.
Рассмотрим следующую
задачу оптимизации:
Min z=c1ix1+
... +cjxj+... +cnxn; (5)
А1x1+ ... +Ajxj+ ... +Anxn = Est; (6)
xj =0; 1 для j
= l n, …, n,... (7)
где Аj - столбец матрицы
инциденций; Est - столбец, все элементы которого равны
нулю за исключением элементов, стоящих на s-м и t-м
местах, равных соответственно -1 и +1.
По условию (6) х образуют поток, величина которого равна 1. Условие (7)
гарантирует, что xj равно 0 либо 1.
Нетрудно видеть,
что те дуги, для которых xj=l,
образуют путь из ws в wt. Но тогда целевая функция (5) эквивалентна длине пути (4),
ибо в (5)
в сумму войдут только те cj, для которых xj=l. Из сказанного вытекает,
что задача (5) — (7) является одной из формулировок задачи о кратчайшем пути.
Заметим, что задача (5)—(7) не является задачей линейного программирования
из-за условий (7), но ей эквивалентна следующая задача линейного программирования:
min z = cixi+ ... +cjXj+ ... +cnxn; (8)
А1х1+ ... +AjXj+ ... +Anxn = Est; (9)
xj≥0 для j = l,
..., n, (10)
отличающаяся от (5) —
(7) только тем, что условие (7) заменено на условие (10).
Рассмотрим некоторые свойства задачи (8) — (10).
1. Обозначим через m число вершин, а n
— число дуг в сети. Тогда система (9) содержит m уравнений с n
неизвестными. Однако линейно независимы из них
только m—1. Это вытекает из
того, что сумма всех строк в матрице
инциденций равна нулю, поэтому m
векторов S1,..., S1,..., Sm (S1— строка матрицы инциденций) линейно зависимы. Вычеркнем произвольную строку.
Тогда
найдется хотя бы один столбец, содержащий только +1 или -1, а остальные элементы равны нулю. Следовательно, может быть равна нулю
лишь при α1= ... = α1= ...= αm-1 = 0, что и доказывает линейную
независимость матрицы, составленной из m—1-й строки.
2. В базисном решении задачи (8) —
(10) содержится m—1
переменная. Свойство 2— следствие свойства 1.3. Базисное
решение задачи (8) — (10) —дерево. Каждый столбец Aj соответствует некоторой
дуге dj. Будем считать, что дуга dj включена в базис,
если переменная xj является базисной. Согласно
свойству 2 количество дуг, включенных в базис, равно
m—1. Дуги, включенные в базис, не могут
образовать цикл. Для доказательства этого предположим, что часть дуг,
включенных в базис, образовали цикл.
Тогда переменные Xj, соответствующие этим дугам, можно изменить на
произвольное число, и поток через остальные, в том числе и небазисные дуги, не
изменится. Это противоречит тому, что базисные переменные зависимы, т. е. их значение однозначно
определяется небазисными переменными. Но
так как
число дуг в графе с m вершинами равно m—1
и эти дуги не образуют цикл, значит, граф — дерево.
4.
В любом
базисном решении путь от
ws к любой вершине графа — простой путь.
Это следствие
того, что базисное
5.
решение — дерево,
следовательно,
любая его часть не может
содержать
циклов. В любом базисном решении базисные
переменные
могут принимать значения +1
или 0,
причем +1 только для тех дуг,
которые
образуют простой путь из ws в Wt. Рис.10
В базисном решении
больше нуля могут быть только переменные, соответствующие дугам, образующим простую
цепь от ws к wt. Предположим, что это не так. Но, как только
значение переменной, входящей не в путь от ws к wt, а в путь от ws к wj, станет больше нуля, то по условиям сохранения потока и все
остальные переменные,
входящие вместе с этой переменной в простую цепь от ws к wj,
станут больше нуля и, следовательно, образуется поток от ws к wj не равный 0, чего
быть не может. Но, так как величина потока от ws к wt равна 1 и он нигде
не дробится, следовательно, значения переменных xj, образующих этот поток, равны 1.
Свойство 4 и доказывает эквивалентность задач (8) — (10) и (5) —(7).
Таким образом, задачу о кратчайшем пути можно решать методами линейного
программирования.
Пример. Для сети, изображенной на рис. 10, найти
кратчайший путь от вершины 1 к вершине 4,
если длины дуг таковы: с1= 1, с2=4, с3=1, с4
= 5, c5 = 1, c6=2. Нанеся длины дуг на рис. 10, нетрудно найти, что кратчайший путь w1, w2, w3, w4 с длиной, равной 4.
Найдем это решение с помощью линейного
программирования. Матрица инциденций графа,
изображенного на рис. 10, записывается следующим образом:
|
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
W1 |
1 |
0 |
0 |
1 |
0 |
0 |
W2 |
-1 |
1 |
0 |
0 |
-1 |
1 |
W3 |
0 |
0 |
1 |
-1 |
1 |
-1 |
W4 |
0 |
-1 |
-1 |
0 |
0 |
0 |
Задача линейного программирования, позволяющая найти кратчайшие пути, выглядит так:
— z + хх + 4х2 + х3
+ 5х4 + х5 -£х„ = 0,
x1
x4 =1
-x1+x2-x5+x6=0
-x2-x3=-1
Ниже
приведено решение этой задачи симплекс-методом:
А)
Исходная задача линейного программирования:
-z |
X1 |
X2 |
X3 |
X4 |
X5 |
X6 |
c |
1 |
1 |
4 |
1 |
5 |
1 |
2 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
-1 |
1 |
0 |
0 |
-1 |
1 |
0 |
0 |
0 |
-1 |
-1 |
0 |
0 |
0 |
0 |
Б) Базисное решение:
-z |
1 |
0 |
0 |
-1 |
2 |
3 |
0 |
-5 |
X1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
X2 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
X3 |
0 |
0 |
0 |
-1 |
1 |
-1 |
1 |
0 |
В)
улучшенное решение:
-z |
1 |
0 |
1 |
0 |
2 |
3 |
0 |
-4 |
X1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
X3 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
X6 |
0 |
0 |
1 |
0 |
1 |
-1 |
1 |
1 |
Исходная задача линейного программирования получена из матрицы инциденций вычеркиванием
последней строки и добавлением строки и столбца для переменной —z и столбца свободных членов. Выберем в
качестве базисных переменных x1, х2 и х6. Нетрудно видеть, что дуги
d1, d2, d6 образуют дерево, а длина пути w1 w2, w4, равная сумме длин
дуг d1 и d2, равна 5. Из
базисного решения
следует, что x1 = x2=l и z = 5. Отрицательная
относительная оценка в строке —z показывает, что это
решение можно улучшить.
Улучшенное решение z = 4, x1 = x3 = x6=l является оптимальным и совпадает с полученным с
помощью анализа путей на графе.
Рассмотренные выше свойства задачи (8) — (10) не изменятся, если правую
часть (9) умножить на положительное число V. В этом случае xj могут быть ,равны нулю или v,
причем v только в том случае, если xj соответствуют дугам, образующим простой путь от ws к wt. Значение целевой функции (8) при этом просто увеличится в v раз.
Рассмотрение примера показывает, что решение задачи о кратчайшем пути методами линейного программирования
громоздко. Существуют другие существенно
более эффективные способы решения
этой задачи, к рассмотрению которых мы и перейдем.
Алгоритм Дейкстры используется для
неотрицательных длин ребер и позволяет найти кратчайший путь между двумя заданными вершинами или
кратчайшие пути от данной вершины ко всем остальным вершинам сети.
Алгоритм основан на приписывании вершинам сети временных или постоянных
пометок. На каждой итерации алгоритма величины пометок уменьшаются и только одна из
временных пометок становится постоянной. Это показывает, что найден кратчайший путь от вершины ws до той вершины, пометка которой стала постоянной. После m
итераций, где m — число вершин в сети, будут найдены кратчайшие
пути до всех вершин. Опишем сначала алгоритм, а затем дадим доказательство того,
что он позволяет найти кратчайшие пути.
Введем
обозначения:
сij— длина дуги между вершинами Wj и Wj;
l'i —
временная пометка вершины Wi;
li — постоянная пометка вершины wi;
m — число вершин в сети.
Описание
алгоритма:
1. Положить
ls = 0; li
= ∞ для i=l,... , m; i≠s;
k=1; p=s.
2.
Для всех соседей вершины wp с временными пометками изменить пометки в соответствии с
выражением
l`i = min(l`i;
lp + cPi). (11)
3. Для всех
вершин, имеющих временные пометки, найти lг =
=min l'1.
4. Положить p=r, k=k+l.
5а. Если требуется найти кратчайший путь до узла wt: при p
= t вычисления закончены, кратчайший путь
найден; при невыполнении этого равенства перейти к шагу 2.
5б. Если требуется найти кратчайшие пути до всех вершин сети: при k=m
вычисления закончены, в противном случае перейти к шагу 2.
Рассмотрим
пример применения алгоритма.
Для сети, изображенной на рис.11,а, найти кратчайшие пути от вершины wi ко всем остальным вершинам сети. Граф на рис.11,а
неориентированный. Будем считать, что каждому неориентированному ребру соответствуют две
дуги с
одинаковыми длинами, показанными на рис.11,б. Результаты расчетов приведены в табл. 1.
В первом столбце табл. 1 дается номер итерации, во втором — номер вершины, получающей на
данной итерации постоянную пометку, а в остальных — величины пометок для
каждого узла. Столбец выделяется
жирными линиями,
Рис. 11
k |
p |
L1 |
L2 |
L3 |
L4 |
L5 |
L6 |
1 |
1 |
0 |
∞ |
∞ |
∞ |
∞ |
∞ |
2 |
2 |
0 |
1 |
∞ |
∞ |
∞ |
5 |
3 |
3 |
0 |
1 |
4 |
∞ |
7 |
3 |
4 |
4 |
0 |
1 |
4 |
∞ |
6 |
3 |
5 |
5 |
0 |
1 |
4 |
9 |
5 |
3 |
6 |
6 |
0 |
1 |
4 |
6 |
5 |
3 |
Таблица 1
начиная с той
итерации, на которой пометка соответствующей вершины стала постоянной.
На первой итерации пометки всех вершины, кроме первой, временные и равны бесконечности,
пометка первой вершины постоянная и равна 0. Соседями вершины wi являются w2 и w6. Временные пометки этих вершин равны: l`2 = 0+l=l;
l'6=0 + 5=5. Выбирая минимальную из них
согласно шагу 3, получаем: l2=min (1,5) = 1. Пометка
вершины w2 становится постоянной:
р = 2.
На следующей итерации рассматриваются соседи вершины w2, имеющие временные пометки. Это w3, w5 и w6. Согласно формуле
(11) пересматриваются временные пометки этих вершин: l'3
= min(∞ ,1 + 3) =4; l'5=min(∞,
1+6) = =7;
l`6=min(5, 1+2) =3.
Минимальная из этих временных пометок l'6, значит, она становится
постоянной: l6 = 3 и р = 6.
Дальнейшие итерации (их всего шесть, по числу вершин) происходят аналогично
рассмотренным. На рис.11,в приведены кратчайшие пути до всех вершин графа и длины кратчайших
путей до каждой вершины. Это дерево может быть получено двумя способами.
Пусть вершина wi непосредственно
.предшествует вершине wj в кратчайшем пути от ws к wt. Тогда для этих
вершин выполняется соотношение
l1 + cij = lj. (12)
Для
некоторой вершины wj должна быть найдена вершина wi, для которой справедливо (12). Например, для w4 получаем l6 = l5+с54 и, следовательно, вершина w5 предшествует вершине w4 в кратчайшем пути.
В другом способе построение дерева кратчайших путей
ведется в ходе выполнения алгоритма. Для этого в шаге 2 алгоритма для каждой вершины wt запоминается номер р, если при минимизации
временная отметка уменьшалась. Для вершины ws записывается число ws. После выполнения всех итераций для каждой вершины wj массива будет записан номер wi вершины, предшествующей wj в кратчайшем пути до
wi. Так, для рассмотренного примера этот массив
будет выглядеть так:
w1 w2 w3 w4 w5 w6
1 1 2
5 3 2
Пусть требуется найти кратчайший путь от w1 к w5. Под w5 стоит цифра, 3,
значит, w3 предшествует w5 в кратчайшем пути.
Далее, переходу к w3, получаем, что следующая предшествующая вершина w2, и, наконец, переходя к w2, получаем, что вершина w1 предшествует w2. В итоге получается
кратчайший путь: w1 w2, w3, w5
Перейдем к доказательству того, что алгоритм позволяет найти кратчайшие пути. Отметим, что, если ws, ... , wj, ... , wt — кратчайший
путь от ws к wt, то ws, ... , wj —кратчайший путь от ws к wj. Если это было бы не
так, то длину пути от ws к wj можно было бы уменьшить, в результате чего уменьшился
бы путь от ws к wt.
На первой
итерации алгоритм находит вершину, ближайшую к ws.
Для этой итерации на втором шаге находятся расстояния от ws до всех соседних вершин, а на третьем шаге выбирается вершина с минимальным
расстоянием. Вследствие неотрицательности длин никакая длина пути, проходящего
через другие соседние вершины к выбранной
вершине, не может быть меньше этой найденной длины. Пусть на k-м
шаге построены кратчайшие пути до вершины w2,... ,wk, а вершина wP получает постоянную
пометку на
к+1-м шаге. Тогда согласно шагу 2lр — кратчайшее
расстояние до wp, проходящее через
вершины w1, ..., wk, до которых уже построены кратчайшие
пути. Пусть wj — вершина, до
которой не построен кратчайший путь. Но кратчайший путь к wP не может проходить через wj из-за шага 3 алгоритма и неотрицательности длин дуг. Последнее
доказывает, что кратчайший путь до wp построен. Отсюда до индукции
следует, что алгоритм строит кратчайшие пути до всех вершин сети.
Алгоритм Дейкстры считается самым экономным из всех известных. Достаточно
грубая верхняя оценка количества операций, необходимых для нахождения кратчайших путей из
данной вершины ко всем остальным, дает Зm2. Реально это
количество зависит от количества ребер в графе и существенно меньше указанной величины.
Алгоритм можно использовать для нахождения кратчайших путей между всеми вершинами сети,
принимая последовательно ws = w1, ..., ws=wm. В этом случае верхняя оценка количества операций
составляет Зm3.
Алгоритм Флойда применим для
произвольных, в том числе « отрицательных длин
ребер (случай, наличия циклов отрицательной длины нужно исключить). Он
позволяет найти кратчайшие
пути между всеми парами вершин сети. Метод основан на последовательном преобразовании матрицы С, в которой первоначально
записаны длины cij всех дуг сети. В случае неориентированного ребра ему ставятся в соответствие две дуги.
Описание
алгоритма:
1. Сформировать
матрицу С, элемент которой
cij=
={ 0,
если i = j;
={ длине дуги между wi и wj, если такая дуга
существует; ∞, если дуги между wi и wj нет.
Положим
к=1.
2. Для всех
i≠к, j≠к осуществить
операцию cij = min[cij,(cik + ckj)].
3.
Если сij<0, то в графе
существует цикл отрицательной длины,
содержащий вершину wi. Решение неограниченно. В противном случае идти к шагу 4.
4.
Если k = m,
вычисления закончены, решение найдено. Если
нет,
перейти к шагу 5.
5.
Положить k=k+l, перейти к шагу 2.
Если длины всех дуг неотрицательны, то шаг 3 можно исключить.
Рассмотрим пример. Для сети, изображенной на рис.11,а, найти кратчайшие
пути между всеми узлами.
Исходная матрица
|
1 |
2 |
3 |
4 |
5 |
6 |
1 |
0 |
1 |
∞ |
∞ |
∞ |
5 |
2 |
1 |
0 |
∞ |
∞ |
6 |
2 |
3 |
∞ |
3 |
0 |
5 |
1 |
3 |
4 |
∞ |
∞ |
5 |
0 |
1 |
∞ |
5 |
∞ |
6 |
1 |
1 |
0 |
3 |
6 |
5 |
2 |
3 |
∞ |
∞ |
0 |
На первой итерации при k = 1 получилось так,
что матрица не меняется. Поэтому рассмотрим случай k = 2. Матрица,
полученная после второй итерации:
|
1 |
2 |
3 |
4 |
5 |
6 |
1 |
0 |
1 |
4 |
∞ |
7 |
3 |
2 |
1 |
0 |
3 |
∞ |
6 |
2 |
3 |
4 |
3 |
0 |
5 |
1 |
3 |
4 |
∞ |
∞ |
5 |
0 |
1 |
∞ |
5 |
7 |
6 |
1 |
1 |
0 |
3 |
6 |
3 |
2 |
3 |
∞ |
3 |
0 |
c13 = min(c13,c12 + с23) = min
(∞, 1+3) = 4;
c14 = min(c14,c12- с24) =min
(∞, 1+ ∞)= ∞∞;
c15 = min(c15,c12-c26) = min(∞,
1+6) = 7;
с16 = min(c15,c12-c26) = rain (5,1+2) = 3.
Полученные
числа записаны в первой строке этой матрицы, аналогично найдены ее остальные
строки.
Окончательный
результат:
|
1 |
2 |
3 |
4 |
5 |
6 |
1 |
0 |
1 |
4 |
6 |
5 |
3 |
2 |
1 |
0 |
3 |
5 |
4 |
2 |
3 |
4 |
3 |
0 |
2 |
1 |
3 |
4 |
6 |
5 |
2 |
0 |
1 |
4 |
5 |
5 |
4 |
1 |
1 |
0 |
3 |
6 |
3 |
2 |
3 |
4 |
3 |
0 |
Нетрудно
видеть, что первая строка матрицы дает длины кратчайших путей от первой вершины
сети ко всем остальным. Эти величины совпадают с найденным выше алгоритмом Дейкстры.
Сами кратчайшие пути могут быть получены по последней матрице с использованием
для каждой строки формулы (12), где li и lj -
числа, записанные в i-м и j-м столбцах матрицы.
Другим способом является построение специальной матрицы в ходе выполнения
алгоритма. Это матрица должна содержать число строк и столбцов, равное числу вершин в
графе. Обозначим eij — элемент этой
матрицы. На первом шаге алгоритма eij полагается равным номеру
столбца матрицы, т. е. eij = j.
На втором шаге
алгоритма eij может изменяться по
следующему правилу:
eij=
={ekj если cij>(cik+ckj),
={eij, если cij≤ (cik+ckj).
Элемент eij показывает промежуточную вершину, непосредственно предшествующую
wj на пути от wi к wj. Поиск пути производится аналогично
рассмотренному ранее в алгоритме Дейкстры.
Верхняя оценка количества операций в алгоритме Флойда составляет 2m3, т. е. он работает примерно в 1,5 раза быстрее, чем алгоритм Дейкстры,
если последний используется для нахождения кратчайших путей между всеми вершинами сети.
Приведем доказательство правильности работы алгоритма Флойда. Назовем базисной кратчайшую дугу, возможно
фиктивную,
между двумя производными вершинами wp и wq. Тогда задача нахождения
кратчайшего пути между wP и wq сводится к поиску базисной дуги. Пусть wk—промежуточный узел в
кратчайшем пути от wp к wq, имеющий минимальный индекс, a wi и wj — соседи этого узла в таком пути. При выполнении шага 2 алгоритма Флойда будет получена базисная дуга между узлами wi, wj. После этого узел wk можно исключить из сети и повторить итерацию для следующего узла с
минимальным индексом. Таким образом, после просмотра всех промежуточных узлов
будет найдена базисная дуга между wp и wq.
Список литературы
1.
Теоретические
основы почтовой связи: Учебник для вузов/ С.М. Хлытчиев, Н.П. Тарасова, В.М.
Лившиц.-2-е изд., препаб. и доп. – М.: «Радио и связь»-1990-280 с.
2.
Птицын Г.А.
Модели обработки и перевозки почты – М.:-МИС,1988.-40 с.
3.
Князютенков В.А.,
Птицын Г.А. Оптимизация сетей почтовой связи –М:-МТУСИ, 1997, -70 с.
4.
Экономико-математические
методы и модели в планировании и управлении в отрасли связи: Учебник для вузов/
В.А.Барсук, Н.М. Губин, А.Р. Батый- 3-е изд., перераб. и доп. –М.: Радио и
связь, 1984- 264 с.
5.
Организация
автоматизированной обработки почтовых отправлений в крупных узлах связи \
И.В.Барсук, Г.К. Гиль, А.Л. Воскресенский и др.- М.: Радио и связь, 1985- 208
с.
ПРИЛОЖЕНИЕ
Для приведенного орграфа
приведите матрицу смежности и инциденций, обозначьте все имеющиеся простые и
замкнутые цепи, гамильтоновый контур, для каждой вершины орграфа найти
множество Г(wi).
Определить максимальный поток из п. А в п. D, используя для этого все возможные участки сети.
Для приведенного графа методом Флойда составить матрицу
для случая К=1 и К=2.
Для приведенного графа методом Флойда составить
матрицу для случая К=1 и К=2.
Для
сети, изображенной на рисунке, найти кратчайшие пути от W1 по
всем остальным методом Дейнстры.
Для
сети, изображенной на рисунке, найти кратчайшие пути от W1 по
всем остальным методом Дейнстры.
Для
приведенного графа методом Флойда составить матрицу для случая К=1 и К=2.
Для
приведенного графа методом Флойда составить матрицу для случая К=3.
Определить
для каждой вершины орграфа множество Г(wi);
приведите примеры простой цепи, замкнутой цепи, гамильтонового контура.
Составить
матрицу смежности и инцидентности.
Методическое пособие по курсу:
Теоретические основы почтовой связи
Рассмотрено на заседании кафедры
«Автоматизация почтовой службы» протокол
№______________
Рекомендовано к печати
Составитель: Саидазимова К.М.
Ишдавлетова Э.Т.
Ответственный редактор:
Корректор: