Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Имитац.мод.учеб.пос.docx
Скачиваний:
262
Добавлен:
21.05.2015
Размер:
530.5 Кб
Скачать
      1. Моделирование очередей

В GPSS объекты типа "очередь" вводятся для сбора статисти­ческих данных. Необходимо понимать, что блоки очереди не влияют на реальное образование очередей транзактов (очереди образуются перед входами в устройства сами по себе), блоки являются регистраторами статистики. Статистика об очередях собирается в моменты входа транзакта в блок QUEUE (вход в очередь) или в блок DEPART (выход из очереди). Формат записи блока QUEUE:

QUEUE A,[B]

Операнд А задаёт номер или имя очереди. Может быть именем, положительным целым числом, СЧА. Поле В определяет число единиц, на которое увеличивается те­кущая длина очереди. Если поле В пусто, то по умолчанию прибавляется единица.

Когда транзакт входит в блок QUEUE, то ищется очередь с име­нем, определённым операндом А. Если необходимо, очередь создаётся. Значение текущей длины очереди хранится в СЧА Q$имя. Поскольку очередь обычно используется для измерения времени ожидания, за блоком QUEUE обычно следует такой блок, как SEIZE, который может задержать сообщение. Одно и то же сообщение может одновременно увеличить длину нескольких очередей, т. е. сообщение может войти в несколько блоков QUEUE перед тем, как войти в соответствующие блоки DEPART.

Блок DEPART имеет следующий формат:

DEPART A,[B]

Блок DEPART служит для уменьшения счётчика длины очереди. В поле В задаётся число единиц, на которое уменьшается длина очереди. Это число не должно превышать текущую длину очереди, иначе возникает ошибка «длина очереди отрицательна». Если поле В пусто, длина очереди по умолчанию уменьшается на единицу.

Пример. Посетители приходят в кассу кинотеатра через 20 ± 10 сек, знакомятся с обстановкой 15 ± 15 сек и занимают очередь. Каждый посетитель приобретает билет у кассира в течении 20 ± 5 сек. Построить модель в течении 8 часов.

Запишем модель на языке GPSS.

SIMULATE ;управляющий блок на выполнение программы

GENERATE 20,10 ;приход посетителей

ADVANCE 15,15 ;знакомство с обстановкой

QUEUE 1 ;очередь к кассиру

SEIZE KASSA ;занять кассира

DEPART 1 ;освободить очередь

ADVANCE 20,5 ; покупка билета

RELEASE KASSA ;освободить кассира

TERMINATE ;уход из кассы

GENERATE 2880 ;таймер времени

TERMINATE 1

START 1

При наборе блоков удобно пользоваться окном Insert GPSS blocks (вставить блок), которое вызывается в меню Edit/Insert GPSS blocks. Выбрав в нём нужный блок, заполняем последовательно поля ввода для каждого операнда. Здесь удобно вводить метки и комментарии.

      1. Моделирование многоканальных устройств (мку)

Многоканальное устройство (памяти) – особый объект языка для имитации разного рода накопителей, конвейеров, в которых одновременно могут находиться несколько транзактов. В отличие от одноканального устройства, для указания ёмкости (количества каналов) используется оператор описания памяти STORAGE. Как любой оператор описания он помещается между блоками SIMULATE и GENERATE. Формат оператора:

имя STORAGE А

Сначала определяется имя МКУ, А – ёмкость МКУ (количество каналов).

Блок ENTER (занять МКУ) позволяет вошедшему транзакту использовать много­канальное устройство. Транзакт может быть задержан на входе в блок, если многоканальное устройство заполнено, или имеющейся ёмкос­ти недостаточно, или устройство в данный момент недоступно. Формат записи:

ENTER A,[B]

Операнд А указывается номер или имя МКУ, определённое блоком STORAGE. В необязательном поле В содержится число занимаемых каналов. Если поле В пусто, то по умолчанию занимается од­ин канал. Одно и то же сообщение может входить в неограниченное число многоканальных устройств, а впоследствии освобождать их (или часть из них).

Блок LEAVE (покинуть устройство) имеет формат:

LEAVE A,[B]

Блок LEAVE освобождает определённое число единиц многоканаль­ного устройства, указанных в поле В. Если это поле пусто, по умолчанию предполагается равным 1. Число осво­бождаемых единиц не должно превышать текущее содержимое многоканального устройства. Транзакт не обязан освобождать столько же единиц каналов, сколько занимал. Поле А блока LEAVE определяет номер или имя многоканального ус­тройства.

Пример. Машины подъезжают на СТО с интервалом 4±2 мин. и обслуживаются у одного из 3-х свободных мастеров в течении 60±4 – 5 мин., затем покидают станцию. Можно промоделировать следующим образом.

SIMULATE

CTO STORAGE 3

GENERATE 4,2

ENTER CTO

ADVANCE 60,45

LEAVE CTO

TERMINATE