Файл: Цой, С. Синтез оптимальных сетей в системе управления горными предприятиями.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2024

Просмотров: 105

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ты до любой вершины на графе с полными контурами. Как уже указывалось, ранним началом любой работы i являет­ ся путь максимальной длины от миноранты U до i вер­ шины графа. При вычислении ранних начал работ на сете­ вом графе с полными контурами учитываются все связи между работами, кроме контурных. Дуги, связывающие кон­ турные работы, временно удаляются.

Все вычисления будем проводить на графе, построенном на языке «работа — связь». Считаем, что временные оценки tt работ i перенесены на выходящие из них дуги. Условим­ ся обозначать продолжительность максимального пути до i-й вершины графа через Lj.

Основные шаги алгоритма:

1. Коды (i, d{) массива L сортируем в порядке увели­ чения номеров вершин j. Здесь df— min^.

2.Ячейки рабочего массива F очищаем нулями. Пола­ гаем Li0 для миноранты io равным нулю.

3.Просматриваем коды (i, j, dt) массива L один раз. Вы­

числения проводим по формуле

L j = m & K { L j ° ;

( 6. 2)

где Lj° — первоначальное значение максимального пути до вершины взятое из ячейки (/+ ;) массива F (в начальный момент оно равно нулю);

Lt— максимальная величина пути до вершины i, опре­ деляемая из ячейки (/-И ) в массиве F ;

di— временная оценка вершины i, взятая из рассматри­ ваемого кода (i, j, dt) массива.

Вычисленное по формуле (6.2) значение Lj заносим в ячейку (/+ ;) массива F и далее анализируем следующий код в массиве L. Для каждого кода из массива L проводим вы­ числения по формуле (6.2). Процесс закончится, когда будут просмотрены все коды из L. Так как массив L рассортиро­ ван, то достаточно просмотреть все коды только один раз.

Алгоритм вычисления поздних окончаний работ на гра­ фе, построенном на языке «работа связь». Вычисления поздних окончаний работ проводятся на обычном сетевом графе, в котором отсутствуют полные контуры. Имеется в виду, что граф уже синтезирован и для работ полных конту­ ров установлена последовательность их выполнения. Вре­ менные оценки ti работ перенесены на дуги.

Основные шаги алгоритма:

1.Позднее окончание L?-° последней завершающей ра

боты графа (мажоранты In ) принимаем равным значению

L?-H, вычисленному по алгоритму, изложенному выше.

lN

140


2.Ячейки рабочего массива F, в котором будут фикси­ роваться величины LF-°, очищаем нулями.

3.Массив L, рассортированный по уменьшению номеров вершин, просматриваем один раз. При этом для каждого оче­ редного кода (i, j, d) находим для i-й работы позднее окон­ чание по формуле

LF-°=min{Lyi-°;

L4-°—d,},

(6.3)

1

j 1k

}

J

 

где Lik — позднее окончание i-й работы, вычисленное ранее

при выборе предыдущих кодов (г, d j) из L ;

L4-0— позднее окончание j-й работы из ячейки Значение Lf-° затем заносим в ячейку (/-j—г) и анализи­

руем следующий код из L. Процесс закончится, когда будут просмотрены все коды из массива L.

Алгоритм определения критического пути и резервов времени работ на графе с полными контурами. Основные шаги:

1. Исходный граф с полными контурами синтезируем по алгоритму В, изложенному в третьей главе. В результате получаем обычный сетевой граф, для которого будем вычис­ лять основные параметры.

2. Для каждой работы — вершины i сетевого графа по формуле (6.2) определяем ее раннее начало — L?-H (величи­

на £Р-Н), т. е. продолжительность максимального пути от

миноранты io до г-й вершины. Значения Lt фиксируем в ячейках массива F (по первому адресу).

3. По формуле (6.3) рассчитываем поздние окончания LJ'0 каждой г-й работы и записываем в ячейках массива

F(по второму адресу).

4.Массив F просматриваем один раз и для каждого i из (/+г)-й ячейки находим величину Att — резерв времени

по формуле

 

(6.4)

5. Вершина i, для которой выполняется равенство

 

Lf'O—Lf-H—ti= 0,

(6.5)

войдет в критический путь.

§ 4. ОПИСАНИЕ ПРОГРАММЫ «ВВОД, КОНТРОЛЬ, КОМПОНОВКА»

Программа «Ввод, контроль, компоновка» предназначе­ на для подготовки исходной информации, которая затем ис­

141


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

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

Работу основных блоков программы «Ввод, контроль, компоновка» покажем на примере формирования исходных данных для алгоритма синтеза сетевого графа по стоимости.

из5л£5.?8ш|,„| " ----^8 5л 2,5, 7,8

Блок-схема программы приведена на рисунке 6.1, она включает следующие основные блоки:

142

1. Ввод информации, перевод исходных данных и пара­ метров из десятичной системы счисления в двоичную, фор­ мирование const (0101— 0127, 1170— 1215). В скобках ука­ заны адреса команд программы.

2. Формирование массива D* с параметрами bt и at , массива D** с параметрами D t и d h массива L с кодами

(i, jf di). Запись массивов на МЛ (1122— 1154, 1235— 1277).

3.Проверка одного входа (миноранты io) и одного выхо­ да (мажоранты iN), анализ отсутствия на графе вершины с номером i, где 0<Ci<iN, N — максимальный номер вершины на графе (0130— 0173).

4.Поиск на графе неполных контуров и печать конту­ ра (0175— 0343, 1163— 1167).

5.Формирование массива полных контуров К (0350— 0437, 1155— 1162, 1220— 1232, 1300— 1345).

6.Блок упорядочения вершин на графе. Новые номера фиксируются в ячейках массива F (0344— 0453).

7.Запись на МЛ рабочих массивов L*, рассортирован­ ных в порядке возрастания и убывания номеров вершин i

иj (0454— 0562).

8.Формирование рабочих массивов V и D*** (0631— 0634, 0563— 0745, 1216— 1217).

9.Запись на МЛ const и параметров I, N, k, h, R q, io, iN

(0476— 0750).

10.Стандартная программа сортировки методом Шелла

(0760— 1064).

11.Стандартные программы перевода чисел из одной си­

стемы счисления в другую: перевод чисел из десятичной си­ стемы в двоичную и из двоичной в десятичную (1065— 1121).

В скобках возле каждого блока указаны занимаемые ячейки. Ниже приведены детальные блок-схемы основных блоков программы.

Б л о к

1

не требует пояснений.

Б л о к

2.

Формирование массивов L, D*, £)**. Основное

назначение этого блока состоит в следующем. Все параметры (аг, 5г, dit *), соответствующие i-м номерам вершин, в ви­

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

В рассматриваемом блоке коды в массивах L, D*, D** располагаются в порядке возрастания новых номеров вер­ шин.

Блок-схема представлена на рисунке 6.2. Назначение операторов:

143


1. Организация цикла для формирования массивов дан ных:

hd i»

2.Формирование кодов (0, Dit dt) и (0, bit аг), засылка их в рабочие массивы D**, D*.

3.Запись массивов D*, D** на магнитную ленту.

4.Получение из массива входных данных рабочего мас­

сива L с кодами (i, j, dt ), где i и j — номера вершин после выполнения блока «Упорядочение вершин».

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

5.Чтение с МЛ массивов D* и D**.

6.Выделение из рабочего массива F новых номеров

(JVhob, 0» 0) и приформирование их к кодам массивов D* и

D**.

7. Сортировка кодов массива D* в порядке возрастания новых номеров вершин.

8.Сортировка кодов массива D** в порядке увеличения новых номеров вершин.

9.Запись на магнитную ленту кодов из D* и D**.

Б л о к 3. Поиск на графе висячих вершин. Блок-схема представлена на рисунке 6.3.

Назначение операторов:

1. Просматриваем коды (i, j, dt) массива Б и в ячейках

144

(f-j-i) и (f~hj) рабочего массива F накапливаем: по первому адресу — количество дуг, выходящих из £-й вершины графа (число п), а по второму адресу — количество дуг, входящих в ;-ю вершину (число т).

2. Анализируем содержимое ячеек рабочего мас­ сива F по второму адресу, т. е. проверяем условие т = 0.

3.Проверяем условия: п= 0?

4.Анализируем: j = i N?

5.При m = N = 0 печатаем пропущенную вершину j и продолжаем просмотр ячеек из массива F.

6. При

на печать выдаем значение j — номер но­

вой мажоранты.

 

7.Анализируем: все ли ячейки j просмотрены в масси­ ве F. При полном просмотре массива F все действия опера­ торов заканчиваются, в противном случае вновь выполня­ ется оператор 2.

8.Проверяем условия: п= 0?

9. При п=

0 анализируем соблюдение равенства j= U .

10. В случае jV=io печатаем значение новой минорангы

j и продолжаем просмотр ячеек из F.

 

 

Выходы из логических блоков показаны в блок-схеме.

Б л о к 4.

Поиск на графе контуров, отличных от пол­

ных. Этот блок предусматривает выполнение

следующих

трех основных действий: присвоение

вершинам каждого

полного контура порядкового номера;

«сжатие»

полных кон­

туров в узлы;

выявление на полученном графе контуров.

Назначение операторов блока 4 (рис. 6.4):

1.Сортировка кодов массива L по возрастанию номеров вершин £ и j методом Шелла.

2.Очистка ячеек рабочего массива F. Организация цик­ ла для массива полных контуров К.

3.

Просмотр кодов (± 0 , 0, £) массива К и анализ их на

знак.

При знаке «минус» код (— 0, 0, £) заносится в рабочую

4.

ячейку (Д-f-l)* Далее выполняется оператор 5.

5.При знаке «плюс» в ячейку (/+ 1 ) массива F записы­ вается содержимое (Д +1).

6.Анализ на конец массива К.

7.Организация цикла для просмотра кодов массива L.

8.Выбор на сумматор кода (£, j, dt ) из массива L, фор­ мирование ячеек:

0002) 0000 0000 и

0003) 0000 0000 у.

9. С помощью индексных ячеек 0002 и 0003 анализиру­ ется содержимое (/+£) и (/+ ;) из F, где стоят новые номера

1 0 -9 1

145


контурных вершин. Если содержимое ( /+ 0 и (/+J) равно ну­ лю, продолжается просмотр кодов из L. В противном случае прежние номера вершин i и j из L заменяются на новые.

Рис. 6.4.

10.Анализ: закончен ли просмотр кодов из L.

11.Сортировка массива L по увеличению номеров вер­ шин i и j. Организация цикла для просмотра кодов из мас­

сивов L и L\, где L — массив кодов (г, j, d *) для всех вер­ шин графа, L\— массив кодов, соответствующих неконтур­ ным вершинам и контур-узлам.

146

12.В массиве L анализируются два рядом стоящих кода.

Вслучае их совпадения первый код заносится в массив L\ и сравнивается со следующим кодом из L. Если эти коды различны, то они заносятся в L\ и последний сравнивается со следующим из L. Из-за рассортированности массива L одинаковые коды будут находиться рядом. Сравнение осу­ ществляется по индексам i и /.

13.Анализ на конец массива L.

14.Формирование количества кодов (дуг) в массиве L.

Ячейки рабочего массива F и пять рабочих ячеек R +1-T-.R+

+5 очищаются нулями.

15.Организация цикла для просмотра кодов массива L\.

16.Выбор очередного кода (г, j, dt) из массива Iq. Про­

верка

неравенства а *+ 1 > а у , где

a* — содержимое ячейки

(/-И );

а} — содержимое ячейки

( /+ /);

1 — вес дуги

иц

(предварительно веса всех дуг берем равными единице).

ве­

17.

Если неравенство а {-(-1> а ;

удовлетворяется, то

личина аг + 1 заносится в ячейку (/-f-j)

и фиксируется (до­

бавляется единица) в рабочей ячейке Д + 1 . В кодовую часть ячейки (/+ ;') приформировывается индекс г, по которому произошло изменение в (/+;)•

18. В рабочую ячейку Д +З заносится максимальное из значений (аг + 1 ), получаемых после работы оператора 17, а индекс i, по которому произошло изменение, запоминается

врабочей ячейке Д +4.

19.Проверка неравенства: 2 V > a i+ l. Если оно соблю­

дается, переходим к оператору 20, в противном случае — к оператору 22.

20.Анализ: все ли коды из L\ просмотрены.

21.После полного просмотра массива L\ анализируется содержимое ячейки .R-f-l* Если (Д-|-1)=0, то циклов на

графе нет. В противном случае в ячейку Я + 1

записывает­

ся ноль и повторяется просмотр кодов массива L\, т. е. управ­

ление передается оператору 15.

фиксирует­

22. Поиск цикла. Индекс i\ из ячейки Д + 4

ся в рабочей ячейке (jR-f-5): 0, 0, i\.

 

23.В кодовой части ячейки (/-H i) выделяется номер вер­ шины ik, от которой зависит выполнение И

24.Анализ совпадения номеров вершин U = ik. Если они совпадают, то работает оператор 25, в противном случае — оператор 23, где вместо (/-H i)-й ячейки в массиве F рассмат­

ривается ячейка (/-И й).

цикл считается най­

25. При совпадении номеров и 2*

денным: /1-W 2- * - . . = * i *

полных контуров К.

Б л о к 5. Формирование массива

Блок-схема представлена на рисунке 6.5.

147