Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Цой, С. Синтез оптимальных сетей в системе управления горными предприятиями

.pdf
Скачиваний:
5
Добавлен:
20.10.2023
Размер:
7.95 Mб
Скачать

4tминус» — признак вычеркивания дуг. Новые номера, при­ сваиваемые вершинам графа, фиксируются в рабочей ячей­ ке Д -fO. В ячейку # + 0 добавляется единица после присвое­ ния очередного нового номера.

5.Организация цикла для просмотра ячеек массива F.

6.Выбор на сумматор содержимого очередной ячейки (/+& ) из F. Для содержимого (f-\-k) проверяем выполнение

следующих трех условий: знак

«минус», т = 0,

N„0B Ф 0.

При соблюдении этих условий

осуществляется

переход к

оператору 7, в противном случае — к оператору 12.

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

8.Выделение из очередного кода (i, j, d%) номера i. Ана­

лизируется знак выбранного кода и проверяется условие i= k , где k — номер ячейки (/+& ). При знаке «плюс» и ра­ венстве i = k выполняется оператор 9.

9.В массиве L из кода (i, j, dt ) выделяется индекс j, а в ячейке (/-И ) из F вычитается единица из т. Коду в L и ячейке (/+ ;) из F присваиваются знаки «минус».

10.Анализ на конец кодов массива L. Если в L просмот­

рены не все коды, переходим к оператору 8, в противном слу­ чае — к оператору 11.

11.Ячейке (/+& ) из F присваивается знак «плюс».

12.Анализ на конец массива F. При окончательном про­ смотре всех ячеек из F выполняется оператор 13, в против­

ном случае — оператор 6.

13.Организация цикла для просмотра ячеек массива F.

14.Просмотр очередной ячейки массива F и анализ на

выполнение следующих трех условий: знак «минус», т =

— 0 и iVH0B = 0 . При соблюдении этих условий переходим к оператору 15, в противном случае — к оператору 16.

15. Вершине с номером k по второму адресу в ячейке (/-\-k) из F присваивается новый номер из Д+О. Содержи­ мое ячейки R-j-О увеличивается на единицу. Проводится анализ: (R +0)=2V -f-l (N — количество вершин на графе). Если (# + 0 ) = ЛЧ-1, выполняется оператор 17, в противном случае — оператор 16.

16. Анализ на конец массива F. Если в F просмотрены все ячейки, управление передается оператору 5, в против­ ном случае — оператору 14.

17. Равенство (R + 0 )= iV + l, проверяемое оператором 15, говорит о том, что всем вершинам графа уже даны новые номера. На печать выдаются новые и старые номера для всех вершин графа.

18. Массив L просматривается один раз и все первона­ чальные номера вершин г и j заменяются на новые, зафик­ сированные в ячейках (/+ г) и (/+ ;) массива F.

150

Б л о к 7.

Формирование массивов Lk, Блок-схема пред­

ставлена на рисунке 6.7.

Рабочие

массивы L kJ рассортированные в порядке уве­

личения и уменьшения номеров вершин i и у, используются в блоке основного счета.

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

1.Формирование из входной информации кодов массива L: i, у, dt.

2.Осуществление упорядочения вершин на графе, т. е. выполнение операторов бло­

ка 6.

3.Формирование массива L с новыми но­ мерами вершин i и у.

4.Сортировка массива L по возраста­

нию номеров вершин г и у и запись массива

 

L на МЛ.

 

5. Сортировка массива L по уменьшению

 

индексов г и у и запись массива L на МЛ.

 

6. Сортировка массива L по возрастанию

 

индекса у и запись на МЛ.

 

7 .Сортировка массива L по уменьшению

 

индекса у и запись на МЛ.

Рис. 6.7.

Б л о к 8. Формирование массивов D*** и

 

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

 

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

 

1.Считывание с МЛ массива L по возрастанию индекса г. Очистка ячеек рабочего массива F.

2.Просмотр кодов (г, у, dt) массива L и запись парамет­

ров di

в рабочие ячейки (/+ г) массива F.

3.

Занесение в коды массива L параметра dj на место

dt. Величины dj находятся в ячейках массива F .

4.Организация цикла для анализа кодов массива К по индексной ячейке 0001.

5.Значение индексной ячейки 0001 фиксируется в 0002. Очередному коду из К присваивается знак «плюс» вместо прежнего знака «минус», свидетельствующего о начале пол­ ного контура.

6.Анализ на знак кодов из массива К. При знаке «плюс» переходим к оператору 7, в противном случае (в момент на­ чала следующего полного контура) — к оператору 9.

7.Для вершин рассматриваемого полного контура на­ капливается сумма временных оценок ti— di.

8.Анализ на конец кодов массива К , уход на операторы

6 или 9.

9.Восстановление первоначального состояния индекс­ ной ячейки 0001 (0002->-0001).

151

10. Анализ знака кода в массиве К по индексной ячей ке 0001. При знаке «плюс» выполняется оператор 12, в про­ тивном случае — оператор 11.

11.Знак «минус» говорит о начале нового полного кон­ тура. В этом случае восстанавливается знак «минус» перед началом предыдущего полного контура по индексной ячей­ ке 0002. Далее переходим к оператору 5.

12.В рабочую ячейку (/-И)» соответствующую вершине

полного контура, записывается код (— 0, iVK0H, 2d*), где 2с?г —

152

сумма величин dt для всех вершин полного контура, 2VK0H— номер контура (номера контурам присваиваются в порядке их следования).

13.Анализ на конец кодов в К. Если все коды из К про­ смотрены, выполняется оператор 14, в противном случае — оператор 10.

14.Восстановление знака «минус» перед началом по­ следнего полного контура. Организация цикла для просмот­ ра кодов массивов L и L". Массив L " включает те же коды, что и массив L, с той лишь разницей, что из дуг, входящих

вконтур-вершину из i, оставлен в массиве L " код только од­ ной вершины. В исходном массиве L вершина i может быть связана сразу с несколькими вершинами одного полного контура. Поэтому после «сжатия» полного контура в узел может оказаться несколько одинаковых кодов. Массив L" формируется как промежуточный рабочий для того, чтобы при получении массива V не пришлось многократно про­ сматривать коды из L и К.

Индекс i первого кода из L записывается в рабочей ячей­

ке .R+0.

15. Просмотр очередного кода (ik, djk) в L. Индекс ik сопоставляется с номером i из (R-{-0). При сравнении вы­ полняется оператор 17, в противном случае — оператор 16.

16.Очистка ячеек рабочего массива I, в котором фикси­ руется признак входа в каждый полный контур. Массив I занимает только кодовую часть ячеек массива F,

17.Анализ: входит ли в состав полного контура верши­

на ik из кода (ik, h ,

djk) массива L. В ячейке (/-И *)

из F

должен в этом случае

стоять знак «минус» и номер

N Kон

(см. оператор 12). Если jk принадлежит полному контуру, то выполняется оператор 18, в противном случае — опера­ тор 19.

18.Проверка: была ли входящая дуга из ik-й вершины

вполный контур, которому принадлежит вершина 7*. В дан­ ном случае в ячейке (I-\-NKOu) в кодовой части должен сто­ ять признак входа в контур (единица). Если это условие со­ блюдается, то рассматриваемый в операторе 15 код (ik, djk) в массив L " включать не надо. При этом выполняется оператор 21, в противном случае — оператор 22.

19.Пересылка кода (ik; 7*> djk) из L в массив L ".

20.Переадресация ячеек массива L".

21.Анализ на конец массива L. Если просмотрены в L все коды, то массив L " сформирован и переходим к операто­ ру 23, в противном случае — к оператору 15.

22.В массив 1 в ячейку (I-\- iVK0H) заносится признак входа в контур с номером iVK0H. Далее выполняется опера­ тор 19.

153

23.Формирование количества кодов в массиве L ". Орга­ низация цикла для массивов L " и К.

24.Просмотр очередного кода ( ± 000, 000, U) в массиве

Ки анализ его на знак. При знаке «плюс» выполняется опе­ ратор 26, в противном случае — оператор 25.

25.Константа переадресации из индексной ячейки для

массива К записывается в рабочей ячейке Д + 0 . Эта кон­ станта покажет начало очередного полного контура в мас­ сиве К. Далее выполняется оператор 26.

26. В ячейку (/+£*) рабочего массива F приформировывается константа из Д-j-O. В результате всем вершинам одно­ го полного контура в ячейках (/+£*) массива F будет соот­ ветствовать одна и та же константа. Далее переходим к опе­ ратору 27.

27.Анализ на конец массива К. При полном просмотре кодов в К коды массива D*** будут зафиксированы в ячей­ ках массива F. В этом случае выполняется оператор 28.

28.Запись на МЛ кодов массива Z)*** из F.

29.Просмотр очередного кода (i*, j*, dj*) из массива L. Анализ на знак содержимого ячейки (/+7) из F. При знаке «плюс »выполняется оператор 30, в противном случае — опе­ ратор 31.

 

 

 

Таблица 6.1

 

Кол-во Кол-во

 

 

Название массива

ячеек в

ячеек в

Место в МОЗУ

 

10 с/с*

8 с/с

 

 

Программа

 

1345

0000

-1345

Массив полных контуров К

 

700

1350

-2247

Рабочий массив F i

1000

1750

2250

-4217

Рабочий массив F2

1000

1750

4220

-6167

L

2500

4710

4220

-11130

Массив исходных данных

с ко-

 

 

 

дами (г, j, di)

5000

11610

6170

-17777

Г

3500

6650

11130

-17777

Массив циклов

3500

6650

11130

-17777

V

3500

6650

11130

-17777

1

1000

1750

2250-4220

* С/с — система счисления.

30. Анализ на конец массива L. Если все коды в L про­ смотрены, то это свидетельствует о том, что коды массива L' сформированы. В данном случае выполняется оператор 32, в противном случае — оператор 29.

31. Массив L " дополняется новыми кодами вида г*, у*,

Hdjk, где jk— вершины одного полного контура. Номера у*

Jk

154

отыскиваются в массиве К. Этот поиск осуществляется с по­ мощью вершины j*, соответствующей номеру ( /+ 7*)-й ячей­ ки, анализируемой в операторе 29. Если вершина j * входит в состав некоторого полного контура, то все коды (i*, J*,

2djk) формируются из вершин j k этого контура. Далее вы- / ft

полняется оператор 30.

32.Запись массива V

на МЛ.

 

программы

 

Таблица 6.2

Структура

 

Место на МЛ —

«Ввод, контроль и компо­

Название массива

начальный Но­

новка». Программа занима­

 

мер слова

ет 1345 ячеек и использует

 

 

 

индексные ячейки — 0001 4-

 

 

 

4-0007,

рабочие

ячейки

const

2200

4760

00104-0016,

00404-0047. В

£)**

2200

5000

D*

программу

включены

три

2200

6750

L по увеличению j

2201

0720

стандартных блока:

(07604-

L по увеличению i

2201

5624

1)

сортировка

L по уменьшению j

2202

25*Ю

4-1064);

 

 

 

 

L по уменьшению i

2204

0260

2) перевод

целых чисел

V

2202

7434

К

2204

5164

из двоичной системы

счис­

£)***

2203

6310

ления

в

 

десятичную

 

 

 

(11014-1121);

 

 

 

 

 

 

3) перевод целых чисел из десятичной системы в двоич­

ную (10654-1100);

дополнение до контрольной суммы —

7777 7777 7777 — программы находится в ячейке 1345. Распределение памяти МОЗУ дано в таблице 6.1, а рас­

положение массивов на магнитной ленте ( р = 2, q = 2)— в таблице 6.2.

Инструкция по использованию программы «Ввод, контроль, компоновка»

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

1. Массив L с кодами

 

|

U Л dt

 

I

dh Dt

пробивается в десятичной

системе и вводится в МОЗУ с

ячейки 6170.

 

2.

Массив полных контуров К с кодами (± 0 , 0, i) проби­

вается в десятичной системе счисления и вводится в МОЗУ с ячейки 1350.

155

3. Все параметры задаются в десятичной системе счис ления в следующих ячейках:

0020

0021

0022

0023

0024

0025

0026

1

N

К

R q

h

io

1 м

Информация пробивается одним массивом в указанных ячейках между двумя границами и записывается в МОЗУ пе­ ред началом работы программы.

Инструкция работы за пультом

1.Подготовить к вводу исходные данные, поставить маг­ нитную ленту 2— 2, включить БПМ (узкая печать).

2.Ввести программу, контрольная сумма — 7777 7777

7777.

3.Ввести исходные данные.

4.Пуск 0100.

5.Останов 0752 — конец работы программы «Ввод, контроль, компоновка».

Таблица остановов.

Значение

СчАК

00160

00344

00725

 

 

 

 

 

 

 

 

Таблица

6.3

 

Причина останова

Действие оператора

 

Проверены входы и выходы

Если на БПМ ничего не пе­

на графе

 

 

 

чаталось, пуск дальше (160)

 

 

 

 

 

При выдаче на БПМ сведе­

 

 

 

 

 

ний о существовании новой

 

 

 

 

 

миноранты,

мажоранты

или

 

 

 

 

 

висячей

вершины

необходи­

 

 

 

 

 

мо внести исправления в ис­

 

 

 

 

 

ходные

данные

и

пустить

 

 

 

 

 

программу сначала

 

 

В

исходной

информации

В исходную

информацию

есть

контуры

(отличные от

следует

внести

соответствую­

полных).

Контур

печатается щие исправления (разрушить

на БПМ

 

 

 

контур)

и

пустить

програм­

 

 

 

 

 

му заново

 

 

 

 

Перед началом или в конце

Проверить правильность за­

полного

контура

пропущен

дания массива К

 

 

 

знак «минус»

 

 

Пустить программу заново

Входе работы программы на БПМ выдается следующая информация:

1.3 --------------------------г. Знак «минус» означает пробелы.

Висходной информации пропущена вершина с номером L

2.1 ------- . . . — i.

156

Висходной информации кроме миноранты го есть вер­ шина с номером г, в которую не входит ни одна дуга.

3.2 ■. . — г.

Висходной информации кроме мажоранты гм имеется вершина с номером г, из которой не выходит ни одна дуга.

4.г!->-г2->-.. .->гi свидетельствует о наличии контура. Для того, чтобы выявить его на исходном графе, необходимо каж­ дый полный контур «сжать» в узел, т. е. рассматривать как одну вершину. Узлу-вершине присваивается новый номер, равный номеру вершины, стоящей в массиве К со знаком «минус». Это следует сделать только в том случае, если одна из вершин напечатанного контура входит в состав полного контура.

§5. АЛГОРИТМ СИНТЕЗА ОПТИМАЛЬНОГО СЕТЕВОГО ГРАФА ПРИ ОГРАНИЧЕННОМ ОБЪЕМЕ СКЛАДИРУЕМЫХ РЕСУРСОВ

Метод распределения складируемых ресурсов на сете­ вом графе с полными контурами рассматривался нами в четвертой главе. Для реализации изложенного метода на ЭВМ «Минск-22» разработан машинный алгоритм и состав­ лена стандартная программа.

Укрупненная блок-схема вычислительного процесса, на­ чиная с момента подготовки исходной информации и кон­ чая выдачей полученного решения на печать, представлена на рисунке 6.9. Ниже дается краткое описание блоков этой программы:

1.Ввод информации, перевод исходных данных в деся­ тичную систему счисления.

2.Формирование рабочих и промежуточных массивов,

запись их на МЛ.

3.Блок проверки правильности построения исходного

графа.

4.Анализ наличия на графе контуров, отличных от пол­

ных.

5.Формирование массива полных контуров.

6.Упорядочение вершин на графе — присвоение верши­ нам графа новых порядковых номеров.

7.Запись на МЛ четырех рабочих массивов, рассортиро­

ванных по увеличению номеров вершин i и j и уменьшению индексов i и j.

8. Формирование расширенного массива L", используе­ мого при расчете максимальных путей L * от г-й вершины графа до мажоранты.

9.Запись на МЛ параметров и констант.

10.Чтение с МЛ массива констант и рабочих массивов

сисходными данными. Вычисление верхней границы потреб­

157

ления ресурсов на всех работах графа в предположении, что временные оценки всех работ равны максимальному значе­ нию ti= Dt. Суммарный объем расходуемых ресурсов под­ считываем по формуле

Z ( 0 > = 2 bi— aiDt. t

р

*

158

Анализ неравенства

 

R0>Z(°\

(6.6)

При соблюдении (6.6) выполняется блок 13, в противном

случае — блок 11.

значения Z (0) и пе­

11. Перевод в десятичную систему

чать — задача решения не имеет.

 

12.Останов.

13.Перезапись на МЛ расширенного массива L " и мас­ сивов L, рассортированных по увеличению г, уменьшению и увеличению j.

14.Печать номера очередной итерации. Определение ранних начал t?-H для работ L Вычисление для вершин k»

входящих в состав полного контура, максимального пути от миноранты го до k и от k-й вершины до мажоранты г n (алго­ ритм В).

15.Упорядочение работ в каждом полном контуре (ал­ горитм А), пересчет ранних начал для всех работ графа, по­ лученного в результате синтеза.

16.Печать промежуточных значений Ткр и подсчет сум­ марного объема расходуемых ресурсов Z (k).

17.Печать Z(k). Проверка неравенства

R0> Z ^ \

(6.7)

При соблюдении (6.7) работает блок 18, в противном слу­ чае — блок 20.

18.Печать полученного решения.

19.Останов — решение найдено.

20.Вызов с МЛ промежуточных рабочих массивов; вы­ числение позднего окончания работ и полных резервов вре­ мени.

21.Анализ: все ли резервы времени использованы. Да — работает блок 26, нет — блок 22.

22.Увеличение продолжительности работ на величину резерва времени; определение нового значения Z(k)\ ана­ лиз на конец решения:

( 6. 8)

При выполнении неравенства (6.8) работает блок 25, в противном случае — блок 23.

23.Вычисление резервов времени работ сетевого графа.

24.Переход к блоку вычисления ранних начал и позд­ них окончаний работ. Пересчет резервов времени работ.

25.Корректировка временных оценок работ на резерн

15J

Соседние файлы в папке книги из ГПНТБ