Лабораторная работа
ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ
В СРЕДЕ 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