Программа для расчета и оптимизации сетевого графика. Сопроводительная документация. Описание алгоритма функционирования программы, страница 4

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

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

В записи события также существует поле «резерв события», которое заполняется далее при расчете параметров событий при обратном ходе (рассчет позднего окончания событий).

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


 


                                      да

 


         нет

Создание

отсутствующих событий

 
 


нет                    л

 


                                        да

 


Рисунок 3.2 – Блок-схема алгоритма подпрограммы считывания данных из файла и построения структуры сетевого графика для машинного представления.

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


3.3 Расчет сетевого графика

При расчете сетевого графика используются две рекурсивных процедуры: одна “NextStep” – для проверки на наличие структурных ошибок в сетевом графике (такие как наличие циклов, два конечных события и т.д.), расчета раннего начала событий и времени выполнения критического пути; а вторая – “PredStep” для расчета позднего окончания и резерва времени событий.

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

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

3.4 Оптимизация сетевого графика