Алгоритм имитации модели

После запуска модели вначале производится инициализация всепрогонных переменных (в главном модуле) и, далее, для первого прогона (в процедуре INTLC).

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

Модуль SCHDL передает в календарь все сведения о событии: его атрибут, код класса KEY и интервал свершения DTIME, отсчитываемый от текущего времени TNOW.

Собственно имитация работы моделируемого объекта (системы) начинается с выбора из календаря первого события с минимальным временем свершения TSOB. Информация об извлеченном событии используется для проведения ряда операций. Так, например, DTIME дает возможность обновить системное время (TNOW=TNOW+DTIME). Код класса KEY необходим для поиска соответствующего алгоритма реализации события. Атрибуты события используются для определения направления действий при имитации.

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

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

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

Все основные шаги по дискретно-событийной имитации будут повторяться для любых моделируемых объектов. Поэтому управление ходом имитации независимо от задачи поручают отдельной процедуре системного типа - процессору имитации СЛАМ, вызываемому из главного модуля перед первым прогоном (рисунок 2) [1].

2.3.1 Процедура планирования

Процедура планирования SCHDL имеет три формальных параметра: код планируемого события KEVNT, интервал свершения DTIME и массив атрибутов Аttrib.

Events – массив, содержащий календарь. Процедура начинается с записи планируемого события, в массив заносится код события и время его свершения. Далее вызывается процедура GRUP.

Сортировка записей в календаре

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

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

Процедура поиска алгоритма обработки события Event

В данной процедуре осуществляется поиск программы обработки события, код которого передан при обращении к процедуре Event.

Процедура инициализации

Структура этого модуля в основном определяется объектными (пользовательскими) условиями. Обязательными являются оператор задания начального имитационного времени и оператор планирования события. Также в данном модуле используется вызов модуля ЧП. Устанавливаются: время TNOW начала очередного прогона, номер прогона NRNS, т.е. мы задаём прогонные переменные. А также вызов процедуры планирования событий SCHDL.

В данной процедуре задаются следующие начальные условия:

- время начала имитации (Tnow:=Ttbeg);

- обнуление количества событий в календаре (NEvents:=0);

- обнуление количества клиентов в очереди (Och:=0);

- обнуление общего количества обратившихся (NP:=0);

- обнуление количества обслуженных клиентов (Obs:=0);

- обнуление флага обнаружения ЧС (Obsluz:=False);

Процедура Prihod

Данная процедура выполняет формирование данных о том, пришел ли посетитель на станцию или нет. Подсчитывает время наступления следующего события.

2.3.6 Процедура Obsluz

Процедура служит для обработки обслуживания посетителей лодочной станции.

Процедура СHP

Формирует появление ЧП с вероятностью, равной 0.005.

Процедура OUTPUTN

Рассматриваемая процедура формирует отчет по прогону. Полученные данные выводятся на экран и размещаются в файле OTCHET1.txt. В этой процедуре вычисляются:

- общее количество пришедших за прогон посетителей;

- общее количество обслуженных за прогон посетителей;

- наличие в прогоне ЧП.

Процедура OUTPUT

OUTPUT - процедура вывода итогового отчета. В данном отчете формируются следующие данные:

- общее количество пришедших посетителей за все прогоны;

- общее количество обслуженных за все прогоны посетителей;

- среднее количество пришедших посетителей за все прогоны;

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

Все данные формируются за все прогоны. Результаты записываются в текстовый файл OTCHet2.txt.

Процедура RMOVE

Процедура извлечения первой записи из календаря. Извлекаются и запоминаются для передачи переменные TSob, KEvnt, ATRIB (время свершения, код события, атрибуты). Код события извлекаемой записи обнуляется (условно пустая запись). Измененный календарь запоминается, а для восстановления порядка записей вызывается процедура GRUP.

Наши рекомендации