УЗБЕКСКОЕ АГЕНТСТВО СВЯЗИ И ИНФОРМАТИЗАЦИИ

ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ

ТЕХНОЛОГИЙ

 

 

 

 

 

 

 

 

 

 

                                          Кафедра: «Автоматизация почтовой службы»

 

 

 

 

 

 

 

 

 

 

 

 

Методическое пособие по курсу

«Теоретические основы почтовой связи»

 

Направление: 5840200-«Почтовая служба»

 

 

 

 

 

 

Ташкент-2006

 

 

 

СОДЕРЖАНИЕ

 

 

Введение……………………………………………………………………….3

1. Некоторые сведения из теории графов и сетей…………………………….4     

2. Теорема о максимальном потоке и алгоритм определения

максимального  потока……………………………………………………………9

3. Задача о кратчайшем пути и алгоритмы нахождения кратчайших

путей………………………………………………………………………………12

4. Список литературы……………………………………………………………21

5. Приложение……………………………………………………………………22

 

 

 

 

ВЕДЕНИЕ

 

 

 

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

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

 

 

 

 

1. НЕКОТОРЫЕ СВЕДЕНИЯ ИЗ ТЕОРИИ ГРАФОВ И СЕТЕЙ

 

Сетевые модели оптимизации охватывают широкий класс задач, встречающихся при проектировании систем почтовой связи, ор­ганизации   перевозки   почты,   размещении   предприятий   почтовой связи и ряда других. Как правило, эти задачи характеризуются линейной целевой функцией и линейными ограничениями, так что для их решения могут использоваться известные методы линейно­го программирования. Однако характерной особенностью этих за­дач является их большая размерность, обуславливающая необ­ходимость поиска эффективных алгоритмов решения, учитываю­щих особенности каждой конкретной задачи по сравнению с об­щей задачей линейного программирования. Основой для построе­ния таких алгоритмов служит представление решаемой задачи в виде сети или графа. В данной главе рассмотрены алгоритмы ре­шения нескольких таких задач, которые имеют непосредственное приложение в почтовой связи.

Граф G задается конечным множеством вершин (w­­­­­­­1,..., 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 = l554 и, следовательно, вер­шина 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); приведите примеры простой цепи, замкнутой цепи, гамильтонового контура.

Составить матрицу смежности и инцидентности.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Методическое пособие по курсу:

Теоретические основы почтовой связи

 

Рассмотрено на заседании кафедры

«Автоматизация почтовой службы» протокол №______________

 

Рекомендовано к печати

Составитель: Саидазимова К.М.

                       Ишдавлетова Э.Т.

 

Ответственный редактор:

 

Корректор: