СИМУЛА - универсальный процессо-ориентированный язык моделирования, страница 13

Оператор вида 'ACTIVATE' X 'AT'  T активизирует процесс в системное время, равное Т.

Если указано планирование с приоритетом 'PRIOR', то событие будет исполнено перед другими событиями, ранее запланированными на данный момент системного времени. При планировании без приоритета одновременные события исполняются в порядке, в котором они планировались.

При планировании событий можно задать не системное время, а событие через которое ли после которого необходимо запланировать событие. В обоих случаях время события Х полагается равным времени события для процесса Х. Если процесс Y не является активным или приостановленным процессом, то никаких действий оператор не производит, если необходимо сразу запустить процесс, то нужно выполнить оператор

‘ACTIVATE’ X ‘AT’ TIME ‘PRIOR’, где Х – активный процесс или оператор

‘REACTIVE’ X ‘BEFORE’ CURRENT, где Х – любой процесс, кроме завершенного.

Для того чтобы задержать исполнение некоторого процесса на некоторый интервал системного времени, используется оператор HOLD(T), где Т – некоторое арифметическое выражение. При этом текущая активная фаза данного процесса заканчивается, а его локальное управление останавливается перед оператором, следующим за HOLD.

Оператор HOLD(T) эквивалентен оператору

‘REACTIVE’ CURRENT ‘DELAY’ T.

В процессе работы имитационных моделей часто бывает необходимо отметить некоторое из ранее запланированных событий, если в ходе моделирования сложились условия, делающие невозможным их осуществление в намеченный момент системного времени.

Для отмены запланированных активных фаз процессов предусмотрен оператор CANCEL(X), где X – процесс, чья активная фаза должна быть отменена, т.е. процесс Х становится пассивным.

Для перевода текущего процесса в пассивное состояние используется оператор PASSIVATE, который переводит текущий активный процесс в пассивное состояние и его локальное управление устанавливается на следующий оператор.

Если перед тем, как остановить работу некоторого процесса, его необходимо поставить в очередь, то надо выполнить оператор WAIT (S), где S обозначает очередь, в результате текущий процесс встанет в очередь S и перейдет в пассивное состояние.

Статистические аспекты языка СИМУЛА

При разработке систем моделирования очень часто возникает необходимость создания процессов в случайные моменты времени, для задания различного рода случайных факторов при имитационном моделировании определен набор встроенных процедур, позволяющих задавать получение псевдослучайных чисел, распределенных по любому нужному закону.

Все процедуры случайной выборки в языке СИМУЛА используют один и тот же прием получения «главной выборки» из равномерного распределения на интервале (0,1).  Процедура главной выборки заменяет значение указанной целой переменной новым значением в соответствии с некоторым алгоритмом, определяемым в реализации языка ( см. приложение 1).

Каждая из перечисленных далее процедур осуществляет случайный выбор того или иного рода. Если явно не указано, выбор выполняется посредством одной процедуры главной выборки, т. е. процедуры с побочным эффектом продвижения на один шаг по указанной последовательности псевдослучайных чисел.

Для формальных параметров процедур случайного выбора в случае необходимости выполняется преобразование типа фактических параметров, кроме последнего фактического параметра, которым всегда должна быть переменная типа integer, указывающая последовательность псевдослучайных чисел.

Рассмотрим эти процедуры:

1.  Процедура psrand(u).

real procedure psrand (u);  name uinteger u;

Данная процедура предназначена для получения последовательностей псевдослучайных чисел, равномерно распределенных на интервале [0,1]. При многократной обращении к данной процедуре будет выдаваться последовательность а1, а2, …, аn, …, которая однозначно определяется начальным значением переменной u. Данная процедура называется процедурой главной выборки, с ее помощью получают все остальные распределения.