|
Основы моделирования на GPSS/PC
Процессы
функционирования различных систем и сетей связи могут быть представлены той или
иной совокупностью систем массового обслуживания (СМО) - стохастических,
динамических, дискретно-непрерывных математических моделей. Исследование
характеристик таких моделей может проводиться либо аналитическими методами, либо
путем имитационного моделирования [1-6]. Имитационная модель отображает
стохастический процесс смены дискретных состояний СМО в непрерывном времени в
форме моделирующего алгоритма. При его реализации на ЭВМ производится накопление
статистических данных по тем атрибутам модели, характеристики которых являются
предметом исследований. По окончании моделирования накопленная статистика
обрабатывается, и результаты моделирования получаются в виде выборочных
распределений исследуемых величин или их выборочных моментов. Таким образом, при
имитационном моделировании систем массового обслуживания речь всегда идет о
статистическом имитационном моделировании [5;6]. Сложные функции
моделирующего алгоритма могут быть реализованы средствами универсальных языков
программирования (Паскаль, Си), что предоставляет неограниченные возможности в
разработке, отладке и использовании модели. Однако подобная гибкость
приобретается ценой больших усилий, затрачиваемых на разработку и
программирование весьма сложных моделирующих алгоритмов, оперирующих со
списковыми структурами данных. Альтернативой этому является использование
специализированных языков имитационного моделирования [5-7].
Специализированные языки имеют средства описания структуры и процесса
функционирования моделируемой системы, что значительно облегчает и упрощает
программирование имитационных моделей, поскольку основные функции моделирующего
алгоритма при этом реализуются автоматически. Программы имитационных моделей на
специализированных языках моделирования близки к описаниям моделируемых систем
на естественном языке, что позволяет конструировать сложные имитационные модели
пользователям, не являющимся профессиональными программистами. Одним из наиболее
эффективных и распространенных языков моделирования сложных дискретных систем
является в настоящее время язык GPSS [1;4;7]. Он может быть с наибольшим успехом
использован для моделирования систем, формализуемых в виде систем массового
обслуживания. В качестве объектов языка используются аналоги таких стандартных
компонентов СМО, как заявки, обслуживающие приборы, очереди и т.п. Достаточный
набор подобных компонентов позволяет конструировать сложные имитационные модели,
сохраняя привычную терминологию СМО. На персональных компьютерах (ПК) типа
IBM/PC язык GPSS реализован в рамках пакета прикладных программ GPSS/PC [8].
Основной модуль пакета представляет собой интегрированную среду, включающую
помимо транслятора со входного языка средства ввода и редактирования текста
модели, ее отладки и наблюдения за процессом моделирования, графические средства
отображения атрибутов модели, а также средства накопления результатов
моделирования в базе данных и их статистической обработки. Кроме основного
модуля в состав пакета входит модуль создания стандартного отчета GPSS/PC, а
также ряд дополнительных модулей и файлов. В данном издании, состоящем из двух
частей, излагаются основы моделирования систем и сетей связи с использованием
пакета GPSS/PC. В первой части рассматриваются основные понятия и средства
GPSS/PC, приемы конструирования GPSS-моделей и технология работы с пакетом.
Изложение материала сопровождается небольшими учебными примерами. Относительно
подробное рассмотрение языка GPSS/PC вызвано отсутствием в литературе учебного
материала по данной версии языка. Во второй части рассматриваются примеры GPSS-
моделей различных систем и сетей массового обслуживания, используемых для
формализации процессов функционирования систем и сетей связи. Приводится также
ряд примеров моделирования систем и сетей связи с использованием GPSS/PC.
Подробно комментируются тексты GPSS-моделей и результаты моделирования. Исходная программа на языке GPSS/PC, как и
программа на любом языке программирования, представляет собой последовательность
операторов. Операторы GPSS/PC записываются и вводятся в ПК в следующем формате:
номер _строки имя операция операнды ; комментарии Все операторы исходной
программы должны начинаться с номера 0_строки - целого положительного числа от 1
до 9999999. После ввода операторов они располагаются в исходной программе в
соответствии с нумерацией строк. Обычно нумерация производится с некоторым
шагом, отличным от 1, чтобы иметь возможность добавления операторов в нужное
место исходной программы. Некоторые операторы удобно вводить, не включая их в
исходную программу. Такие операторы вводятся без номера строки. В настоящем
издании при описании формата операторов и в примерах моделей номера строк будут
опускаться для лучшей читаемости текста.Отдельные операторы могут иметь имя для
ссылки на эти операторы в других операторах. Если такие ссылки отсутствуют, то
этот элемент оператора не является обязательным. В поле операции записывается
ключевое слово (название оператора), указывающее конкретную функцию, выполняемую
данным оператором. Это поле оператора является обязательным. У некоторых
операторов поле операции включает в себя также вспомогательный операнд. В полях
операндов записывается информация, уточняющая и конкретизирующая выполнение
функции, определенной в поле операции. Эти поля в зависимости от типа операции
содержат до семи операндов, расположенных в определенной последовательности и
обозначаемых обычно первыми буквами латинского алфавита от A до G. Некоторые
операторы вообще не имеют операндов, а в некоторых операнды могут быть опущены,
при этом устанавливаются их стандартные значения (по умолчанию). При записи
операндов используется позиционный принцип: пропуск операнда отмечается запятой.
Необязательные комментарии в случае их присутствия отделяются от поля операндов
точкой с запятой. Комментарии не могут содержатьбукв русского алфавита.
Операторы GPSS/PC записываются, начиная с первой позиции, всвободном формате,
т.е. отдельные поля разделяются произвольным количеством пробелов. При вводе
исходной программы в интегрированной среде GPSS/PC размещение отдельных полей
операторов с определенным количеством интервалов между ними производится
автоматически. Каждый оператор GPSS/PC относится к одному из четырех типов:
операторы-блоки, операторы определения объектов, управляющие операторы и
операторы-команды. Операторы-блоки формируют логику модели. В GPSS/PC
имеется около 50 различных видов блоков, каждый из которых выполняет свою
конкретную функцию. За каждым из таких блоков стоит соответствующая подпрограмма
транслятора, а операнды каждого блока служат параметрами этой подпрограммы.
Операторы определения объектов служат для описания параметров некоторых объектов
GPSS/PC (о самих объектах речь пойдет дальше).Примерами параметров объектов
могут быть количество каналов в многоканальной системе массового обслуживания,
количество строк и столбцов матрицы и т.п. Управляющие операторы служат для
управления процессом моделирования (прогоном модели). Операторы-команды
позволяют управлять работой интегрированной среды GPSS/PC. Управляющие операторы
и операторы-команды обычно не включаются в исходную программу, а вводятся
непосредственно с клавиатуры ПК в процессе интерактивного взаимодействия с
интегрированной средой. После трансляции исходной программы в памяти ПК
создается так называемая текущая модель, являющаяся совокупностью разного типа
объектов, каждый из которых представляет собой некоторый набор чисел в памяти
ПК, описывающих свойства и текущее состояние объекта. динамические, операционные, аппаратные,
статистические, вычислительные, запоминающие и группирующие. Динамические
объекты, соответствующие заявкам в системах массового обслуживания, называются в
GPSS/PC транзактами. Они "создаются" и "уничтожаются" так, как это необходимо по
логике модели в процессе моделирования. С каждым транзактом может быть связано
произвольное число параметров, несущих в себе необходимую информацию об этом
транзакте. Кроме того, транзакты могут иметь различные приоритеты.
Операционные объекты GPSS/PC, называемые блоками, соответствуют операторам-
блокам исходной программы. Они, как уже говорилось, формируют логику модели,
давая транзактам указания: куда идти и что делать дальше. Модель системы на
GPSS/PC можно представить совокупностью блоков, объединенных в соответствии с
логикой работы реальной системы в так называемую блок-схему. Блок-схема модели
может быть изображена графически, наглядно показывая взаимодействие блоков в
процессе моделирования. Аппаратные объекты GPSS/PC - это абстрактные
элементы, на которые может быть расчленено (декомпозировано) оборудование
реальной системы. К ним относятся одноканальные и многоканальные устройства и
логические переключатели. Многоканальное устройство иногда называют памятью.
Одноканальные и многоканальные устройства соответствуют обслуживающим приборам в
СМО. Одноканальное устройство, которое для краткости далее будем называть просто
устройством, может обслуживать одновременно только один транзакт. Многоканальное
устройство (МКУ) может обслуживать одновременно несколько транзактов. Логические
переключатели (ЛП) используются для моделирования двоичных состояний логического
или физического характера. ЛП может находиться в двух состояниях: включено и
выключено. Его состояние может изменяться в процессе моделирования, а также
опрашиваться для принятия определенных решений. Статистические объекты
GPSS/PC служат для сбора и обработки статистических данных о функционировании
модели. К ним относятся очереди и таблицы . Каждая очередь обеспечивает сбор и
обработку данных о транзактах, задержанных в какой-либо точке модели, например
перед одноканальным устройством. Таблицы используются для получения выборочных
распределений некоторых случайных величин, например времени пребывания транзакта
в модели. К вычислительным объектам GPSS/PC относятся переменные
(арифметические и булевские) и функции. Они используются для вычисления
некоторых величин, заданных арифметическими или логическими выражениями либо
табличными зависимостями. Запоминающие объекты GPSS/PC обеспечивают хранение
в памяти ПК отдельных величин, используемых в модели, а также массивов таких
величин. К ним относятся так называемые сохраняемые величины и матрицы
сохраняемых величин. К объектам группирующего класса относятся списки
пользователя и группы. Списки пользователя используются для организации очередей
с дисциплинами, отличными от дисциплины "раньше пришел – раньше обслужен".
Группы в данном издании рассматриваться не будут. Каждому объекту того или
иного класса соответствуют числовые атрибуты, описывающие его состояние в данный
момент модельного времени. Кроме того, имеется ряд так называемых системных
атрибутов, относящихся не к отдельным объектам, а к модели в целом. Значения
атрибутов всех объектов модели по окончании моделирования Выводятся в
стандартный отчет GPSS/PC. Большая часть атрибутов доступна программисту и
составляет так называемые стандартные числовые атрибуты (СЧА), 0которые могут
использоваться в качестве операндов операторов исходной программы. Все СЧА в
GPSS/PC являются целыми числами. Каждый объект GPSS/PC имеет имя и номер.
Имена объектам даются в различных операторах исходной программы, а
соответствующие им номера транслятор присваивает автоматически. Имя объекта
представляет собой начинающуюся с буквы последовательность букв латинского
алфавита, цифр и символа "подчеркивание". При необходимости имени любого
объекта, кроме имени блока, можно поставить в соответствие любой номер с помощью
оператора описания EQU, имеющего следующий формат: Блокам
присваиваются их порядковые номера в исходной программе (не путать с номерами
строк!). Для ссылки 0на какой-либо стандартный числовой атрибут некоторого
объекта соответствующий операнд оператора исходной программы записывается одним
из следующих способов: , где СЧА - системное обозначение (название) конкретного стандартного
числового атрибута данного объекта; имя - имя объекта; j - номер объекта; $ -
символ-разделитель. Прогон текущей модели, т.е. собственно
моделирование, выполняется с помощью специальной управляющей программы, которую
называют симулятором (от английского - моделировать,
имитировать). Работа GPSS-модели под управлением симулятора заключается в
перемещении транзактов от одних блоков к другим, аналогично тому, как в
моделируемой СМО перемещаются заявки, соответствующие транзактам. В начальный
момент времени в GPSS-модели нет ни одного транзакта. В процессе моделирования
симулятор генерирует транзакты в определенные моменты времени в соответствии с
теми логическими потребностями, которые возникают в моделируемой системе.
Подобным же образом транзакты покидают модель в определенные моменты времени в
зависимости от специфики моделируемой системы. В общем случае в модели
одновременно существует большое число транзактов, однако в каждый момент времени
симулятор осуществляет продвижение только какого-либо одного транзакта. Если
транзакт начал свое движение, он перемещается от блока к блоку по пути,
предписанному блок-схемой. В тот момент, когда транзакт входит в некоторый блок,
на исполнение вызывается подпрограмма симулятора, соответствующая типу этого
блока, а после ее выполнения, при котором реализуется функция данного блока,
транзакт "пытается" войти в следующий блок. Такое продвижение транзакта
продолжается до тех пор, пока не произойдет одно из следующих возможных событий:
1) транзакт входит в блок, функцией которого является удаление транзакта из
модели; 2) транзакт входит в блок, функцией которого является задержка транзакта
на некоторое определенное в модели время; 3) транзакт "пытается" войти в
следующий блок, однако блок "отказывается" принять его. В этом случае транзакт
остается в том блоке, где находился, и позднее будет повторять свою попытку
войти в следующий блок. Когда условия в модели изменятся, такая попытка может
оказаться успешной, и транзакт сможет продолжить свое перемещение по блок-схеме.
Если возникло одно из описанных выше условий, обработка данного транзакта
прекращается, и начинается перемещение другого транзакта. Проходя через
блоки модели, каждый транзакт вносит вклад в содержимое счетчиков блоков.
Значения этих счетчиков доступны программисту через СЧА блоков: Каждое
продвижение транзакта в модели является событием, которое должно произойти в
определенный момент модельного времени. Для того, чтобы поддерживать правильную
временную последовательность событий, симулятор имеет таймер модельного времени,
который автоматически корректируется в соответствии с логикой, предписанной
моделью. 1)
регистрируются только целые значения (все временные интервалы в модели
изображаются целыми числами); 2) единица модельного времени определяется
разработчиком модели, который задает все временные интервалы в одних и тех же,
выбранных им единицах; 3) симулятор не анализирует состояние модели в каждый
следующий момент модельного времени (отстоящий от текущего на единицу модельного
времени), а продвигает таймер к моменту времени, когда происходит ближайшее
следующее событие. Центральной задачей,
выполняемой симулятором, является определение того, какой транзакт надо выбрать
следующим для продвижения в модели, когда его предшественник прекратил свое
продвижение. С этой целью симулятор рассматривает каждый транзакт как элемент
некоторого списка. В относительно простых моделях используются лишь два основных
списка: список текущих событий и список будущих событий. Список текущих
событий включает в себя те транзакты, планируемое время продвижения которых
равно или меньше текущего модельного времени (к последним относятся транзакты,
движение которых было заблокировано ранее). Он организуется в порядке убывания
приоритетов транзактов, а в пределах каждого уровня приоритета - в порядке
поступления транзактов. Список будущих событий включает в себя транзакты,
планируемое время продвижения которых больше текущего времени, т.е. события,
связанные с продвижением этих транзактов, должны произойти в будущем. Этот
список организуется в порядке возрастания планируемого времени продвижения
транзактов. Симулятор GPSS/PC помещает транзакты в зависимости от условий в
модели в тот или иной список и переносит транзакты из списка в список,
просматривает списки, выбирая следующий транзакт для обработки, корректирует
таймер модельного времени после обработки всех транзактов в списке текущих
событий. С транзактами связаны блоки создания,
уничтожения, задержки транзактов, изменения их атрибутов и создания копий
транзактов. (генерировать), имеющий следующий формат: задается среднее значение интервала
времени между моментами поступления в модель двух последовательных транзактов.
Если этот интервал постоянен, то указывается
модификатор среднего значения, который может быть задан в виде модификатора-
интервала или модификатора-функции. Модификатор-интервал используется, когда
интервал поступления транзактов является случайной величиной с равномерным
законом распределения вероятностей. В этом случае в может быть
задан любой СЧА, кроме ссылки на функцию, а диапазон изменения интервала
поступления имеет границы создает транзакты через случайные интервалы времени,
равномерно распределенные на отрезке [60;140]. Модификатор-функция
используется, если закон распределения интервала поступления отличен от
равномерного. В этом случае в должна быть записана ссылка на
функцию (ее СЧА), описывающую этот закон, и случайный интервал поступления
определяется, как целая часть произведения задается момент поступления в
модель первого транзакта. Если это поле пусто или равно 0, то момент появления
первого транзакта определяется операндами A и B. . Если это
поле пусто, то блок генерирует неограниченное число транзактов до завершения
моделирования. В задается приоритет, присваиваемый генерируемым
транзактам. Число уровней приоритетов неограничено, причем самый низкий
приоритет - нулевой. Если поле E пусто, то генерируемые транзакты имеют нулевой
приоритет. Транзакты имеют ряд стандартных числовых атрибутов. Например, СЧА
с названием PR позволяет ссылаться на приоритет транзакта. СЧА с названием M1
содержит так называемое резидентное время транзакта, т.е. время, прошедшее с
момента входа транзакта в модель через блок . СЧА с названием XN1
содержит внутренний номер транзакта, который является уникальным и позволяет
всегда отличить один транзакт от другого. В отличие от СЧА других объектов, СЧА
транзактов не содержат ссылки на имя или номертранзакта. Ссылка на СЧА транзакта
всегда относится к активному транзакту, т.е. транзакту, обрабатываемому в данный
момент симулятором. Важными стандартными числовыми атрибутами транзактов
являются значения их параметров. Любой транзакт может иметь неограниченное число
параметров, содержащих те или иные числовые значения. Ссылка на этот СЧА
транзактов всегда относится к активному транзакту и имеет вид Pj или Р$ имя, где
j и имя - номер и имя параметра соответственно. Такая ссылка возможна только в
том случае, если параметр с указанным номером или именем существует, т.е. в него
занесено какое-либо значение.
(присваивать), имеющий следующий формат: указывается номер или имя параметра, в который за носится значение
операнда B может быть указано имя или номер
функции-модификатора, действующей аналогично функции-модификатору в поле B блока
Для записи текущего
модельного времени в заданный параметр транзакта поле A указывается номер или имя параметра транзакта, в ко торый
заносится текущее модельное время при входе этого транзакта в блок MARK.
Содержимое этого параметра может быть позднее использо вано для определения
транзитного времени 0пребывания транзакта в какой-то части модели с помощью СЧА
с названием MP. то на выходе этого участка СЧА
MP$MARKER будет содержать разность между текущим модельным временем и временем,
занесенным в параметр MARKER блоком MARK. блока MARK
пусто, то текущее время заносится на место отметки времени входа транзакта в
модель, используемой при определении резидентного времени транзакта с помощью
СЧА M1. мо жет содержаться ключевое слово BU, при наличии которого
транзакт, вошедший в блок, помещается в списке текущих событий после всех
остальных транзактов новой приоритетной группы, и список текущих событий
просматривается с начала. Использование такой возможности будет рассмотрено
ниже. указывает, на сколько единиц уменьшается со держимое так
называемого счетчика завершений при входе транзакта в данный блок TERMINATE.
Если не определено, то оно считается равным 0, и транзакты,
проходящие через такой блок, не уменьшают содержимого счетчика завершений. (начать), предназначенным для запуска про гона модели.
этого оператора содержит начальное значение счетчика завершений
(см. разд. 3). Прогон модели заканчивается, когда содержимое счетчика завершений
обращается в 0. Таким образом, в модели должен быть хотя бы один блок TERMINATE
с непустым Текущее значение счетчика завершений GENERATE-ТERMINATE .
Простые модели могут состоять из одного сегмента, в сложных моделях может быть
несколько сегментов. Например, простейший сегмент модели, состоящий всего из
двух блоков моделирует процесс создания
случайного потока транзактов, поступащих в модель со средним интервалом в 100
единиц модельного времени, и уничтожения этих транзактов. Начальное значение
счетчика завершений равно 1000. Каждый транзакт, проходящий через , вычитает из счетчика единицу, и таким образом моделирование
завершится, когда тысячный по счету транзакт войдет в . При
этом точное значение таймера в момент завершения прогона непредсказуемо.
Следовательно, в приведенном примере продолжительность прогона устанавливается
не по модельному времени, а по количеству транзактов, прошедших через модель.
Если
необходимо управлять продолжительностью прогона по модельному времени, то в
модели используется специальный сегмент, называемый сегментом таймера. Например, в модели из двух сегментов, приведенной на рис. 2,
первый (основной) сегмент выполняет те же функции, что и в предыдущем примере.
Заметим, однако, что в первом сегменте пусто, т.е.
уничтожаемые транзакты не уменьшают содержимого счетчика завершений. Во втором
сегменте создаст первый транзакт в момент модельного
времени, равный 100000. Но этот транзакт окажется и последним в данном сегменте,
так как, войдя в равным 1. Таким образом, в
этой модели гарантируется завершение прогона в определенный момент модельного
времени, а точное количество транзактов, прошедших через модель, непредсказуемо.
В приведенных примерах транзакты, входящие в модель через блок .
В моделях систем массового обслуживания заявки обслуживаются приборами
(каналами) СМО в течение некоторого промежутка времени прежде, чем покинуть СМО.
Для моделирования такого обслуживания, т.е. для задержки транзактов на
определенный отрезок модельного времени, служит и имеют тот же смысл, что и в соответствующих полях блока
GENERATE. Следует отметить, что транзакты, входящие в блок ,
переводятся из списка текущих событий в список будущих событий, а по истечении
вычисленного времени задержки возвращаются назад, в список текущих событий, и их
продвижение по блок-схеме продолжается. Если вычисленное время задержки равно 0,
то транзакт в тот же момент модельного времени переходит в следующий блок,
оставаясь в списке текущих событий. через случайные
интервалы времени, имеющие равномерное распределение на отрезке [60;140],
попадают в . Здесь определяется случайное время задержки
транзакта, имеющее равномерное распределение на отрезке [30;130], и транзакт
переводится в список будущих событий. По истечении времени задержки транзакт
возвращается в список текущих событий и входит в блок может одновременно находиться произвольное количество транзактов.
В
рассмотренных выше примерах случайные интервалы времени подчинялись равномерному
закону распределения вероятностей. Для получения случайных величин с другими
распределениями в GPSS/PC используются вычислительные объекты: переменные и
функции. Как известно, , имеющей равномерное распределение на отрезке
[0;1], через свою обратную функцию распределения. Для некоторых случайных
величин уравнение связи имеет явное решение, и по
формуле. Так, например, значение случайной Напомним, что параметр d имеет смысл
величины, обратной математическому ожиданию E, а, следовательно, 1/d -
математическое ожидание (среднее значение) случайной величины E. Для получения
случайной величины R с равномерным распределением на отрезке [0;1] в GPSS/PC
имеются встроенные генераторы случайных чисел. Для получения случайного числа
путем обращения к такому генератору достаточно записать системный СЧА RN с
номером генератора, например RN1. Правда, встроенные генераторы случайных чисел
GPSS/PC дают числа не на отрезке [0;1], а целые случайные числа, равномерно
распределенные от 0 до 999, но их нетрудно привести к указанному отрезку
делением на 1000. Проще всего описанные вычисления в GPSS/PC выполняются с
использованием арифметических переменных. Они могут быть целыми и
действительными. Целые переменные определяются перед началом моделирования с
помощью оператора определения Здесь имя - имя
переменной, используемое для ссылок на нее, а выражение - арифметическое
выражение, определяющее переменную. Арифметическое выражение представляет собой
комбинацию операндов, в качестве которых могут выступать константы, СЧА и
функции, знаков арифметических операций и круглых скобок. Следует заметить, что
знаком операции умножения в GPSS/PC является символ # (номер). Результат каждой
промежуточной операции в целых переменных преобразуется к целому типу путем
отбрасывания дробной части, и, таким образом, результатом операции деления
является целая часть частного. FVARIABLE .
Отличие действительных переменных от целых заключается в том, что в
действительных переменных все промежуточные операции выполняются с сохранением
дробной части чисел, и лишь окончательный результат приводится к целому типу
отбрасыванием дробной части. Арифметические переменные обоих типов имеют
единственный СЧА с названием , значением которого является результат
вычисления арифметического выражения, определяющего переменную. Вычисление
выражения производится при входе транзакта в блок, содержащий ссылку на СЧА V с
именем переменной. могут быть использованы для
получения случайных интервалов времени с показательным законом распределения.
Пусть в модели из примера на рис. 3 распределения времени поступления транзактов
и времени задержки должны иметь показательный закон. Это может быть сделано так,
как показано на рис. 4. ADVANCEV$TSRV
задает выражение для вычисления интервала поступления со средним
значением 100, вторая и ADVANCE
содержат в не используется, так как в поле A содержится случайная величина, не
нуждающаяся в модификации. Большинство случайных величин не может быть
получено через случайную величину R с помощью арифметического выражения. Кроме
того, такой способ является достаточно трудоемким, так как требует обращения к
математическим функциям, вычисление которых требует десятков машинных операций.
Другим возможным способом является использование вычислительных объектов GPSS/PC
типа функция. Функции используются для вычисления величин, заданных табличными
зависимостями. Каждая функция определяется перед началом моделирования с помощью
Здесь имя - имя функции, используемое для ссылок на
нее; - тип функции и число точек таблицы, определяющей функцию.
C . Так, например, в определении
непрерывной числовой функции, таблица которой содержит 24 точки, поле B должно
иметь значение C24. При использовании непрерывной функции для генерирования
случайных чисел ее аргументом должен быть один из генераторов случайных чисел
EXPFUNCTIONRN1,C24 в качестве
аргументов функций является то, что их значения в этом контексте
интерпретируются как дробные числа от 0 до 0,999999. оператором FUNCTION (значение аргумента) и
(значение функции), отделяемых друг от друга запятой. Пары координат отделяются
друг от друга символом "/" и располагаются на произвольном количестве строк.
Последовательность значений аргумента блоков
вычисление интервала поступления или времени
задержки производится путем умножения операнда A на вычисленное значение
функции. Отсюда следует, что функция, используемая для генерирования случайных
чисел с показательным распределением, должна описывать с такой
таблицей, содержащей 24 точки для обеспечения достаточной точности
аппроксимации, имеет следующий вид: .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
Вычисление непрерывной
функции производится следующим образом. Сначала определяется интервал (Xi;Xi+1),
на котором находится текущее значение СЧА-аргумента (в нашем примере -
сгенерированное значение RN1). Затем на этом интервале выполняется линейная
интерполяция с использованием соответствующих значений Yi и Yi+1. Результат
интерполяции усекается (отбрасыванием дробной части) и используется в качестве
значения функции. Если функция служит операндом B блоков , то усечение результата производится только после его умножения
на значение операнда A. Использование функций для получения случайных чисел
с заданным распределением дает хотя и менее точный результат за счет
погрешностей , но зато с меньшими вычислительными затратами
(несколько машинных операций на выполнение линейной интерполяции). Чтобы к
погрешности аппроксимации не добавлять слишком большую погрешность усечения,
среднее значение при использовании показательных распределений должно быть
достаточно большим (не менее 50). Эта рекомендация относится и к использованию
переменных. , значением которого является вычисленное значение функции. Вычисление
функции производится при входе транзакта в блок, содержащий ссылку на СЧА FN с
именем функции. Поскольку в обеих моделях используется один и тот же
генератор RN1, интервалы поступления и задержки, вычисляемые в блоках GENERATE и
ADVANCE, должны получиться весьма близкими, а может быть и идентичными. При
большом количестве транзактов, пропускаемых через модель (десятки и сотни
тысяч), разница в скорости вычислений должна стать заметной.
.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP Особенностью непрерывных
функций является то, что они принимают "непрерывные" (но только целочисленные)
значения в диапазоне от Y1 до Yn , где n - количество точек таблицы. В отличие
от них дискретные числовые функции, тип которых кодируется буквой оператора определения функции, принимают только
отдельные (дискретные) значения, заданные координатами Yi в строках, следующих
за оператором определения FUNCTION ,
сравнивается по условию <= последовательно со всеми значениями упорядоченных
по возрастанию координат Xi до выполнения этого условия при некотором i.
Значением функции становится целая часть соответствующего значения Yi. Если
последовательность значений аргумента таблицы с координатами точек функции
представляет числа натурального ряда (1,2,3,...,n), то такую дискретнуюфункцию с
целью экономии памяти и машинного времени удобно определить как списковую
числовую функцию (тип L). Пусть в модели на рис. 5 заявки, моделируемые
транзактами, с равной вероятностью 1/3 должны относиться к одному из трех
классов (типов) 1,2 и 3, а среднее время задержки обслуживания заявок каждого
типа должно составлять соответственно 70, 80 и 90 единиц модельного времени. Это
может быть обеспечено способом, показанным на рис. 6. каждого сгенерированного транзакта заносится тип заявки,
получаемый с помощью , а координаты ее таблицы
представляют собой обратную функцию распределения дискретной случайной величины
"класс заявки" с одинаковыми вероятностями каждого из трех значений случайной
величины. параметр TYPE входящих в блок
транзактов. В зависимости от значений этого параметра (типа заявки) среднее
время задержки принимает одно из трех возможных значений 0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8 ASSIGN TYPE,FN$CLASS Следует отметить, что в данном
примере можно было бы не использовать параметр TYPE и обойтись одной дискретной
функцией, возвращающей с равной вероятностью одно из трех возможных значений
среднего времени задержки. Однако использование параметров дает некоторые
дополнительные возможности, которые будут рассмотрены позже. Транзакты могут
входить в модель не только через блок GENERATE, но и путем создания копий уже
существующих транзактов в задается число
создаваемых копий исходного транзакта (родителя), входящего в блок SPLIT. После
выхода из транзакт-родитель направляется в следующий блок, а
все транзакты-потомки поступают в блок, указанный в Транзакт-родитель и
его потомки, выходящие из . Если у транзакта-
родителя значение этого параметра при входе в блок SPLIT было равно k, то при
выходе из блока оно станет равным k+1, а значения этого параметра у транзактов-
потомков окажутся равными k+2, k+3 и т.д. Например, блок создает пять копий исходного транзакта и направляет их в
блок с именем MET1. Транзакт-родитель и потомки нумеруются в параметре с именем
NUM. Если, например, перед входом в блок значение этого параметра у транзакта-
родителя было равно 0, то при выходе из блока оно станет равным 1, а у
транзактов-потомков значения параметра NUM будут равны 2, 3, 4, 5 и 6. Все примеры моделей,
рассматривавшиеся выше, пока еще не являются моделями систем массового
обслуживания, так как в них не учтена основная особенность СМО: конкуренция
заявок на использование некоторых ограниченных ресурсов системы. Все транзакты,
входящие в эти модели через блок , который никогда не
"отказывает" транзактам во входе, сколько бы транзактов в нем не находилось.
Для моделирования ограниченных ресурсов СМО в модели должны присутствовать
аппаратные объекты: одноканальные или многоканальные устройства.
RELEASE
указывается номер или имя устройства. Если транзакт входит в , становится занятым и остаётся в этом
состоянии до тех пор, пока этот же транзакт не пройдёт соответствующий , уже занято каким-либо транзактом, то никакой другой транзакт не может
войти в этот блок и остаётся в предыдущем блоке. Транзакты, задержанные
(заблокированные) перед , остаются в списке текущих событий и
при освобождении устройства обрабатываются с учетом приоритетов и очередности
поступления. - коэффициент использования в
долях 1000; Воспользуемся блоками SEIZE и RELEASE
для моделирования одноканальной СМО с ожиданием (рис. 7). Теперь блок ADVANCE
находится между блоками SEIZE и RELEASE, моделирующими занятие и освобождение
устройства с именем SYSTEM, и поэтому в нем может находиться только один
транзакт. Транзакты, выходящие из блока GENERATE в моменты занятости устройства,
не смогут войти в блок SEIZE и будут оставаться в блоке GENERATE, образуя
очередь в списке текущих событий. .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP Для моделирования захвата (прерывания) одноканального устройства (вернуть). Блок указывается имя
или номер устройства, подлежащего захвату. В кодируется условие
захвата. Если это поле пусто, то захват возникает, если обслуживаемый транзакт
сам не является захватчиком. Если же в поле B записан операнд PR, то захват
возникает, если приоритет транзакта-захватчика выше, чем приоритет
обслуживаемого транзакта. указывает имя
блока, в который будет направлен прерванный транзакт. может быть
указан номер или имя параметра прерванного транзакта, в который записывается
время, оставшееся этому транзакту до завершения обслуживания на устройстве. При
отсутствии операнда прерванный транзакт сохраняет право на
автоматическое восстановление на устройстве по окончании захвата. Если же имеет единственный Блоки PREEMPT и
RETURN могут быть использованы для моделирования СМО с абсолютными
приоритетами. В простейших случаях, при одном уровне захвата, в блоке PREEMPT
используется единственный операнд . При этом прерванный транзакт
переводится симулятором из списка будущих событий в так называемый список
прерываний устройства, а по окончании захвата устройства возвращается в список
будущих событий с предварительно вычисленным временем занятия устройства для
продолжения обслуживания. ) они должны быть предварительно определены с помощью
Здесь имя - имя МКУ, используемое для ссылок на него; A
– емкоcть (количество каналов обслуживания) МКУ, задаваемая константой. LEAVE
указывается номер или имя МКУ, в блок LEAVE При входе транзакта в блок ENTER текущее
содержимое МКУ увеличивается на число единиц, указанное в блок ENTER блок LEAVE текущее содержимое
МКУ умень шается на число единиц, указанное в поле B. Не обязательно освобож
дается такое же число каналов МКУ, какое занималось при входе дан ного транзакта
в блок ENTER, однако текущее содержимое МКУ не долж но становиться
отрицательным. - свободная емкость МКУ; максимальное содержимое МКУ;
Воспользуемся блоками ENTER-LEAVE и оператором STORAGE для моделирования
двухканальной СМО с ожиданием (рис. 8). Если текущее содержимое МКУ с именем
STO2 меньше 2, т.е. в блоке ADVANCE находится один или ни одного транзакта, то
очередной транзакт, поступа ющий в модель через блок GENERATE, может войти в
блок ENTER и затем в блок ADVANCE. Если же текущее содержимое МКУ равно 2, то
очеред ной транзакт остается в блоке GENERATE, образуя очередь в списке текущих
событий. По истечении задержки одного из двух обслуживаемых транзактов в блоке
ADVANCE и после входа его в блок LEAVE первый из заблокированных транзактов
сможет войти в блок ENTER. .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP К аппаратным объектам относятся также логические переключатели (ЛП),
которые могут находиться в двух состояниях: "включено" и "выключено". В начале
моделирования все ЛП находятся в состоянии "выключено". оператора INITIAL Здесь имя и j -
соответственно имя и номер ЛП, устанавливаемого в начальное состояние
"включено". блок LOGIC
указывается имя или номер ЛП. Вспомогательный указывает
вид операции, которая производится с логическим переключателем при входе
транзакта в блок: LOGIC
RFLAG . Значение СЧА равно 1, если ЛП включен, и 0, если он выключен. Два последних примера в
предыдущем параграфе представляют со бой законченные модели одноканальной и
многоканальной СМО с ожиданием. Однако такие модели разрабатываются обычно для
исследования различных характеристик, связанных с ожиданием заявок в очереди:
длины очереди, времени ожидания и т.п., а в приведенных примерах очередь
транзактов образуется в списке текущих событий и недоступна исследователю. Для
регистрации статистической информации о процессе ожидания транзактов в модели
должны присутствовать статистические объекты: очереди или таблицы. (стать в очередь) и - число единиц, на которое текущая длина очереди увеличивается при входе
транзакта в блок QUEUE или уменьшается при входе транзакта в блок DEPART. Обычно
поле B пусто, и в этом случае его значение по умолчанию принимается равным 1.
Для сбора статистики о транзактах, заблокированных перед каким-либо блоком
модели, блоки QUEUE и DEPART помещаются перед и после этого блока
соответственно. При прохождении транзактов через -
текущая длина очереди; - общее число транзактов, вошедших в
очередь; - целая часть среднего времени ожидания с
учетом "нулевых" входов; Дополним приведенную на рис. 7 модель одноканальной
СМО блока ми QUEUE и DEPART (рис. 9). Теперь транзакты, заблокированные перед
блоком SEIZE из-за занятости устройства SYSTEM, находятся в блоке QUEUE, внося
свой вклад в статистику о времени ожидания, накапливаемую в статистическом
объекте типа "очередь" с именем LINE. При освобождении устройства первый из
заблокированных транзактов войдет в блок SEIZE и одновременно в блок DEPART,
прекращая накопление статистики об ожидании этого транзакта. .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP Рис. 9 Очень часто исследователя
интересует не только среднее значение времени ожидания в очереди, но и дисперсия
этого времени, а также статистическое распределение выборки времени ожидания,
представляемое обычно графически в виде гистограммы. Имея такое распределение,
можно оценить вероятность того, что время ожидания превысит или не превысит
некоторое заданное значение. статистические объекты
типа Q-таблица. оператора определения
QTABLE Здесь имя - имя таблицы, используемое для ссылок
на нее; - верхняя граница первого частотного
интервала таблицы; Диапазон всевозможных значений времени ожидания в
очереди, указанной в . Первый из этих интервалов имеет
ширину от минус бесконечности до величины, указанной в , но меньшие или равные . Наконец, последний интервал включает все значения, большие, чем
последняя граница. Значения операндов B, C и D должны задаваться целыми
константами. Операнд B может быть неположительным, хотя для Операнды C и D
должны быть строго положительными. При прохождении транзакта через блоки
QUEUE и DEPART его время ожидания фиксируется, и к счетчику частотного интервала
таблицы, в который попало это время, добавляется 1. Одновременно в таблице
накапливается информация для вычисления среднего значения и
среднеквадратического отклонения (корня из дисперсии) времени ожидания. По
окончании моделирования среднее значение и среднеквадратическое отклонение
времени ожидания, а также счетчики попаданий в различные частотные интервалы
выводятся в стандартный отчет GPSS/PC. - общее число транзактов, вошедших в очередь,
связанную с таблицей; - целая часть среднеквадратического отклонения времени ожидания в
очереди. Дополним модель из примера на рис. 9 оператором QTABLE для по
лучения распределения времени ожидания в очереди с именем LINE (рис. 10).
.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP Рис. 10 Оператор определения таблицы с
именем WTIME разбивает ось времени на 10 частотных интервалов. Первый интервал
включает значения от 0 до 50, второй - от 50 до 100, третий - от 100 до 150 и
т.д. Последний, десятый, интервал включает значения, превышающие 450. Если,
например, время ожидания некоторого транзакта в очереди составило 145 единиц
модельного времени, то к счетчику третьего частотного интервала будет добавлена
1. Следует заметить, что ин формация в таблицу с именем WTIME заносится
автоматически, при входе транзактов в блоки QUEUE и DEPART, и никаких
специальных мер для этого принимать не требуется. Таблицы в GPSS/PC могут
использоваться в более общем случае не только для табулирования времени ожидания
в очереди, но и для получения выборочных распределений произвольных СЧА любых
объектов модели.
(таблица), формат которого совпадает с форматом оператора QTABLE. Отличие
состоит лишь в том, что в , выборочное распределение которого необходимо по лучить, а
Занесение информации в таблицу,
определяемую оператором TABLE, Для этого используется специальный блок
TABULATE указывается номер или имя таблицы, определенной
соответствующим оператором TABLE. При входе транзакта в блок TABULATE
текущее значение табулируемого аргумента таблицы, указанного в поле A оператора
TABLE, за носится в нее в соответствии с заданным в операторе TABLE разбиением
области значений аргумента на частотные интервалы. , среднее время ожидания Пусть, например, в модели многоканальной СМО,
приведенной на рис. 8, надо получить распределение времени пребывания заявок в
системе, включающего время ожидания в очереди и время обслуживания. Это может
быть обеспечено способом, показанным на рис. 11. Оператор TABLE определяет
таблицу с именем TTIME, аргументом которой служит СЧА М1 - время пребывания
транзакта в модели. В рассматриваемой модели значение СЧА M1 одновременно будет
являться временем пребывания транзакта в СМО в том случае, если занесение
информации в таблицу производить перед выходом транзакта из модели. Поэтому блок
TABULATE, заносящий информацию о времени пребывания каждого транзакта в модели в
таблицу TTIME, располагается перед блоком TERMINATE. Диапазон возможных значений
времени пребывания транзакта в модели разбит в операторе TABLE на 12 частотных
интер валов, ширина которых (кроме последнего) равна 100 единицам модель ного
времени. 0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8 Рис. 11 В приведенных выше примерах транзакты, выходящие из любого блока, всегда
поступали в следующий блок. В более сложных моделях возникает необходимость
направления транзактов к другим блокам в зависимости от некоторых условий. Эту
возможность обеспечивают блоки изменения маршрутов транзактов. (передать) служит для передачи входящих в него транзактов в блоки,
отличные от следующего. Блок имеет девять режи мов работы, из которых рассмотрим
здесь лишь три наиболее часто используемых. В этих трех режимах блок имеет
следующий формат: В режиме безусловной передачи указывается имя блока, к которому безусловным
образом направляется транзакт, вошедший в блок TRANSFER. Например:
определяет вероятность, с которой транзакт направляется в блок, указанный в
(в следующий, если поле B пусто). с вероятностью 0,75 направляет
транзакты в блок с именем THAT, а с вероятностью 0,25 - в блок с именем THIS.
Если же поле A начинается не с десятичной точки и не содержит одного из
ключевых слов - признаков других режимов работы блока, то его значение
рассматривается как количество тысячных долей в вероятности передачи. Например,
предыдущий блок TRANSFER можно записать также в следующем виде: ключевое слово BOTH (оба). Транзакт, поступающий в блок
TRANSFER, сначала пытается войти в блок, указанный в поле B (или в следующий
блок, если
отказывает транзакту во входе, то в блок, указанный в поле C. Если и эта по
пытка неудачна, то транзакт задерживается в блоке TRANSFER до изменения условий
в модели, делающего возможным вход в один из блоков B или C, причем при
одновременно возникшей возможности предпочтение отдается блоку B. Например:
(проверить) служит для
задержки или изменения маршрутов транзактов в зависимости от соотношения двух
СЧА. Он имеет следующий формат: содержит условие проверки соотношения между СЧА и может
принимать следующие значения: (больше или рав но); содержит первый, а поле B - второй из сравниваемых СЧА.
Если проверяемое условие A X B выполняется, то блок TEST пропускает транзакт в
следующий блок. Если же это условие не выполняется, то транзакт переходит к
блоку, указанному в поле C, а если оно пусто, то задерживается перед блоком
TEST. Например, блок не впускает транзакты, у
которых значение параметра с именем TIME больше текущего модельного времени.
Блок направляет транзакты в блок с именем OUT,
если текущая длина очере ди LINE больше либо равна 5. служит содержит код состояния
проверяемого аппаратного объекта, а в указывается имя или номер
этого объекта. Если проверяемый объект находится в заданном состоянии, то блок
GATE пропускает транзакт к следующему блоку. Если же заданное в блоке условие не
выполняется, то транзакт переходит к блоку, указанному в Операнд X может
принимать следующие значения: U (устройство не захвачено);
(ЛП включен), отказывает во входе транзактам,
поступающим вмоменты, когда в МКУ с именем BUF3 все каналы обслуживания
свободны. Блок направляет транзакты в блок с
именем BLOK2, если в момент их поступления ЛП с номером 4 включен. Блоки
рассматриваемой группы используются при моделировании различных СМО с потерями
заявок. Воспользуемся, например, блоками TRANSFER для моделирования
двухканальной СМО с отказами и повторны ми попытками (рис. 12). .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP REFUS TRANSFER.1,,OUT Транзакты, поступающие в
модель, попадают в блок TRANSFER с именем ENT1, работающий в логическом режиме.
Если в момент поступления транзакта в МКУ STO2 хотя бы один канал свободен, то
блок TRANSFER направит транзакт в следующий блок, т.е. в блок ENTER. Если же в
момент поступления оба канала МКУ заняты, и поэтому блок ENTER отказывает во
входе, то транзакт будет направлен в блок TRANSFER с именем REFUS, работающий в
статистическом режиме. С вероятностью 0,9 транзакты из этого блока передаются в
следующий блок, задерживаются в нем на случайное время и с помощью блока
TRANSFER, работающего в безусловном режиме, передаются вновь на вход модели в
блок с именем ENT1. С вероятностью 0,1 транзакты из блока с именем REFUS
передаются в блок TERMINATE с именем OUT для уничтожения. Следует заметить,
что для уничтожения транзактов, получивших отказ в обслуживании, понадобился
отдельный блок TERMINATE для фиксации в стандартном отчете количества потерянных
транзактов с помощью счетчика блока с именем OUT (СЧА N$OUT). Для
моделирования той же СМО может быть использован также блок TEST (рис. 13). В
этом варианте модели транзакт проходит в блок ENTER, если текущее число занятых
каналов (СЧА S$STO2) меньше 2. .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP REFUS TRANSFER.1,,OUT При использовании блока GATE модель принимает
вид, показанный на рис. 14. В этом варианте транзакт проходит в блок ENTER, если
условие "МКУ STO2 не заполнено" истинно. .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP ADVANCE 250,FN$EXP
Для хранения в памяти отдельных числовых значений и массивов таких значений
используются сохраняемые величины и матрицы сохраняемых величин. Сохраняемые
величины могут использоваться в модели для хранения исходных данных, которые
надо изменять при различных прогонах модели, промежуточных значений и
результатов моделирования. В начале моделирования все сохраняемые величины
устанавливаются равными 0. , имеющий
следующий формат: Здесь имя и j - соответственно имя и номер сохраняемой величины, а значение
- присваиваемое ей начальное значение (константа). (сохранить величину), имеющий следующий формат: указывается номер или имя сохраняемой величины, в которую
записывается значение операнда B
, значением
которого является текущее значение соответствующей сохраняемой величины.
Изменим пример на рис. 14 таким образом, чтобы исходные данные модели (средний
интервал поступления транзактов и среднее время обслуживания) были заданы
сохраняемыми величинами, а результат моделирования (количество потерянных
транзактов) фиксировался также в сохраняемой величине. Такая модель будет иметь
вид, показанный на рис. 15. Матрицы сохраняемых величин дают возможность
упорядочить сохраняемые значения в виде матриц m*n, где m - число строк, n -
число столбцов матрицы. (определить матрицу),
имеющего следующий формат:
оператора не используется и сохранено в GPSS/PC для совместимости со старыми
версиями GPSS. указываются соответственно число строк и
столбцов матрицы, задаваемые константами, причем общее число элементов, равное
произведению B на C, не должно превышать 8191. Например, оператор
INITIAL X$TARR,100 0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8 OUTTERMINATE 1
Рис. 15 Для установки отличных от 0 начальных значе ний
отдельных элементов матриц используется оператор INITIAL Здесь - номера соответственно строки и столбца,
задаваемые константами; значение присваиваемое элементу матрицы начальное
значение, задаваемое также константой. (сохранить
значение элемента матрицы), имеющий следующий формат: указывается имя или номер
матрицы, после которого, как и в блоке SAVEVALUE, может стоять знак + или -. В
поле D
MSAVEVALUE5,3,2,X1 , ссылка на кото рый записывается в следующем
виде: - соответственно имя и номер матрицы; - номера
соответственно строки и столбца, задаваемые константами или ссылка ми на СЧА
параметров транзактов. Например: Так как заблокированные транзакты находятся в списке текущих событий, то
при большом количестве таких транзактов симулятор расходует слишком много
времени на просмотр этого списка с целью выбора очередного транзакта для
продвижения. Для экономии машинного времени заблокированные транзакты
целесообразно помещать в так называемые списки пользователя и оставлять их там
до тех пор, пока не выполнятся условия, позволяющие дальнейшее продвижение этих
транзактов. Кроме того, размещение ожидающих транзактов в списках пользователя
позволяет организовать различные дисциплины очередей, от личные от дисциплины
"раньше пришел - раньше обслужен", реализован ной в списке текущих событий.
Списки пользователя представляют собой некоторые буферы, куда могут временно
помещаться транзакты, выведенные из списка текущих событий. В отличие от списков
текущих и будущих событий транзакты вводятся в списки пользователя и выводятся
из них не автоматически, а в соответствии с логикой модели с помощью специальных
блоков. (ввести в список), который может быть использован в двух режимах: условном и
безусловном. Ограничимся рассмотрением лишь безусловного режима, в котором блок
LINK имеет следующий формат:
задается имя или номер списка пользователя, в который безусловным образом
помещается транзакт, вошедший в блок. Если в поле B записано
ключевое слово FIFO
- в начало списка. В других случаях транзакты упорядочиваются в соответствии с
вычисленным значением поля B, гдеобычно записывается , то транзакты упорядочиваются по убыванию приоритета. В остальных случаях
производится упорядочение по возрастанию указанного СЧА. помещает транзакты в список пользователя с номером 5 в
порядке их поступления в блок. Блок помещает
транзакты в список пользователя с именем BUFER, упорядочивая их по возрастанию
параметра с именем ORDER. Условия, при которых транзакт помещается в список
пользователя, в безусловном режиме проверяются средствами, предусмотренными
разработчиком модели. Например, направить транзакт в список пользователя в
случае занятости устройства можно так, как показано на рис. 16. Если устройство
с именем FAC4 занято, то блок GATE не впускает транзакт в блок SEIZE, а
направляет его в блок LINK с именем WAIT, и транзакт вводится в конец списка
пользователя с именем BUFER. WAITLINKBUFER,FIFO Для вывода одного или
нескольких транзактов из списка пользователя и помещения их обратно в список
текущих событий служит блок UNLINK указывается имя
или номер списка пользователя.
указывается число выводимых транзактов или ALL для вывода всех находящихся в
списке транзактов. определяют способ и условия вывода транзактов из списка
пользователя. Если поля D и E пусты, то и операнд X не используется, а тран
закты выводятся с начала списка пользователя. Если поле D содержит , то поле E и вспомогательный операнд X не используются, а
транзакты выводятся с конца списка. В остальных случаях значение поля D
интерпретируется как номер параметра транзактов, находящихся в списке
пользователя, а из списка выводится заданное число тех транзактов, у которых
значение этого параметра по отношению к значению операнда в поле E удовлетворяет
условию, заданному вспомогательным операндом X. Операнд X принимает те же
значения, что и в блоке TEST. В поле F указывается имя блока, куда переходит
транзакт, выходящий из блока UNLINK, если из списка пользователя не выведен ни
один транзакт. Если это поле пусто, то выводящий транзакт переходит в следующий
блок независимо от количества выведенных транзактов. выводит из списка пользователя с номером 5 один транзакт с
начала списка и направляет его в блок с именем NEXT. Блок выводит из списка пользователя с именем BUFER один
транзакт с конца списка и направляет его в блок с именем ENT1. Блок выводит из списка пользователя,
номер которого записан в параметре UCH выводящего транзакта, и направляет в блок
с именем MET2 все транзакты, содержимое параметра COND которых равно содержимому
одноименного параметра выводящего транзакта. Если таких транзактов в списке не
окажется, то выводящий транзакт будет направлен в блок с именем MET3, в
противном случае - к следующему блоку. следующие
особенности выполнения блока UNLINK. Во-первых, если поля D и E содержат ссылки
на СЧА транзактов, то поле D вычисляется относительно транзактов в списке
пользователя, а поле E - относительно активного транзакта. Во-вторых, после
вывода транзактов из списка симулятор продолжает или начинает продвижение
транзакта с наивысшим приоритетом, а при равенстве приоритетов отдает
предпочтение транзакту-инициатору вывода. Каждый список пользователя имеет
следующие СЧА: CH - текущая длина списка; CA - средняя длина списка (целая
часть); CM - максимальная длина списка; CC - общее число транзактов, вошедших в
список; CT - целая часть среднего времени пребывания транзакта в списке.
Воспользуемся рассмотренными блоками для моделирования много канальной СМО с
ожиданием транзактов в списке пользователя (рис. 17). Если МКУ с именем STO2 не
заполнено, блок GATE впускает вновь прибывший транзакт в блок ENTER, и в МКУ
занимается один канал. Если же МКУ заполнено, то блок GATE направляет транзакт в
блок LINK с именем WAIT, помещающий транзакт в конец списка пользователя с
именем BUFER, моделирующего очередь к МКУ. Каждый транзакт, покидающий МКУ по
завершении обслуживания и освобождающий один канал, проходит блок UNLINK и
выводит один транзакт с начала списка (если список не пуст), направляя его в
блок с именем ENT1 на занятие канала в МКУ. .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP WAIT LINK Заметим, что для изменения дисциплины обслуживания на "позже пришел -
раньше обслужен" достаточно или заменить в поле B блока LINK FIFO на LIFO, или
записать в поле D блока UNLINK операнд BACK. Следует также обратить внимание на
то, что блоки QUEUE-DEPART для сбора статистики об ожидающих транзактах не
используются, так как почти все те же данные можно получить из статистики о
списке поль зователя. Рассмотрим еще один пример, иллюстрирующий
использование списков пользователя для организации нестандартных дисциплин обслу
живания. Пусть в одноканальной СМО с ожиданием требуется организо вать такую
дисциплину, при которой приоритет отдается заявкам с на именьшим временем
обслуживания. Такая модель будет иметь вид, пока занный на рис. 18. В
параметр TSRV поступающих в модель транзактов в блоке ASSIGN записывается
случайное время обслуживания, вычисляемое с использо ванием функции EXP. Если
устройство SYSTEM свободно, то блок GATE впускает транзакт в блок SEIZE, и
устройство занимается на время P$TSRV. Если же в момент поступления транзакта
устройство занято, то блок GATE направляет транзакт в блок LINK, который вводит
тран .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP UNLINK LINE,SFAC,1 Рис. 18 закт в список пользователя LINE,
упорядочивая транзакты по воз растанию времени обслуживания, записанного в
параметре P$TSRV. Блок UNLINK по освобождении устройства выводит с начала списка
транзакт с наименьшим временем обслуживания, обеспечивая тем самым заданную
дисциплину. Для управления
прогоном модели используются управляющие опера торы GPSS/PC. С одним из них -
оператором START - мы уже сталкива лись при рассмотрении блока TERMINATE.
содержит константу, задающую начальное значение счетчи ка
завершений. В признак
подавления формирования стандартного отчета по завершении моделирования. Если
поле B пусто, то по окончании прогона модели формируется отчет со стандартной
статистической информацией о всех объектах модели (см. разд. 5). Поле C не
используетсяи сохранено для совместимости со старыми версиями GPSS. Поле D может
содержать 1 для включения в отчет списков текущих и будущих событий. Если по ле
D пусто, то выдача в отчет содержимого этих списков не произво дится. (моделировать) устанавливает предел реально го времени,
отводимого на прогон модели. Если прогон не завершится до истечения этого
времени, то он будет прерван принудительно с вы дачей накопленной статистики в
отчет. Оператор SIMULATE имеет единственный операнд A, содержащий предельное
время моделирования в минутах, задаваемое константой. Оператор размещается перед
оператором START, начинающим лимитиро ванный прогон.
(установить значения генераторов) позволяет пе ред началом прогона установить
начальные значения генераторов слу чайных чисел RN, определяющие генерируемые
ими последовательности. оператора могут содержать начальные
значения генераторов соответственно RN1-RN7, задаваемые константами. Начальные
значения генераторов, не установленные операторами RMULT, совпадают с номе рами
генераторов. (сбросить) сбрасывает всю статистическую
инфор мацию, накопленную в процессе прогона модели. При этом состояние
аппаратных, динамических и запоминающих объектов, а также генерато ров случайных
чисел сохраняется, и моделирование может быть возоб новлено с повторным сбором
статистики. Оператор не имеет операндов. С оператором RESET связано различие
между относительным (СЧА C1) и абсолютным (СЧА AC1) модельным временем. Таймер
относительно го времени C1 измеряет модельное время, прошедшее после последнего
сброса статистики оператором RESET, а таймер абсолютного времени AC1 - модельное
время, прошедшее после начала первого прогона моде ли. Если не использовалось ни
одного оператора RESET, то значения этих таймеров совпадают. Оператор RESET
устанавливает таймер C1 в ноль и не влияет на таймер AC1. Оператор RESET
используется обычно при моделировании нестацио нарных процессов, когда требуется
собрать статистику по отдельным интервалам стационарности или исключить влияние
переходного периода на собираемую статистическую информацию. Пусть,
например, в модели, приведенной на рис. 18, необходимо отбросить статистику,
собираемую на первой тысяче транзактов. Это может быть сделано способом,
показанным на рис. 19. Первый оператор START начинает прогон модели длиной
1000 тран зактов (переходный период). Поскольку статистика, накопленная на этом
периоде, не используется, в поле B оператора указан признак подавления
формирования отчета NP. Оператор RESET сбрасывает накоп ленную статистику, не
изменяя состояния модели. Второй оператор START начинает основной прогон модели
с формированием отчета по за вершении прогона. .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP UNLINK LINE,SFAC,1 Оператор CLEAR (очистить) очищает модель, подготавливая ее к
повторному прогону. При этом сбрасывается вся накопленная в преды дущем прогоне
статистика, из модели удаляются все транзакты, и она приводится к исходному
состоянию, как перед первым прогоном. Уста навливаются в ноль сохраняемые
величины и матрицы, что следует учи тывать при использовании этих объектов для
хранения исходных дан ных. Исключение составляют генераторы случайных чисел,
которые не возвращаются к своим начальным значениям, что позволяет повторить
прогон модели на новой последовательности случайных чисел. Оператор не имеет
операндов. Оператор CLEAR используется обычно для организации нескольких
независимых прогонов модели на разных последовательностях случайных чисел. Перед
повторением прогона можно при необходимости переопре делить отдельные объекты
модели, например емкости многоканальных устройств. Пусть, например,
требуется повторить прогон модели, приведен ной на рис. 17, три раза при емкости
МКУ, равной 1, 2 и 3. Это мо жет быть выполнено так, как показано на рис. 20.
После каждой очистки модели оператором CLEAR оператор STORAGE устанавливает но
вое значение емкости МКУ с именем STO2. (закончить)
завершает сеанс 0работы с GPSS/PC и возвращает управление в операционную
систему. Оператор не имеет операндов. .7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
GENERATE100,FN$EXP WAIT LINK Как правило, управляющие операторы не включаются в
исходную программу, т.е. не имеют номеров строк, а вводятся пользователем
непосредственно с клавиатуры ПК.
| |