
книги из ГПНТБ / Скрыдлов, Н. В. Автоматизированные системы оперативного управления в строительстве
.pdf1
Рис. 5 . Блок-схема алгоритма расчета сетевых графи ков итерациями
/^ р |
|
Гт/ |
|
|
|
|
|
|
=/пах- |
|
|
|
|
||
Т/ |
=min |
/т/ |
|
|
|
|
|
|
/7 |
|
|
|
|
||
|
|
_ Т/ % |
* |
|
|
|
|
Последняя величина, будучи вычтенной из т * |
= тах Т / |
||||||
даст Ту |
для каждого J . |
|
|
Р |
<v^ |
||
Если при любом |
из проходов |
максимум |
|||||
Ту |
или Tj был |
||||||
получен путем суммирования, |
то |
признаку |
1 |
присваиваем |
60
значение true и повторяем |
счет. Поскольку нумерация |
со |
|||||
бытий определяется потребностями производства, |
то |
номера |
|||||
событий не имеют, вообще говоря, отношения к |
последова |
||||||
тельности их вхождения в пути сетевого графика. |
|
|
|
||||
Просмотр списка работ мы осуществляем от начала |
к кон |
||||||
цу, поэтому число просмотров |
лежит между 1 (если в |
спис |
|||||
ке работы упорядочены так, что порядок их расположения |
в |
||||||
любом пути таков же, как |
в |
исходном списке) |
и |
/ ( j 1 ) |
в |
||
случае противоположного расположения. Здесь / |
(/О |
- |
наи |
||||
большее число работ в пути. |
|
|
|
|
|
|
|
Поэтому математическое ожидание числа просмотров |
се |
||||||
тевого графика Е (/ff) |
= |
1 |
( ^ + ^ (J4), |
|
|
|
|
С другой стороны, обращает на себя внимание |
предельно |
||||||
малое число операций, |
осуществляемое при анализе |
каждой |
работы, и минимум необходимой для расчета информации(кро
ме исходных данных / |
[1 : П~] , ур., n] , |
t y |
[ 1 : /Т 2 |
и |
||
результатов |
Ткр , Т Р [ 1 : У ] , T n |
[1 : |
нужны лишь |
|||
параметры |
П, М , J |
). |
|
|
|
|
Таким образом, метод итераций является |
(если |
данные |
||||
целиком размещаются в оперативной памяти) |
наиболее |
|
эко |
|||
номичным с точки зрения затрат времени на |
анализе |
одной |
работы, наиболее экономичным с точки зрения затрат памяти
ЭВМ для размещения дополнительной информации. |
|
|
|
|
||||||||||||
Недостатком метода |
является сравнительно большое |
чис |
||||||||||||||
ло просмотров, поэтому возникает необходимость |
|
упоря |
||||||||||||||
дочения списка работ. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Введем |
отношение |
квазипорядка |
на графе |
(X, Г) * |
сле |
|||||||||||
дующим образом: х ^ у , |
если х=у |
или имеется путь из х |
в |
у. |
||||||||||||
Будем в этом случае говорить, что х предшествует у или |
у |
|||||||||||||||
следует за х. Если одновременно |
х » у |
и |
у «= |
х, |
то говорят, |
|||||||||||
что |
х эквивалентно |
у |
(у |
= |
х ). |
|
В этом случае |
х |
совпадает |
|||||||
с у |
(х= у) |
или х и у лежат на |
одном контуре. |
|
|
|
|
|
||||||||
В |
графе |
без контуров |
х=у означает совпадение |
х с |
у; |
|
в |
|||||||||
этом |
случае отношение |
|
|
является отношением |
порядка. |
|
|
|||||||||
|
Отношение £ |
есть |
квазипорядок, |
если |
имеют |
место: |
||||||||||
|
рефлексивность (х |
* |
х |
для всех х |
е |
X); |
транзитив |
|||||||||
|
ность |
(х ^ у, |
у^ 2 — |
х ^ z |
для |
х, |
у , z c |
X). |
|
|
|
61
Рассмотрим для графа |
0 \ ^ ( Х , Г) |
множества |
X |
(<* ) ^ : |
|||||
Х (0) |
= |
{ * >Гх 1 е |
0 } |
; |
|
|
|
|
|
Х ( 1 > |
= |
( л , г ; 1 € Х(0)} |
; |
|
|
|
|
||
хш={*,г;1е (/-*;]; |
|
|
|
|
|||||
х |
г |
; |
1€jr (/7- 1)}. |
|
|
|
|
||
Назовем a. (X) порядковым числом вершины х, |
если xeXY^A |
||||||||
Некоторые вершины графа не могут иметь порядка, |
к |
таким |
|||||||
относятся все вершины контура. |
|
|
|
|
|||||
Применительно к описанному выше алгоритму |
|
получаем |
|||||||
следующие |
очевидные следствия. |
|
|
|
|
||||
1 . Порядковые числа вершин вычисляются с помощью при |
|||||||||
веденного |
алгоритма расчета при всех |
£у = 1. |
|
|
|
||||
2 . Если в сети имеется контур, то алгоритм |
|
зацикли |
|||||||
вается. Поскольку до окончания работы алгоритма нам |
не |
||||||||
известна длина |
/ |
( J4 ) |
максимального пути, для |
|
контроля |
наличия контуров необходимо пользоваться верхней оценкой -
числом работ в сети п . |
|
|
|
|
|
|
|
3 . В случае отсутствия в сети контуров можно |
упорядо |
||||||
чить список работ, вычислив порядок вершин и |
расположив |
||||||
работы (х, у) по |
росту |
ос (х). |
|
|
|
|
|
4 . При использовании метода итераций в случае |
'упоря |
||||||
доченного" списка работ расчет-просмотр производится |
с |
||||||
минимумом элементарных операций. |
|
|
|
|
|
||
Простейший алгоритм упорядочения состоит в |
последо |
||||||
вательном переборе списков i , j , t y |
с |
выписыванием |
в |
||||
списки с*, J*, tij |
работ, для которых |
& ( 1) |
=0, |
затем |
1 и |
||
т.д. |
|
|
|
|
|
|
|
Это позволяет |
иначе |
организовать |
алгоритм |
расчета, |
а |
именно по схеме: вычисление функции порядка, упорядочение,
счет. |
|
|
При этом счет сводится к простому процессу |
вычис |
|
ления глах{ ^ . tij для каждого события |
j и |
осуществ |
ляется за один просмотр упорядоченного |
списка |
работ. По |
этому если расчет сетевого графика входит во |
внутренний |
|
цикл, целесообразно произвести отдельно его |
упорядочение |
|
и во внутреннем цикле оперировать уже с |
упорядоченным |
|
списком работ. |
|
|
* Для конечных графов один из частных случаев |
поряд |
|
ковой функции. |
|
|
62
gi.ApTPPKrM.Kgga |
|
|
|
Фулкерсон описал в [У .2] алгоритм, позволяющий |
при |
||
сваивать время событиям графа в порядке |
роста |
их |
поряд |
ковой функции. |
|
|
|
В просмотр вставляется дополнительный цикл, в |
|
котором |
|
проверяется возможность осуществить операцию |
присваи |
||
вания времени некоторому событию, а именно ( |
описываем |
||
для ранних сроков): при просмотре работ для каждой |
из них |
||
организуется дополнительный, внутренний перебор, |
т .е . про |
||
веряется, входит ли в предшествующее ей событие |
L £ s J * |
||
хотя бы одна работа; если нет, то событию |
Г s ] , |
в |
которое |
входит она сама, присваивается время по общей формуле. В этом случае сама работа из списка вычеркивается.
Данный алгоритм осуществляет расчет временных харак теристик графика избирательно. В соответствии с ростом по
рядковой функции ft ( xL ) его можно применить для |
упоря |
|
дочения списка работ. Для этого соответствующие |
работы не |
|
исключаются, а заносятся в другой список в порядке |
обна |
|
ружения. |
|
|
Работа с упорядоченным списком существенно |
сокращает |
время, поэтому возникает вопрос о возможности сделать ал
горитм более эффективным. Такой алгоритм описан |
|
Каном |
||||||||
в [У .З ]. |
Эффективность работы |
|
алгоритма достигается |
за |
||||||
счет определенной предварительной подготовки, |
состоящей |
|||||||||
из следующих этапов: |
|
|
|
|
|
|
|
|||
предварительное упорядочение исходного списка работ; |
||||||||||
создание служебных информационных массивов. |
|
|
|
|||||||
Предварительное |
упорядочение |
работ состоит |
в |
|
син |
|||||
хронной перегруппировке всех массивов таким образом, |
что |
|||||||||
в списке |
/ [ в ] |
номера |
i |
растут с ростом s . |
|
|
||||
Для ускорения поиска создаются служебные массивы |
||||||||||
|
|
А [ I ] , пЬх Г /] |
i |
1Г [ s ] . |
|
|
|
|||
Массив А [ i ] для каждого |
включает номер |
s |
в |
|||||||
списке / [ s ] , |
начиная с |
которого содержатся начальные вер |
||||||||
шины с номером i . |
|
|
|
|
|
|
|
|||
Массив |
/7|х [ I ] |
для каждого |
с |
содержит число |
конеч |
|||||
ных событий |
в списке j [ s ] , для которых j [ s ] ~ i |
, т .е . |
он |
|||||||
для каждого имеет значение числа работ, входящих в |
собы |
|||||||||
тие с номером |
/ |
|
|
|
|
|
|
|
|
*Под s подразумевается параметр цикла при переборе массива работ.
63
О3 |
|
|
1 |
|
|
|
|
Ввод n, |
£ [ ) : я ] , 7 [ l:n], |
[ b i ] ; |
|
упорядочение работ (списков £ |
, <t-y) |
||
по росту номеров £ ■; |
|
|
|
чистка: |
Л [ l :V}: * пвх[ 1:Л’]-: - |
О, |
П [1:п}: ■ false;
просмотр / [ 1:п] с одновременным четом пв х [;']■:■ пвх [;']♦ 1;
просмотр £ [ 1:п ]с одновременным формированием А [ 1:Л'] ■:
А [£ [я]]-:» ( A li [я]], если £ Ы =£ [я-1] если £ Ы / £ [*■]];
просмотр £ [1т л] с одновременным формированием /7[1эт]:
ПW:■ | П[я], если £[s]-£[s+l]
\true, если £ [s]/£ [я+1]
* Р [ 1:п] - м а с с и в н о м еров работ в по р я д к е ,о п р е д е л я е м о м сетью ; R [):п] - б уф ер д ля п ер еуп о р ядо ч ени я £ [1: я],
Д 1:п], Ц : [ Iti] па Р [яя]
-i .Г 4
Поиск контуров (см.алгоритм Адельсона-Вельского); составление списка работ, лежащих на контурах; выработка признака нали чия контуров-признака ошибки в исходных данных:
Формирование списка номеров работ, исходящих из начала:
1) поиск £[л] с пвх [£ [я]] • 0 ;
2) выписывание в массив Р после* довательно номеров я от Л [я] до я , для которого П [я] - true (включительно)-; при этом произ водится счет элементов Р { я) — параметр m
I 3
0
В ы х о д Рис. 6 . Блок-схема алгоритма Кана
Чистка: г : ■ 0 |
I |
Массив K [ s ] является булевским |
и принимает |
значение |
||||||||||
true для тех |
s |
, |
для которых |
iC&] |
|
+ |
|
|
||||
Алгоритм работает следующим образом (рис. 6 ) . |
|
|
||||||||||
Рассмотрим одно существенное свойство алгоритма |
Кана: |
|||||||||||
алгоритм позволяет получить все расширения графа G (Х ,Г ), |
||||||||||||
не приводящие к образованию контуров. |
|
|
|
|
||||||||
Оператор 'начальный шаг' в указанном |
алгоритме |
строит |
||||||||||
'фронт работ', исходящих из х |
. |
Оператор (§) строит |
|
(не |
||||||||
выделяя их явно) |
последующие “фронты, |
пользуясь |
правилом |
|||||||||
выбора |
работ из |
^ |
подряд. |
G' |
|
|
G , не |
|
||||
В произвольном расширении |
графа |
приво |
||||||||||
дящем к образованию контуров, могут встретиться |
дополни |
|||||||||||
тельные дуги ( i , У |
) |
двух типов: |
|
|
|
|
|
|
|
|||
соединяющие вершины с |
i r ( i ) ^ 1T(j) |
- |
они не меняют фронтов |
|||||||||
работ; |
|
|
|
|
7t(i)^7i(J) |
|
|
|
|
|
||
соединяющие вершины с |
- |
наличие таких |
вершин |
|||||||||
эквивалентно введению запретов на рассмотрение работ, |
исхо |
|||||||||||
дящих из |
j |
, до рассмотрения работ, |
исходящих из |
i. |
|
|||||||
Таким образом, |
для каждого допустимого расширения |
G ' |
графа можно сконструировать такое правило запрета, что работы
G в упорядоченном списке будут расположены в том же |
поряд |
ке, как они были бы расположены в упорядоченном списке |
G' , |
составленном без применения правил запрета.
Поскольку задача минимизации срока выполнения комплекса работ при заданных ограничениях на ресурсы, описанная выше, является как раз задачей поиска допустимого (удовлетворяющего ограничениям) расширения G' графа G , ее можно истол ковать как последовательный поиск допустимого включения работ
во фронты, причем правило выбора должно гарантировать |
мини |
||
мум срока выполнения комплекса работ. |
|
|
|
Таким образом, алгоритм Кана является подходящим |
инстру |
||
ментом для построения множества расширений графа G |
с |
за |
|
данными ограничениями на фронты работ. |
|
|
|
По сравнению с алгоритмом метода итераций алгоритм |
Кана |
||
требует дополнительно место для расположения служебных |
мас |
||
сивов Л f < ] , |
С / J и булевского массива f f ( s ) . |
|
|
По числу операций на анализ одной работы он требует |
|
при |
|
мерно в 5 раз большего времени. Однако он позволяет |
упорядо |
||
чить спиоок работ за один просмотр. Кроме того, с его |
помощью |
Можно совместить упорядочение с решением задачи выбора опти
мальной очередности работ с заданными ограничениями на |
ре |
сурсы. |
|
|
65 |
5.3ак.349
3 . Ал г о р и т м обхода д у г ориентированного графа |
|
|
Данный алгоритм аналогичен.алгоритму Тарри [y.3j |
, с |
по |
мощью которого решается классическая задача теории графов - |
||
поиск выхода из лабиринта. В применении к сетевому |
планиро |
|
ванию алгоритм был рассмотрен Г.М. Адельсоном-Вельским |
и |
|
Ф.М. Филлер [У.5] . Принципиальная схема работы |
алгоритма |
|
Адельсона-Вельского описьюается следующим образом. |
|
|
1 . Осуществлением из конечного события шаг влево, записы |
||
вая работу, по которой сделан шаг влево, в массив "пути". |
Ана |
|
лизируем событие, которое является началом этой работы. |
Если |
|
оно не является началом сети, повторяем шаг влево и т.д., |
пока |
|
не дойдем до начала сети. |
|
|
2 . Извлекаем из массива пути последнюю занесенную |
туда |
|
работу. Ее записываем в список упорядоченных работ, |
а в |
ис |
ходном списке помечаем как исключенную. Эта процедура |
назы |
|||||||||
вается шаг вправо. Анализируем конечное событие этой |
работы |
|||||||||
на возможность сделать |
из него шаг влево (проверяем, |
|
есть |
|||||||
ли в числе работ, входящих в это событие, еще не |
исключенные |
|||||||||
из исходного списка). Если это возможно, то осуществляем |
но |
|||||||||
вый шаг влево, если же нет, то помечаем событие как |
началь |
|||||||||
ное и осуществляем по работам массива пути шаг вправо. |
|
|
|
|||||||
3 . |
Процедура заканчивается, когда ни из одного конечного со |
|||||||||
бытия нельзя сделать |
шаг влево. |
|
|
|
|
|
|
|||
На самом деле шаг влево сопровождается временной пометкой |
||||||||||
вершин работ, записанных в массив пути, а шаг вправо - |
исклю |
|||||||||
чением этих пометок. Это позволяет совместить упорядочение |
с |
|||||||||
выявлением контуров, которые возникают вследствие ошибок |
в |
|||||||||
заполнении исходных данных. Работа алгоритма |
поясняется |
|||||||||
рис. 7 . |
|
|
|
|
|
|
|
|
|
|
Алгоритм Адельсона-Вельского требует также |
определенной |
|||||||||
предварительной подготовки. |
|
|
|
|
|
|
||||
1 . Списки |
i , j , |
ttj |
синхронно упорядочиваются таким |
обра |
||||||
зом, |
чтобы в списке |
yTsJ номер конечного события J |
|
|
рос |
|||||
с ростом индекса в . |
|
ТГС [1 : N ] |
|
|
|
|
V |
|||
2 . Создается булевский массив |
, |
такой, что |
|
|||||||
Г/ ] |
= true |
при Г |
£е |
0 (признак начального события). |
|
|
||||
3 . |
Создается массив |
А [ j ] , такой, что |
|
|
|
|
|
|||
|
|
1 » J f-sj |
|
|
|
|
|
|
||
|
А Ш - |
О, Л $1 ~ J [ S - 1 ] |
|
, n |
|
|
|
|
||
|
|
s , S [ s ] ? S [ s - 1 ] |
s = 2 , |
> n |
|
|
|
66
Выход
'Массив р [l:n] предназначен для записи номеров работ в порядке, определяемом
графом. Массив Р[1:я] ест буфер для переупорядочения работ а иорядхе, опре-
делеияом Р[1:п].Пр2[}:п] елужит для
иолветяи просмотренных работ, Пр 3 [1:п]- Рис. 7 . Блок-схема алгоритма Адельсона-Вельского
для обнаружения контуров.
а>
4. Создается массив [ l : /?J , такой, что
Гfalse |
, У [ s ] |
= j [ s + 1 ] r |
s=1, ... f п -1 |
||
7rP[t] = < t r u e |
, |
У [ s] |
* у [ s + i ] , |
s = i , . . . , n - i |
|
I t r u e |
, |
j i n ] |
|
|
|
Алгоритм Адельсона-Вельского требует несколько |
меньшей |
||||
информации, чем алгоритм Кана, |
поскольку массив пути и упо |
||||
рядоченный массив работ могут быть выполнены в виде |
двух |
||||
стеков, направленных навстречу друг другу, что |
автома |
||||
тически гарантирует от переполнения и даже сокращает |
число |
операций: конец работы наступает, когда записанная в путь рабо
та должна быть при включении в упорядоченный список |
занесена |
||||
на то же место, т.е. когда два стека целиком заполняют |
массив |
||||
длины П , где |
П - число работ. |
|
|
|
|
Работа алгоритма Адельсона-Вельского несколько |
медленнее |
||||
работы алгоритма Кана, однако он обладает следующими |
досто |
||||
инствами: |
|
|
|
|
|
обеспечивает выявление контуров в явном виде; |
|
|
|
|
|
обеспечивает просмотр всех путей за один проход |
|
|
массива |
||
работ; |
|
|
|
|
|
позволяет выделять пути (или при модификации цепи), |
|
удов |
|||
летворяющие заданным требованиям. |
|
|
|
|
|
Это делает целесообразным его применение при решении |
за |
||||
дач типа поиска максимального потока, |
|
|
|
|
|
4 . Т рудности, связанны е с ростом объема |
задачи |
|
|||
Требования практики нередко приводит к необходимости |
рас |
||||
чета сетей весьма больших объемов. |
|
|
|
|
|
При экономном использовании памяти ( упаковка |
нескольких |
||||
чисел в одну ячейку, программирование алгоритмов на |
|
языках |
|||
типа ассемблера) |
современные ЭВМ позволяют рассчитывать без |
обращений к внешней памяти сети требуемых объемов.
Однако при программировании на языках более высокого уров
ня под все переменные, описанные в алгоритмах разд. 1 - 3 |
дан |
|
ной главы, будет зарезервировано отдельное место, т.е. |
только |
|
массив событий, служащий для записи ранних (поздних) |
сроков, |
|
не пострадает. В этом случае актуальным становится вопрос |
об |
организации расчета для случая, когда в оперативной памяти вы делено место для массива событий, работы и служебные мас сивы образуются по мере надобности.
68
4 .1 . Прямой расчет сетей большого объема
Под прямым расчетом имеется в виду расчет сетей без |
раз |
бивки на фрагменты и без каких-либо предположений об |
упоря |
дочении массива работ. Для расчета сети могут быть |
исполь |
зованы метод итераций, алгоритм Кана и алгоритм АдельоонаВельского.
Сравним число обращений к внешней памяти при использовании этих алгоритмов. Пусть в оперативной памяти отведено М ячеек для размещения исходных данных, сеть же состоит изЛ'работ и 5 событий. Пусть S М, т.е. массив событий целиком распола гается в оперативной памяти. Рассмотрим теперь поочередно все три алгоритма.
4 .2 . Метод итераций
Перебор массива работ требует |
У |
+ 1 |
обра |
|
М - S |
||||
|
|
|
||
щений к внешней памяти, где под [х] |
понимается целая |
часть |
||
числа х. |
|
|
|
Математическое ожидание числа переборов массива работ есть
/77 = |
1 |
{ПАХ |
|
|
|
|
|
1 ( f ) - |
|
|
|
||
|
|
2 |
|
|
|
|
|
|
/* |
|
|
|
|
Следовательно, |
математическое ожидание числа обращений |
|||||
к внешней памяти |
|
|
|
|
||
|
|
1_ |
У |
’f |
u n . |
|
/77 = |
+ 1 |
|
||||
|
|
2 |
М - 5 |
|
|
|
|
|
|
|
|
|
|
4 .3 . Алгоритм Кана и Адельсона-Вельского |
|
|||||
Пусть в памяти лежит некоторая часть массива работ |
длины |
|||||
М - 5 |
и нам необходимо найти работы, |
исходящие из некоторого |
||||
события |
|
/ . Поскольку группы работ, |
исходящие из |
различ |
||
ных событий, расположены случайным образом, |
вероятность по |
требности в считывании нового массива есть:
|
М - б |
Рсч |
_ |
|
Математическое ожидание числа обращений к внешней памяти равна
69