Новый алгоритм поиска критических путей в графе и его приложения

ЕСТЕСТВЕННЫЕ И ТОЧНЫЕ НАУКИ

УДК 519.10

новый алгоритм поиска критических путей в графе

и его приложения

Канд. физ.-мат. наук, доц. КОРЗНИКОВ А. Д.

Белорусский национальный технический университет

Математической моделью широкого круга проблем, связанных с задачами упорядочения, теории расписаний и сетевого планирования, является поиск критических путей между вершинами графа. Известные алгоритмы решения этих задач [1, 2] используют правильную нумерацию вершин графа и их пометки, т. е. существенным образом основаны на графическом представлении последнего. Однако даже в задачах сетевого планирования, где изначально весь комплекс операций задан их продолжительностью и отношением предшествования, построение графической модели является самостоятельной задачей. Указанные недостатки значительно усложняют программную реализацию этих алгоритмов и делают их малопривлекательными, если математической моделью является граф с большим количеством вершин и дуг.

Идея осуществления тернарных операций над вершинами графа для отыскания кратчайших путей, впервые предложенная в [3], оказалась достаточно плодотворной. Обобщение этого аппарата позволило получить эффективные алгоритмы решения широкого круга задач оптимизации на графах [4, 5]. Ниже приводится алгоритм отыскания путей максимального веса в многополюсной сети, позволяющей получить критические пути между любыми парами вершин в графе, не содержащем ориентированных циклов.

Рассмотрим ориентированный граф 0

и множеством дуг Ц. Каждой дуге (/, у) е Ц поставлено в соответствие число Су - вес дуги

(/, у) е Ц (су = да, если (/, у) ё Ц). Под весом любого (/ -у)-пути, ведущего из вершины /

в вершину у ((/ - у) = {(г; 71), (1 /'2) (4, у)}),

будем понимать суммарный вес всех дуг ^ Су, входящих в этот путь. Заметим, что

граф 0(У, Ц) полностью описывается матрицей дуговых весов С = сгу| . Определим тернар-

II 7 Щхп

ную операцию над матрицей С по элементу к следующим образом:

cj :=

если су ^да и c >ck +сщ,

либ0 clk + ckj = да;

cik + ckj, если cik +ckj и cj <cik +ckj,

kj

kj'

либо c„ = да

для всех i ^ j ^ k.

Утверждение 1. Выполнения тернарных операций по всем элементам k = 1, ..., n матрицы C = Я. дает матрицу, элемент которой

II j llnxn

сij равен максимальному из весов всех путей, ведущих из вершины i в вершину j.

Доказательство. Действительно, рассмотрим путь максимального веса, ведущий из вершины l в вершину р. Выполнение тернарной операции по элементу k, если вершина k не входит в этот путь, не изменит его, так как в противном случае, если для некоторого k имеем сш + сkj > сij, где i, j - две соседние вершины пути, то, заменив дугу (i, j) на дуги (i, k), (k, j), получим (l - р)-путь большего веса. Но это противоречит тому, что рассматриваемый путь имеет максимальный вес.

c

Пусть ¡0 - промежуточная вершина с минимальным индексом в рассматриваемом пути, а ¡1 и ¡2 - соседние с ней вершины. Выполнение тернарной операции (1) по элементу ¡0 матрицы С дает значение с. := с. + с , . Заменив две

Ч12 ¥0 г0г2

дуги (¡1, ¡о) и (¡0, ¡2) на одну дугу (¡1, ¡2), получим путь такого же веса, но содержащего на одну вершину меньше. Продолжая подобным образом, получаем доказательство нашего утверждения.

Заметим, что выполнение тернарных операций по всем вершинам сети дает матрицу весов максимальных путей, но не сами пути. Для отыскания этих путей воспользуемся вспомогательной матрицей Я = Ы , элементы кото-

II 1 Щхп

рой на начальном этапе: Гу = у, 7 = 1,п, у = 1,п.

Одновременно с осуществлением тернарных операций по элементу к матрицы С элементы матрицы Я будут изменяться следующим образом:

\гг], если сг] := сг];

Гк , если су := сгк + ску .

Утверждение 2. После проведения тернарных операций по всем вершинам сети элемент Гу матрицы Я будет указывать индекс вершины

¡1, следующей за вершиной / в (/ -у)-пути максимального веса. Докажем это утверждение.

Доказательство. Рассмотрим некоторый (/ -у)-путь максимального веса, а ¡, ¡1, ¡2 - первые три вершины этого пути. Поскольку элементы матрицы Я меняются только при изменении элементов матрицы С, они не будут изменяться при проведении тернарной операции по элементам матрицы С, если соответствующие им вершины не входят в рассматриваемый путь. При проведении тернарной операции по вершине ¡1 получим с^ + с^ > , поэтому

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

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

Для любого (/ - у)-пути последовательно находим г. = I

Г1У = г 2,

г  = у . Искомый

41

у '1'

путь максимального веса между вершинами и у проходит через вершины: ¡, ¡1, ¡2, ..., ¡к, у.

Проиллюстрируем работу алгоритма на следующем примере. Зададим граф матрицей дуговых весов

С =

да 5 3 7 да да

да да да 1 да да

да 4 да да 6 да

да да да да 5 6

да да да да да 2

да да да да да да

Последовательно по всем элементам к = 1, 2, 3, 4, 5, 6 осуществим тернарные операции (1), изменяя одновременно элементы матрицы Я по формулам (2). В результате получим:

С =

да 7 3 8 13 15

да да да 1 6 8

да 4 да 5 10 12

да да да да 5 7

да да да да да 2

да да да да да да

Я =

3

4 2 4 4 4

Критический путь (путь максимального веса) ведет из вершины 1 в вершину 6 и имеет вес 15 единиц. С помощью вспомогательной матрицы Я находим:

Г16 =3; гзб = 2; Г26 = 4; Г46 =5; Г56 = 6

т. е. критический путь состоит из дуг (1, 3), (3, 2), (2, 4), (4, 5), (5, 6). Аналогичным образом можно найти путь максимального веса между любой парой вершин графа. Поскольку элементы первого столбца и шестой строки равны бесконечности, вершина с номером 1 не является концевой ни для одной дуги (начальная вершина), а из вершины с номером 6 не выходит ни одна дуга (конечная вершина). С помощью найденных критических путей и матрицы С легко получить графическое изображение заданного графа (рис. 1), числа над дугами равны их весам.

го

дуги (^ 72 ), (i2,7з), . - (7к7к ), указывает

на

Рис. 1

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

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

Рассмотрим теперь задачу упорядочения элементов некоторого конечного множества Ц = {а7} мощности п. Для каждого элемента а7 определено отношение порядка, т. е. задано множество Ц7 с Ц элементов, которым элемент а7 непосредственно предшествует (а7 -< а у У а у е Ц7). Если каждому элементу

а7 е Ц поставить в соответствие вершину 7 некоторого графа и соединить ее с вершиной у ориентированной дугой (7, у) для всех а у е Ц/,

то наличие пути из вершины 71 в 7к, содержаще-

существование отношений порядка между элементами

а7 < а7 < ...^ а7 .

71 '2 'к

В этом случае говорят, что а7 предшествует

ак (ач ^ ак ).

Таким образом, заданный выше описанным способом граф с п вершинами может быть использован для определения отношения порядка между элементами конечного множества. Для этого достаточно присвоить всем дугам (7, у) одинаковые веса (например, равные 1), если а7 -< а у, а веса остальных дуг положить равными бесконечности.

Применив тернарные операции (1) к матрице весов и выполнив операции (2), получим матрицу критических путей между всеми парами вершин (7, у). Если элемент суу конечен, то

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

то а7 -< а у, если элемент с^ у равен к (1 < к < п), то а7 -<-< а у, причем вся цепочка непосредственно предшествующих друг другу элементов содержит их ровно к: а7 ^ а^ < ...^ а^ <

< ак < ау , где 72 = Гц , 7з = ГЧ] ,..., 7к = Гк-и , Гру -соответствующие элементы матрицы Я.

В качестве иллюстрации работы алгоритма упорядочения элементов конечного множества рассмотрим следующий пример. Отношение непосредственного предшествования задано табл. 1.

Таблица 1

7 1 2 3 4 5 6 7 8

2,5 7 6,8 6,8 6,8 7 - -

Сформируем начальную матрицу весов С

С =

С =

да 1 да да 1 да да да

да да да да да да 1 да

да да да да да 1 да 1

да да да да да 1 да 1

да да да да да 1 да 1

да да да да да да 1 да

да да да да да да да да

да да да да да да да да

осуществления операций ицы С и Я: (1),

да 1 да да 1 2 3 2

да да да да да да 1 да

да да да да да 1 2 1

да да да да да 1 2 1

да да да да да 1 2 1

да да да да да да 1 да

да да да да да да да да

да да да да да да да да

Я =

1 2 3 4 5 5 5 5

1 2 3 4 5 6 7 8

1 2 3 4 5 6 6 8

1 2 3 4 5 6 6 8

1 2 3 4 5 6 6 8

1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8

Таким образом, имеем:

а1 аб (Г16 = 5, г5б = 6 ) и а  а  аб;

а1  а7 (тУ1 = 5, г57 = 6, г67 = 7), а1  а5  а6  а7; аг  а8 (/18 = 5, г58 = 8), а1  а5  а8;

а3  а7 (г37 = 6, г67 = 7), а3  а6  а7; а4  а7 (г47 = 6, г67 = 7), а4  а6  а7;

а5  а7 (г57 = 6, г67 = 7), а5  а6  а7.

Учитывая отношение непосредственного предшествования и полученные результаты, легко построить граф, задающий отношение

порядка между вершинами (элементами ai множества и):

О?

Рис. 2

Поскольку элементы седьмой и восьмой строк первого, третьего и четвертого столбцов матрицы С равны бесконечности, элементы а7, а8 не предшествуют никаким другим элементам (конечные вершины графа) и нет элементов, предшествующих элементам а1, а3, а4 (начальные вершины).

В задачах сетевого планирования выполнения комплекса операций (работ) для каждой операции i, i = 1, п, известна ее продолжительность ti, i = 1, п, и задано отношение предшествования, т. е. определено множество Ц, i = 1, п, операций, выполнению которых непосредственно предшествует выполнение операции i, i = 1, п. Ориентированный граф, представляющий взаимосвязь отдельных операций (сетевой график), будет содержать 2п вершин (каждой операции i поставлена в соответствие дуга, т. е. пара вершин (/', п + /'), i = 1, п). Матрицей дуговых весов С2пх2п на начальном этапе будет блочная матрица порядка 2п х 2п

С

Гс11 С12 1

пхп пхп

С21 С22

пхп пхп

Причем полагаем элементы с{ п+{ подматрицы СЦп, равными ^, i = 1, п, элементы сп+г.,у

подматрицы С„2Х„, равными нулю, если у е Ui (операция i непосредственно предшествует операции у еUi), i = 1,п. Все остальные элементы матрицы С2пх2п равны бесконечности (т. е. достаточно большое число).

Из содержания задачи, для которой построена сетевая модель, следует, что рассматриваемый граф не может содержать циклов. После осуществления тернарных операций (1) и (2) последовательно для всех к = 1, 2, ..., 2п, получим матрицу С _ с.. и вспомогательную

у I12пх2п

матрицу Я _ Г

с помощью которых

7 112 пх2 п

можно получить все числовые характеристики сетевого графика, а при необходимости - и его графическое изображение. Так, все вершины 7, 7 = 1, п, для которых сп+у 7 _ да для любого

у _ 1,п, являются начальными вершинами сетевого графика (множество У0), а соответствующие им операции - начальными. Вершины п + 7, 7 = 1, п, для которых с

п+г,у

= да для всех

у _ 1, п, являются конечными вершинами сетевого графика (множество Ук), соответствующие же им операции - завершающими. Критическое время выполнения всего комплекса операций

_ тах {с \сн *да}с у =с7 у .

к 7еУ0,уеУк I у I у ) у 70]к

Критические операции, составляющие критический путь Рк _ {70 , ^, 72,..., 7к }, находятся с помощью вспомогательной матрицы Я: 7 =

= Г 7 = Г 7 = Г

п+7о 7к ' 2 п+7!,к п+7к-1,

Ранний срок начала выполнения любой операции у равен

Гтах{с7У /с у ^да-К у

Трн = ^ 7еУ0

у К у еУо. Соответственно ранний срок ее окончания

т р° = т рн + т

или

Т/° = таХ{с7,п+у / с7,п+ у * да}, 7 = I п.

Поздним сроком начала Т™ и окончания

ТуП0 любой операции у называется наибольшее

допустимое время начала и окончания этой операции без нарушения срока завершения всего проекта. Понято, что:

Т/н = у, Тро _ Тупо, Уу е Рк; у _ Тк, ТуПН = Тк - Гу, п + ] еУк. Для операций у таких, что Цу П Рк _ {}

Тпо_трн тпн_Тп0 Т

Таким образом, свободные резервы времени Гу могут иметь только конечные операции и операции, непосредственно предшествующие

критическим; Гу _ Т™ - Т'р0, если п + у е Ук или

Цу П рк *0.

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

) (Ткр - сш ), I еУо, к е Рк.

Я _ тт

(7,п+7)е(1 -к)1

Если операция не предшествует ни одной из критических операций (т. е. предшествует завершающим), то ее свободный резерв времени равен минимальному значению разности между критическим временем и ранним сроком завершения конечных операций, которым она предшествует. Таким образом, если 7 ^ к (к е Рк), но 7 ^ I, п +1 еУк, то Я7 =

= т1п(Тк - С7,п+7). п+1е Ук

Для иллюстрации описанного выше алгоритма построения сетевого графика и получения его числовых характеристик рассмотрим следующий пример. Информация о комплексе из 10 операций задана табл. 2.

Таблица 2

Номер операции 7 1 2 3 4 5 6 7 8 9 10

Каким операциям

предшествует и 7 2 3 - 7,10 6,8 7,10 9 9 - 3

Продолжитель-

ность 11 2 2 3 4 1 4 4 3 2 9

Выполнив тернарные операции (1) по всем элементам к _ 1, 2, ..., 2п начальной матрицы дуговых весов, полученной описанным выше способом, и осуществив одновременно операции (2) над элементами матрицы Я _ Г ,

II у 112пх2п

Гу _ у, 7 _ 1,2п, у _ 1,2п , получим:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

С =

1 2 4 2 4 7

2 2 2 5

3 3

4 13 4 8 4 16

5 14 15 1 9 5 17

6 13 4 8 4 16

7 8 4 3

9

10 9

11 0 2 2 5

12 0 3

13

14 9 0 4 0 12

15 13 04 0 8 4 16

16 9 0 4 0 12

17 0

18 0

19

20 0 3

8 10 13

5 9 4 11 14

4 8 10 13

4 6

3 5

2

4 6 9

8 3 10 13

4 6 9

2

2

4

1

9

4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Я =

1 " 11 11 11

2 12 12

3

4 14 14 14 14 14 14 14 14

5 15 15 15 15 15 15 15 15 15 15 15

6 16 16 16 16 16 16 16 16

7 17 17

8 18 18

9

10 20 20

11 2 2 2

12 3

13

14 10 7 10 7 7 10

15 6 6 6 6 6 6 6 8 6 6

16 10 7 10 7 7 10

17 9

18 9

19

20 3

Здесь пробелы в матрице С означают, что соответствующий ее элемент с у _да, а в матрице Я - это Гу _ ].

Начальные операции У0 _ {1, 4, 5}, конечные Ук _ {3, 9}. Ранние сроки начала выполнения операций:

Т1рн _ Т4рн _ Т5рн _ 0, Т2рн _ 2, Т3рн _ 14;

Т6рн _ 1, Т7рн _ 5, Т8рн _ 1, Т9рн _ 9, Т1рн _ 5,

соответственно ранние сроки окончания всех операций:

^ро _ 2; Т2ро _ 4; Т3ро _ 17;

Т4р° _ 4; Т5р° _1; Т6р° _ 5; Т7р° _ 9;

Т8р° _ 4; Т9р° _ 11; Т^ _ 14.

Критическое время Тк _ тах{С513, С519} _ _ С _ 17

5,13 11

Критические операции определяются с помощью матрицы Я

Г15,3 = б; 1б,3 = 10' Г20,3 = 3

Таким образом, полученные в результате осуществления тернарных операций (1) и (2) матрицы С и Я позволяют определить все параметры сетевого графика.

В Ы В О Д

Разработан новый эффективный алгоритм отыскания критических путей в графе, не использующий графического представления последнего, а основанный на введенном понятии осуществления тернарных операций над матрицей дуговых весов.

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

Л И Т Е Р А Т У Р А

1. Форд, Л. Р. Потоки в сетях / Л. Р. Форд, Д. Р. Фал-керсон. - М.: Мир, 1966. - 276 с.

2. Конвей, Р. В. Теория расписаний / Р. В. Конвей,

B. Л. Максвелл, Л. В. Миллер. - М.: Наука, 1975. - 360 с.

3. Floyd, R. W. Algorithm 97: Shortest Path / R. W. Floyd // Communication of ACM. - 1962. - № 5(6). - 345 p.

4. Корзников, А. Д. Тернарные операции в задачах оптимального преобразования сети / А. Д. Корзников // Современные прикладные задачи и технологии обучения в математике и информатике: сб. науч. ст. - Минск, 2004. -

C. 92-98.

5. Корзников, А. Д. Оптимизация системы маршрутов в транспортных сетях / А. Д. Корзников // Проблема прогнозирования и государственного регулирования социально-экономического развития. - Минск, 2004. -С. 46-49.

Поступила 6.11.2007

УДК 532.135:532.5.013.4

о реализации метода коррекции давления при решении уравнений гидродинамики несжимаемой жидкости

МАКАРОВ И. А.

ЗАО «БелХард»

Во многих исследований в области вычислительной гидродинамики значительную часть составляют работы, рассматривающие модель несжимаемой жидкости. Причина этого - мно-

гообразие технологических процессов, в которых применима данная модель, в частности при добыче нефти в Республике Беларусь, в том числе нефти с аномальной вязкостью