- •Основные блоки языка gpss
- •Поступление транзактов в модель
- •Уничтожение транзактов
- •Моделирование работы одноканальных устройств
- •Моделирование очередей
- •Моделирование многоканальных устройств (мку)
- •Изменение маршрута движения транзактов
- •Общая постановка задачи
- •Список индивидуальных заданий приведен в приложении 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. Выбрав в нём нужный блок, заполняем последовательно поля ввода для каждого операнда. Здесь удобно вводить метки и комментарии.
Моделирование многоканальных устройств (мку)
Многоканальное устройство (памяти) – особый объект языка для имитации разного рода накопителей, конвейеров, в которых одновременно могут находиться несколько транзактов. В отличие от одноканального устройства, для указания ёмкости (количества каналов) используется оператор описания памяти 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
