- временной интервал моделирования системы S (интервал модельного времени), где:
- текущее значение модельного времени.
Модель на языке GPSS/H содержит несколько видов информации, а именно: что происходит с транзактом внутри модели (и с какой вероятностью), в каком режиме должна выполняться модель, сколько должно быть сгенерировано транзактов в этом прогоне модели и т.п., что собой представляют отдельные объекты, встречающиеся в программе. На рисунке 3.1 представлена блок-схема модельного файла.
Рис.3.1 Блок-схема модельного файла
Модели GPSS/H всегда состоят из нескольких частей, соответствующих этим группам сведений.
Модуль 1 – модуль описания и управления. Начинается всегда с ОУ SIMULATE, что дает команду на компиляцию модельного файла. Модуль также может содержать другие операторы описания и управления. Содержимое модуля задает условия моделирования и само не исполняется.
Модуль 2 - модуль исполнения. В модуле записываются исполняемые операторы в той последовательности, которая предусмотрена логикой модельного файла.
Модуль 3 - модуль управления. Первый ОУ START дает команду на исполнение МФ, последний ОУ END дает команду на прекращение испытаний. Между ними может быть размещено любое количество операторов управления автоматизацией многократного процесса получения независимых прогонов и операторов очистки данных предыдущего прогона.
В ранних версиях языка для отображения оператора любого типа использовались специальные графические эквиваленты. Однако, при создании модели достаточно сложной системы (более сотни операторов), такое графическое представление становится сложным для восприятия, особенно когда используются многочисленные пересылки. В связи с этим, в последних версиях ЯИМ отказались от графической интерпретации и пользуются только текстовым описанием. В курсовом проекте не нужно использовать графическое представление!
Языки моделирования, основанные на имитации систем массового обслуживания, имеют некоторые принципиальные отличия в логике работы по сравнению с традиционными языками программирования. В обычных языках операторы выполняются один за другим, в том (или приблизительно в том) порядке, в котором они записаны. Во всяком случае, исключена ситуация, когда одновременно исполняется несколько команд. Для нормальной работы компилятора типа GPSS/H, напротив, для пользователя ситуация следующая: все операторы (блоки), имеющие отношение собственно к модели, работают параллельно (и часто одновременно). Кроме того, в модели одновременно существует несколько (теоретически неограниченное количество) транзактов, динамических объектов, которые вступают во взаимодействие с ресурсами (устройствами). Эти динамические объекты могут появляться и удаляться из модели, то есть их количество непредсказуемо наперед. Однако, при любом количестве транзактов в модели, активным в каждый момент времени является только один!
Для лучшего понимания логики работы системы моделирования необходимо разобраться в том, как именно обеспечиваются такие процессы, как определение времени появления очередного транзакта, расчет момента освобождения очередного блока транзактом и т.д.
При запуске программы, содержащей модель на GPSS/H происходит следующее: запускается счетчик времени и генератор случайных чисел. Из последовательности чисел, выдаваемых этим генератором, формируются все случайные процессы, описанные в модели. Затем, после получения реализаций всех необходимых случайных величин (всех промежутков времени, оставшихся до событий типа появления нового транзакта, освобождения очередного блока и т.д.), выбирается наименьший временной интервал (то есть ближайшее по времени событие). Счетчик «прокручивается» до возникновения этого события, затем процесс повторяется до окончания моделирования по любому из возможных условий.
Таким образом, промежутки времени для нескольких ближайших событий модели на самом деле становятся известны GPSS/H задолго до их наступления. Фактически, транзакты появляются, то есть приобретают определенные атрибуты, еще до их вхождения в модель в блоке GENERATE.
Продолжая сравнение с обычными языками программирования, можно сказать, что в GPSS/H применяется особый вид псевдопараллелизма, при котором для пользователя события происходят параллельно. На самом же деле такое явление, как истинный параллелизм, то есть действительно одновременное совершение нескольких событий, недоступен в GPSS/H. Обращение к транзактам происходит поочередно, в каждый отдельный момент реального времени существует только один «активный» транзакт, тот, с которым происходит ближайшее по времени изменение статуса. Информация об остальных транзактах остается статической, а сами транзакты находятся в списке будущих событий.
При работе модели происходит не только создание, продвижение и уничтожение транзактов; GPSS/H также автоматически собирает информацию (по существу – статистические данные) обо всех объектах модели. Происходит подсчет периодов занятости и незанятости всех блоков, имитирующих устройства; поддерживаются виртуальные очереди, сведения о них также непрерывно пополняются (максимальная длина очереди, среднее и максимальное время, проводимое транзактом в очереди, количество «нулевых входов», то есть транзактов, не испытавших задержки перед попаданием в устройство, и т.д.).
Итак, после сказанного можно сформулировать основные принципы работы модели:
- В каждый момент времени в модели движется только один активный транзакт, следующий начинает движение только после возникновения одного из особых состояний: а) – попадания активного транзакта к одному из операторов, запрещающих дальнейшее продвижение, например SEIZE, RELEASE, PREEMPT, в этом случае транзакт ожидает входа перед оператором; б) задержка транзакта для обслуживания в операторе ADVANCE, в этом случае транзакт находится внутри оператора; в) исполнение оператора TERMINATE, в этом случае активный транзакт уходит из модели.
- Движение транзактов происходит последовательно от оператора к оператору из оператора текущего состояния ( Сurrent Block), в котором находится транзакт, в оператор ожидаемого будущего состояния (Next Block Attempted). В том случае, когда по условиям модели необходимо изменить последовательное поступательное (шаг за шагом) движение транзакта, используются специальные операторы исполнения типа (TRANSFER, TEST, LOGIC) см. 3.3.
- Жизненный цикл активного транзакта, состоит из зарождения, попадания в систему, прохождения через последовательность предписанных МФ операторов и терминирования (ухода из системы).
- Каждый транзакт имеет уникальный персональный идентификационный номер- (ID), закрепленный за одним единственным транзактом при его генерации. Номер всегда является целым положительным числом. Уход из системы не всегда происходит в порядке ID, что зависит от логики работы модели.
- Каждый уходящий из модели транзакт приплюсовывает свое время пребывания в модели ко времени пребывания в системе предыдущего терминированного транзакта. Таким образом достигается непрерывность абсолютного времени моделирования.
- Порядок окончания процесса моделирования определяется соответствующими машинными алгоритмами, подробнее см. 3.5.
Вся эта информация после компиляции и моделирования оказывается записанной в так называемом файле отчета (см. ниже).
3.3. Операторы GPSS/H
Основными объектами теории СМО являются заявки (события) и устройства (системы), выполняющие их обслуживание. При моделировании большое внимание уделяется очередям и загрузке устройств. В соответствии с этим выбран и порядок описания операторов языка GPSS/H.
Каждый оператор ЯИМ GPSS/H состоит из двух частей: названия оператора, которое, в обязательном порядке пишется заглавными латинскими буквами, например GENERATE. Для длинных названий допустимо сокращение до четырех букв, например GENE, короткие имена, состоящие из 5 и менее букв, всегда пишутся полностью. Вторая часть, которая пишется через пробел, содержит характеристики оператора, которые называются операндами, обозначаются латинскими буквами A,B,C,… и пишутся через запятую без пробелов. Некоторые операторы имеют до девяти операндов, как GENERATE, другие, как END не имеет ни одного операнда. Операнд может быть представлен числом, именем или сложным выражением. Операнды, включаемые в квадратные скобки, могут по умолчанию отсутствовать. Отсутствие, какого либо операнда в середине записи отмечается запятой или запятыми, если отсутствует несколько операндов. Рассмотрение операторов, проведем в соответствии с таблицей 3.2. Описание операторов дается не по алфавиту как в (Л.2), а по значимости в МФ.