Поступление транзактов в модель
Лабораторная работа
ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ
В СРЕДЕ GPSS/World
Цель работы:изучение инструментальных средств языка GPSS для моделирования систем обслуживания с условием перераспределения заявок по разным направлениям; получение практических навыков; знакомство с основными элементами стандартного отчёта; анализ и обработка результатов моделирования в среде GPSS/World.
Теоретическая часть
Язык моделирования GPSS/PC(General Purpose Simulation System – общецелевая система моделирования) был разработан компанией Minuteman (США) изначально для моделирования дискретных систем и был предназначен для работы в операционной среде DOS. Язык получил широкое распространение и был включён в учебные курсы по моделированию систем у нас в стране и во многих университетах США и других стран. В последнее десятилетие появилась новая версия языка Gpss World, разработанная под Windows, в которой можно моделировать не только дискретные, но и непрерывные процессы. Эти возможности обеспечиваются как новыми объектами языка, так и включением в состав Gpss World языка PLUS – языка программирования низкого уровня, позволяющего взаимодействовать с другими приложениями и создавать собственные библиотеки процедур. Также эта среда обеспечивает высокую интерактивность и визуальное представление информации.
Студенческая версия GPSS/World бесплатная, имеет ограничения лишь на количество используемых в программе блоков (не более 170). Учебную версию можно получить бесплатно на портале www/minutemansoftware.com/download или по адресу http://gpss-world-student-version.software.informer.com/download/?df9a4a, выбрав файл gpss-world-student-version.
Основные блоки языка GPSS
В отличие от PLUS-операторов, которые могут содержать несколько строк, операторы GPSS записываются в отдельной строке и имеют следующий вид:
[метка] имя блока[операнды] ;комментарии
Обязательным является только поле имя блока, остальные поля могут отсутствовать. Метка является именем-идентификатором блока, определяемым разработчиком. Имена должны начинаться с буквы, могут содержать цифры и символы подчёркивания. Имя метки не должно совпадать с ключевыми словами GPSS. GPSS присваивает меткам номера, начиная с 10 000. Количество обязательных операндов зависит от блока, они отделяются запятыми, для пропуска одного из подполей ставится подряд несколько запятых.
Приведём основные операторы, которые используются в программе.
Поступление транзактов в модель
GENERATE (генерировать) – блок, в котором «рождаются» транзакты (заявки на обслуживание) и входят в процесс моделирования. В любой блок GENERATE не могут входить транзакты. Поэтому в простых программах это первый блок. Имеет формат:
GENERATE [A],[B],[C],[D],[E]
Скобки [ ] означают, что данный операнд является необязательным.
Операнд A задаёт средний интервал времени между моментами поступления последовательных транзактов в модель. Если этот интервал постоянен, то операндBне используется. Если же интервал поступления является случайной величиной, то в операндеB указывается модификатор среднего значения, который может быть задан в виде модификатора-интервала или модификатора-функции. Модификатор-интервал позволяет задать равномерный закон распределения поступления транзактов. Запись GENERATE A,Bозначает, что время поступления транзактов будет распределено равномерно на отрезке [A–B, A+B]. Ясно, что В<А.
Например, блок GENERATE 100,40создаёт транзакты через случайные интервалы времени, равномерно распределённые на отрезке [60;140]. Разыгрывается случайное число в этом интервале, например 78, рождается первый транзакт. Затем, разыгрывается новое случайное число в интервале [60;140], например 132, и второй транзакт попадает в модель в момент времени 78 + 132 = 210 и т. д.
Модификатор-функция используется, если закон распределения интервала поступления отличен от равномерного. В этом случае в операндеBдолжна быть записана ссылка на функцию (её СЧА), описывающую этот закон, и случайный интервал поступления определяется как целая часть произведения поля A (среднего значения) на вычисленное значение функции.
В операндеC задаётся момент поступления в модель первого транзакта. Если это поле пусто или равно 0, то момент появления первого транзакта определяется операндами A и B.
ОперандD задаёт общее число транзактов, которое должно быть создано блоком GENERATE. Если это поле пусто, то блок генерирует неограниченное число транзактов до завершения моделирования.
ОперандE задаёт приоритет, присваиваемый генерируемым транзактам. Число уровней приоритетов неограниченно, причём самый низкий приоритет – нулевой. Если поле E пусто, то генерируемые транзакты имеют нулевой приоритет.
Операнд Fзадаёт число параметров транзакта, по умолчанию 12.
Нужно помнить, что смысл единицы времени (секунда, минута, час, день) закладывает разработчик (нигде не прописывая), поэтому нужно все операнды привести к единой единице измерения времени.
Примеры.
1) GENERATE 5;определяет время поступления транзактов ровно через
5 ед. времени;
2) GENERATE ,,,10;в момент времени 0 родится одновременно 10 транзактов;
3) GENERATE 2,,10,,1 ;первый родится в 10, затем в 12, 14 и т . д. с приоритетом 1.
Уничтожение транзактов
Блок уничтожения транзактов (завершения) имеет формат:
TERMINATE [A]
Транзакты, попадающие в этот блок, уничтожаются и больше не участвуют в процессе моделирования. Если операндA задан, то его значение указывает, на сколько единиц уменьшается содержимое так называемого счётчика завершений при входе транзакта в данный блок TERMINATE. Если A не определено, то оно считается равным 0, и транзакты, проходящие через такой блок, не уменьшают содержимого счётчика завершений.
Начальное значение счётчика завершений устанавливается управляющим операторомSTART А (начать), предназначенным для запуска прогона модели. Операнд A этого оператора содержит начальное значение счётчика завершений. Прогон модели заканчивается, когда содержимое счётчика завершений обращается в 0. Таким образом, в модели должен быть хотя бы один блок TERMINATE с непустым A, иначе процесс моделирования никогда не завершится.
Участок блок-схемы модели, связанный с парой блоков GENERATE-ТERMINATE, называется сегментом. Простые модели могут состоять из одного сегмента, в сложных моделях может быть несколько сегментов.
При моделировании системы иногда необходимо промоделировать обработку конкретного числа заявок, например 100 заявок. Соответствующий сегмент будет выглядеть так:
GENERATE 5,2,,100
………………………………
TERMINATE 1
START 100
Начальное значение счётчика завершений равно 100. Каждый транзакт, проходящий через блок TERMINATE, вычитает из счётчика единицу, и таким образом моделирование завершится, когда сотый по счёту транзакт войдёт в блок TERMINATE. При этом точное значение таймера в момент завершения прогона непредсказуемо. Следовательно, в приведённом примере продолжительность прогона устанавливается не по модельному времени, а по количеству транзактов, прошедших через модель.
Но чаще возникает необходимость провести процесс моделирования в течение конкретного времени, например, одного 8-часового рабочего дня. Если единица модельного времени минута, то необходимо, чтобы в момент 480 моделирование прекратилось. Для этого включаем сегмент – фиктивный блок времени:
GENERATE 5,2
………………………
TERMINATE