
книги из ГПНТБ / Цой, С. Синтез оптимальных сетей в системе управления горными предприятиями
.pdf§ 1. КРИТИЧЕСКИЙ ОБЗОР МЕТОДОВ ОПРЕДЕЛЕНИЯ ЭКСТРЕМАЛЬНЫХ ПУТЕЙ
Как в отечественной, так и зарубежной литературе в на стоящее время описаны различные методы поиска экстре мальных путей (цепей). Наиболее распространенные из них можно разделить на два класса: индексные и матричные.
В основу индексных методов положен принцип индек сации, т. е. присвоения вершинам графа некоторых индек сов, значения которых изменяются в процессе решения. Эти величины при реализации алгоритма представляют собой длину пути от фиксированной до рассматриваемой вершины. Индексными можно считать методы Л. Р. Форда [61], Му ра [68], метод произвольного дерева [22] и другие [5, 7, 22].
Все матричные методы связаны с построением матрицы смежности весов, элементами которой являются веса соот ветствующих дуг или ребер. Экстремальные пути находят ся последовательным преобразованием исходной матрицы смежности. К матричным относятся методы А. Шимбела [69], Ж. Оттермана [23], индексно-матричный [52], В. А. Паршикова [39] и другие [23, 26, 27]. Названные методы с примерами детально изложены в третьей главе монографии «Прикладная теория графов» [53], поэтому ограничимся только их кратким описанием.
Индексные методы
Наиболее распространенные методы определения макси мальных путей на ориентированном графе (критические пу ти)— алгоритмы, описанные в работах [27, 53, 55]. Если нумерация сети произвольная, то в качестве основного ис пользуется алгоритм Л. Р. Форда [27, 61]. С помощью мето да Форда на графе можно найти путь минимальной длины
от некоторого |
фиксированного узла |
k до любого узла / |
( j = 1, 2, . . . , |
N, где N — количество |
узлов графа). Алго |
ритм установления кратчайших путей состоит в присвоении
вершинам графа индексов Vk = 0 и V j = M |
(М = оо). В даль |
|
нейшем полагается V j = V |
если при пересчете соблю |
|
дается условие Vj> |
С помощью |
метода Форда |
определяются пути минимальной длины как для неориен тированных, так и для смешанных и ориентированных гра фов, с контурами или без них. Основные преимущества этого метода — его простота и довольно быстрая сходимость про цесса вычислений. Вместе с тем указанным методом невоз можно найти максимальные пути на неориентированном и ориентированном графах с контурами. Поэтому им нельзя воспользоваться при решении задач, поставленных в гла
30
ве I. Однако идея метода Форда положена в основу различ ных алгоритмов при определении длины критического пу ти. Множество других методов, разработанных как совет скими, так и зарубежными исследователями, являются, по существу, модификацией метода Форда.
Метод отыскания максимального пути с помощью про извольного дерева [52, 53] и индексный метод [53] также основаны на идее присвоения вершинам индексов и различа ются лишь способами их присвоения. Основное преимущест во этих методов заключается в том, что они достаточно про сто могут реализоваться даже на малых ЭВМ с быстродейст вием порядка 5000 операций в секунду и объемом оператив ной памяти до 4000 ячеек. Максимальное время счета для
графов с числом дуг около |
300 равно примерно 20— 25 мин. |
К недостаткам указанных |
методов следует отнести то, что |
при их использовании приходится затрагивать ряд других алгоритмов (например, алгоритм построения первоначаль ного дерева, с помощью которого производится индексация).
Близок к рассмотренным и метод Веллмана — Калаба [64], основанный на идее динамического программирования. Здесь последовательно вычисляются значения длины макси мального пути от мажоранты до всех остальных вершин, от стоящих от конечной на одну операцию (дугу), затем на две и т. д. Метод обеспечивает довольно быструю сходимость — за (N— 2) итерации, где N — количество вершин на графе. Как и все предыдущие методы, алгоритм Веллмана — Калаба не решает задачи поиска максимальных путей на ориенти рованных графах с контурами.
Проанализировав сказанное, можно сделать вывод, что все индексные методы пригодны при поиске максимальных и минимальных путей для ориентированных графов, не име ющих контуров. Но использование этих методов для опреде ления экстремальных путей на любом графе невозможно.
Матричные методы
Экстремальные пути на графе могут находиться с по мощью матричных методов. Решение задачи в этом случае может быть получено с помощью матрицы смежности весов А , элементами a которой являются веса дуг иц. Если вер шины i и j графа дугой не связаны, то соответствующий эле мент матрицы a,ij обозначается знаком оо. К наиболее из вестным относятся методы А. Е. Шимбела [69] и И. Е. Оттермана [23]. Для установления кратчайшего пути между двумя любыми вершинами Шимбел предложил процесс ум ножения (возведения в степень Т = 1, 2, . . . , N — 1) исход-
31
ной матрицы смежности. При умножении используются специальные операции над элементами ац .
Перемножение матриц заканчивается, когда AF = А !Г+ 1
(T ^ N — 1). Здесь N — количество вершин |
графа — размер |
ность матрицы А. В этом случае элементы |
afj матрицы А т |
представляют минимальные пути между i-й и j'-й вершина ми графа. Преимущество данного метода по сравнению с индексными заключается в том, что при решении получают ся минимальные пути между двумя любыми вершинами. Кроме того, метод Шимбела может применяться при нахож дении минимальных путей (цепей) между узлами и для не ориентированных графов. Но вместе с тем следует отметить, что алгоритм Шимбела громоздок, а объем вычислений рез ко возрастает с увеличением количества вершин на графе. Трудность ручного счета очевидна, так как приходится иметь дело с матрицами, каждый элемент которых обраба тывается. Уже при iV>10 вычисления желательно прово дить на ЭВМ. Основным «неприятным» моментом при реали зации матричного метода на ЭВМ является необходимость выделения большого объема памяти для хранения элементов матриц.
В отличие от метода Шимбела метод Оттермана [23] по зволяет найти не только величины первых кратчайших пу тей, но и отыскать вторые, третьи и т. д. k-e по длине ми нимальные пути между вершинами. Сложность и большой объем вычислений затрудняют использование метода Оттер мана для ручного счета даже на графах незначительных размеров, поэтому на практике его целесообразно реализо вать на ЭВМ.
С точки зрения численной реализации огромное преи мущество по сравнению с изложенными имеет метод В. А. Паршикова [39], предназначенный для определения на графе только кратчайших путей.
Идея метода заключается в преобразовании исходной матрицы смежности, т. е. в замене каждого из ее элементов akj на сумму двух других, меньшую по величине (если это возможно). Другими словами, непосредственная связь меж ду узлами k и j заменяется путем, длина которого меньше по величине веса akj. Основное преимущество рассматривае
мого метода — простота алгоритма вычислений. Дальнейшей модификацией матричного и индексного
методов является индексно-матричный метод [52, 53]. В ка честве исходной информации применяется матрица смеж ности весов. Алгоритм нахождения экстремальных путей от фиксированного узла до всех остальных состоит в пере счете индексов (аналогично индексным методам). Метод
32
очень удобен как для ручного счета, так и для реализации на ЭВМ. Как и во всех предыдущих методах, предполагает ся, что исходный граф не содержит контуров.
Выше были проанализированы два класса методов опре деления экстремальных путей на графе: индексные и мат ричные, имеющие свои достоинства и недостатки. Раскроем эти качества по ряду критериев.
A. Типы рассматриваемых графов. Все индексные мето ды, основанные на идее индексации вершин, применяются при определении максимального и минимального путей на сетевых графах, не содержащих контуров. Исключение со ставляет метод Форда, с помощью которого можно находить минимальные пути и на неориентированном графе.
Матричные методы позволяют устанавливать минималь ные пути на графе, который может быть неориентирован ным, ориентированным, с контурами или без них. Макси мальный путь отыскивается только для ориентированного графа без контуров (сетевой график).
Б. Объем вычислений. В индексных методах объем вы числений зависит от количества дуг на графе. Для графов с числом дуг около 20 можно применять алгоритмы вруч ную. В матричных методах на объем вычислений влияет число вершин графа, причем эта зависимость квадратичная. Если граф имеет свыше 10 вершин, то на практике анализ таких графов вручную затруднителен и необходимо исполь зовать ЭВМ.
B. Виды получаемых путей. С помощью индексных ме тодов можно определить длину экстремальных путей от фиксированного узла до всех остальных, а с помощью мат ричных — одновременно длину путей между двумя любыми вершинами графа. Другими словами, конечная информация для матричных методов гораздо шире, чем для индексных.
Г. Наглядность действия алгоритма. Преимущество ин дексных методов перед матричными заключается в простоте
инаглядности выполняемых операций. Процесс индексации
ипоиск самого пути легко проводить непосредственно на исходном графе, в то время как преобразование матрицы смежности весов не дает визуальной картины. К тому же для нахождения самого пути требуются дополнительные вы числения. Проанализировав все сказанное, можно сделать вывод, что не существует алгоритма, с помощью которого можно было бы определять экстремальные пути (минималь ные и максимальные) на любом графе (ориентированном и неориентированном, однократном или мультиграфе, с кон турами или без них).
, Ниже представлен обобщенный алгоритм.
3 -0 1 |
33 |
§2. НАХОЖДЕНИЕ ЭКСТРЕМАЛЬНЫХ ПУТЕЙ
ИПУТЕЙ ЗАДАННОЙ ДЛИНЫ НА ЛЮБОМ ГРАФЕ СЕТИ
Если рассматривается граф без учета ориентации, то предлагаемый алгоритм позволяет найти все возможные це пи графа, определить сумму числовых характеристик ребер для каждой цепи, выделить максимальную или минималь ную из полученных сумм, а также цепь с заданной длиной* Алгоритм можно также применять для установления экст
ремальных |
путей |
на |
любом ориентированном графе при |
|||
решении следующей задачи. |
|
где X — множество |
||||
Пусть задан любой граф G(X, £/), |
||||||
вершин, U — множество |
дуг, |
|
||||
каждая из которых имеет свой |
|
|||||
вес (рис. 2.1). На рисунке 2.1 |
|
|||||
вершины |
графа |
обозначены |
|
|||
кружками, |
дуги — стрелками, а |
|
||||
веса |
дуг |
проставлены |
над |
|
||
стрелками. Предположим, что |
|
|||||
мы на время сняли ориентацию |
|
|||||
у дуг графа. На полученном не |
|
|||||
ориентированном графе |
опреде |
Рис. 2.1. |
||||
лим |
какую-либо |
цепь |
между |
|||
двумя |
|
любыми |
|
узлами |
|
а и Ь: например, цепь 1->-2->5->-3->4—ИЗ между узлами 1 и 6. Длина этой цепи, т. е. сумма весов ребер, будет равна 30+ 3+ 20 -f-5+ 7 0 = 128. Если теперь восстановим у всех вет вей графа прежнюю ориентацию, то в найденном пути от а = 1 до 6= 6 направления дуг будут различные. Условим ся под длиной такого пути подразумевать сумму числовых характеристик всех дуг рассматриваемой последовательно сти, причем для дуг, по которым проходим от а к 6 в направ лении стрелок, числовую характеристику будем брать со знаком «плюс», а для дуг, по которым проходим против на правления стрелок,— со знаком «минус». В нашем случае длина пути от 1 до 6 равна 78. Максимальным в этом случае может оказаться не обязательно путь, в котором веса всех дуг взяты со знаком «плюс». Например, максимальным пу тем от 1 до 6 на графе (рис. 2.1) будет 1->2-»-3->-4->-6 со зна чением L = 3 0+ 10 — 5+70 = 105.
Всегда можно построить граф, в максимальном пути ко торого содержится хоть одна дуга, движение по которой осу ществляется в обратном направлении и вес которой берется со знаком «минус». Действительно, пусть имеется произ вольный граф G(X, U), в котором по какому-либо алгоритму между вершинами А и В найден максимальный путь дли ны L (рис. 2.2), а веса всех дуг этого пути положительные
•• л
34
(со знаком «плюс»). Дополним множество дуг U графа тре мя дугами: щ, 112 , щ так, чтобы мажорантой нового графа стала вершина С. Допустим, что веса дуг щ, щ, иъ равны со ответственно нулю, I и £, где I — произвольное положитель ное число, а £ < /. Очевидно, максимальным путем от А до С нового графа будет путь, включающий максималь ный путь первоначального графа и дуги и2, из. Длина
этого пути будет равна L +
+Z— £, где L — длина мак симального пути первона чального графа от А до В. Вес дуги из взят со знаком «минус». Следовательно,
всегда можно построить граф, у которого путь максималь ной длины состоит из дуг, имеющих различную ориентацию. Рассмотренный случай будет самым общим при нахождении всех путей от а до Ъна любом ориентированном графе.
Задача ставится следующим образом. На любом ориен тированном графе необходимо определить элементарный путь максимальной или минимальной длины при условии, что веса дуг, по которым движение идет в направлении
ориентации, берутся со знаком |
«плюс», а со знаком «ми |
нус»— при движении по дугам |
в обратном направлении. |
Элементарным называется путь, в котором ни одна верши на не встречается дважды. Задача в такой постановке может быть полезна при научной организации труда в строитель стве любых объектов, а также при решении задач вентиля ционных, гидравлических и электрических сетей.
Рассмотрим вычислительный алгоритм, позволяющий решить поставленную задачу и найти на графе все пути, длина (сумма весов дуг) которых лежит в заданном интер вале [с, d\.
Сущность алгоритма заключается в том, что на графе рациональным способом перебираются все возможные цепочки между двумя любыми узлами a mb л для них опреде ляется сумма весов дуг, взятых с соответствующими знака ми. Алгоритм построения искомых путей разберем на кон кретном примере (рис. 2.1). Действие алгоритма можно пред ставить следующими основными шагами.
Шаг 1, Построение таблицы. Для исходного графа (рис. 2 .1 ) составляем таблицу 2 .1 , содержащую столько столбцов, сколько вершин на графе. Количество строк таб лицы равно наибольшему числу дуг, инцидентных какойлибо вершине. Вершине 3 инцидентно наибольшее число
35
дуг — четыре, поэтому таблица 2 .1 будет иметь четыре строки. Так как на графе шесть вершин, то и столбцов тоже шесть: 1, 2, . . . , 6. Заполним первый столбец элементами.
Таблица 2. /
Из вершины 1 выходит три дуги, поэтому элементов в столбце 1 таблицы 2.1 будет три. При этом каждую клетку, расположенную на пересечении ;-го столбца и i-й строки в таблице 2.1, разбиваем на две половинки. В верхнем левом углу записываем номер вершины, с которой соединена ду гой вершина 1 , в нижнем правом углу — вес этой дуги со знаком «плюс», если дуга исходит из вершины 1 , и со зна ком «минус», если дуга оканчивается в вершине 1 .
Рассмотрим дугу и\з, которая связывает вершину 1 с вер шиной 3. Вес дуги равен двум. Так как дуга исходит из вершины 1 , то в нижнем правом углу клетки (1 ,1 ) записы ваем вес дуги со знаком «плюс», т. е. + 2 , а в верхнем левом углу — число 3 — номер вершины 3 (табл. 2.1). Аналогично заполняем все клетки таблицы 2 .1 относительно остальных вершин графа.
Шаг 2. Построение любого пути от а до Ъ(а и Ъ— две любые вершины графа). Искомый путь a = Xi—ке2—> -...
. . . х п = Ъ определяем по известному правилу с помощью построенной на предыдущем шаге таблицы 2 .1 (п — число вершин искомого пути, n ^ N ).
Предположим, что мы хотим начать поиск всех путей графа с первой вершины а = х i= l. Номер вершины Xi = 1 находится в первом столбце строки Iq. И з вершины 1 можно
попасть в любую из смежных |
вершин х, лежащих в стро |
ках рассматриваемого столбца |
(в левом верхнем углу клет-' |
36
ки). Условимся каждый раз брать в столбце вершину из последней заполненной клетки. Таким образом, попав в j-й столбец таблицы, будем выбирать в нем из последней запол ненной строки вершину х, номер которой указывает следу ющий столбец, в котором вновь берем следующую проме жуточную вершину искомого пути, и т. д. Этот процесс про должаем до тех пор, пока в качестве очередной вершины х не будет взята вершина х п = Ъ, являющаяся последним уз лом на пути от а до Ь. В этом случае путь а=Х\-+Х2- + .. .
. . . ~*хп = Ьсчитается найденным.
Для нашего примера определим первый путь от верши
ны а= х\= 1 до вершины Ъ= х п= 6. |
Из первого |
столбца |
таблицы выберем в последней клетке |
смежную |
вершину |
.£2= 2. Далее во втором столбце из последней заполненной клетки возьмем номер следующей вершины Хз= 5. Затем в пятом столбце таблицы отыщем номер вершины лг4= 3, пос ле чего попадем в третий столбец, где фиксируем jcs= 4, и,
наконец, в четвертом столбце из |
последней заполненной |
|
клетки возьмем вершину Хв с номером 6 = |
Ъ. Таким обра |
|
зом, первый путь 1->2—»-5-*-3->-4—>-6 |
известен. |
|
Следует отметить, что при выборе в ;-м столбце таблицы очередного промежуточного узла х, смежного с j-м, можно вновь попасть в вершину х , которая вошла в найденный к данному моменту отрезок пути. То, что одна и та же вер шина х в пути встречается дважды, говорит о появлении контура. Это недопустимо, так как мы ищем только эле ментарные пути, в которые любая вершина и дуга графа могут входить не более одного раза. Чтобы избежать обра зования контуров в искомом пути, необходимо учитывать следующее условие.
Каждый раз, выбирая в j-м столбце из последней запол ненной клетки вершину х^, следует проверять, не встреча лась ли она в найденном уже отрезке пути. Если не встреча лась, то поиск продолжается, в противном случае в ;-м столб це нужно отыскать вершину х, номер которой расположен на строку выше, чем x k, и для нее вновь проверить условие появления контура. Если новая вершина х опять приведет к контуру, то в столбце j строкой выше рассмотрим следую щую вершину.
В процессе поиска может оказаться, что в j-м столбце нельзя выбрать ни одну из вершин х, смежных с j-й верши ной, так как все они вошли в определенный к данному мо менту отрезок пути. В этом случае необходимо вернуться в столбец i, из которого попали в j-й, и проанализировать в нем вершину Xi, номер которой записан на строку выше, чем номер вершины
37
Дальнейшее продолжение искомого пути осуществляем с вершины x t так, как указывалось выше. Для Xi проверя ем существование контура и либо переходим в лггй столбец и отыскиваем в нем вершину из последней заполненной клетки, либо (при наличии контура) анализируем вершину на строку выше, чем x t .
Для того чтобы было легче производить анализ на появ ление контура, а также фиксировать искомые пути и их дли ну, рассмотрим таблицу 2.2. Эта таблица состоит из двух строк: R и (-R-J-1) и содержит столько столбцов, сколько
Таблица 2. 2
вершин е искомом пути, т. е. не более |
N (N — количество |
вершин графа). В R-ю строку таблицы последовательно бу |
|
дем записывать все промежуточные |
вершины Х\, Х2 , . . . |
. . . , х п искомого пути, а в (-R-j-l)-io — длину (сумму в е с о Е дуг) соответствующих звеньев пути:
а = Х1-^X2 , Х\-^Хзг+Хъу . . . , Xi~^X2~^. . .-+хп = Ъ.
Рассмотрим процесс подробнее на примере (рис. 2 .1 , табл. 2.1). Номер вершины х\, равный 1, помещаем в первый столбец строки R таблицы 2.2, а длину звена, состоящего из одной вершины х\, равную нулю,— в первый столбец стро ки (.R +l). Далее из последней заполненной клетки первого
столбца (табл. |
2.1) выбираем вершину Х2 = |
2. Так как номер |
2 не совпадает с номером 1, записанным уже в R-й строке, |
||
то вершину Х2 |
= 2 ставим во второй столбец строки R (табл. |
|
2.2). Длину звена Х\-+Х2 определяем как |
алгебраическую |
|
сумму длины |
предыдущего звена и длины дуги щ2, запи |
санной в правом нижнем углу клетки, где зафиксирована вершина Х2 .т0+30 = 30. Величину 30 помещаем во второй столбец строки (Д + 1 ).
Далее во втором столбце таблицы 2.1 из последней за полненной клетки берем вершину х$= 5 и длину дуги Н25» равную + 3 . Номер вершины 5 в строке R таблицы 2.2 не встречался, поэтому в третий столбец строки R записываем 5, а в третий столбец (Д+1)-й строки — сумму, равную дли
не |
звена 1-*-2—>-5 (30+3 = 33). Из пятого столбца таблицы |
2 .1 |
выбираем вершину х 4 с номером 3 и длину дуги U53, рав |
ную — 20. Номер вершины 3 в заполненных трех столбцах
38
строки R таблицы не встречался, поэтому # 4= |
3 |
помеща |
||||||
ем в четвертый |
столбец |
строки R, а сумму |
длины звена |
|||||
1-»-2-»-5 и веса дуги и53, т. е. |
3 3 + (— 20 )= 13,— в |
(Л-)-1 )-ю |
||||||
строку четвертого столбца таблицы как длину звена 1 — |
||||||||
->5-^3. |
|
|
|
|
|
|
остальные |
|
Продолжая аналогичный процесс, заполним |
||||||||
столбцы таблицы 2.2. В результате в строке R будут записа |
||||||||
ны все промежуточные узлы |
первого |
найденного пути, а |
||||||
соответствующая |
длина всех |
звеньев пути — в строке (Л + |
||||||
+ !)• В последнем |
заполненном столбце (табл. |
2 .2 ) строки |
||||||
(Л +1) указана |
величина |
78, |
равная |
длине |
элементарного |
пути 1—>2->5—>3->4->6. При поиске этого пути не было об наружено ни одного контура.
Шаг 3. Поиск разветвлений пути от а до Ъ. Действия ша га 2 позволяют определить только один элементарный путь между вершинами а и Ь. Чтобы найти все остальные пути между а и Ь, рассмотрим разветвления предыдущего пути. Изложим действия этого шага на примере (рис. 2.1, табл.
2 . 1 ).
На шаге 2 установлен путь 1->-2->5-»-3-»-4->-6. Начнем отыскивать разветвление этого пути с конца, с предпослед ней вершины #5 = 4 (табл. 2.2). Путь от вершины Х\ = а до
#5 = 4 включительно считаем известным и ищем его продол жение так же, как на шаге 2 , с той лишь разницей, что в четвертом столбце таблицы 2 .1 из последней заполненной клетки выбираем не вершину 6, а вершину 1 , находящуюся на строку выше, чем #6 = 6. Другими словами, мы условно принимаем #6 за вершину контура и поступаем далее так же, как это делали на шаге 2 при появлении контура.
Согласно изложенному, для вершины # = 1 необходимо проверить условие существования контура. Первая верши на #i = l на отрезке пути 1->2->5—>~3->4 уже встречалась. Поэтому в четвертом столбце таблицы 2.1 исследуем верши ну 3, расположенную на строку выше, чем вершина 1. Вер шина 3 также не может служить очередным узлом второго пути, так как она уже была включена ранее в отрезок 1->-2->-3->-4 предыдущего пути. В четвертом столбце (табл. 2.1) все элементы уже рассмотрены. Это означает, что вто рой путь нельзя получить разветвлением от узла 4, поэтому попробуем найти ветвление от узла 3, предшествующего уз лу 4 в предыдущем (первом) пути (табл. 2.2).
Теперь, зная отрезок пути 1-»-2—>-5-»-3 , попытаемся опре делить разветвление от узла 3. При этом вершину 4 (табл. 2 .2 ) условно примем за вершину контура и повторим дейст вия шага 2. В третьем столбце таблицы 2.1 рассмотрим вер шину 2, которая находится на строку выше, чем вершина 4,
39