Изучение основ моделирования в среде GPSS World. Создание пользовательских переменных. Блоки и команды для манипуляции с сохранёнными данными, страница 2

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

При вычислении значений любых переменных можно использовать логические операнды: AND, OR, G, NE и др. или их символьные эквиваленты &, |, >, != и пр., а также различные СЧА и генераторы случайных чисел.

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

TimeDelay         VARIABLE     (RN124/20+50)

GENERATE     V$TimeDelay

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

Для обращения к значению переменных используются СЧА-ы, относящиеся к классу переменных:  V для вещественных и целочисленных переменных и BV – для булевских переменных.

Так, например, для обращения к булевской переменной из предыдущего примера нужно использовать запись вида BV$BoolVariable или V$TimeDelay (из предыдущего примера).

2  Использование логических ключей

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

Синтаксис команды прост:

LOGIC X           <имя>

Имя – имя логического ключа, как и в случае с метками, это может быть число или его символьный аналог.

X – логический оператор. Но в отличие от логических операторов команд TEST или GATE, может принимать только три значения: S для установления значения логического ключа в "Set" (или "True", если говорить в терминах логики),  R – "Reset" ("False") и I – для инвертирования значения.

Как и для блоков SAVEVALUE или ASSIGN, принимается следующее условие: при первом проходе через блок LOGIC происходит создание логического ключа, если он не был создан ранее. Или же можно задать ключ в команде INITIAL.

Например, так:

INITIAL           LS$LogSwitch

Таким образом, можно инициализировать логический ключ, задав состояние "установлен" ("set" or "True").

В дальнейшем можно изменить его состояние используя одну из следующих строк:

LOGIC R           LogSwitch

LOGIC I           LogSwitch

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

Для получения значения, определяющего состояния логического ключа, используют СЧА LS. Который возвращает одно из двух значений: 1 – если ключ установлен и 0 – в противном случае.

Так, для получения состояния логического ключа с именем LogSwitch, нужно написать: LS$LogSwitch.

3  Функции плотностей распределения

На сегодняшний момент, вы знаете несколько способов задания временных интервалов для появления или задержки транзактов.

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

Но, если вы помните из раздела математической статистики, существуют функции, позволяющие предсказать вероятность появления какого-либо события при определённом количестве испытаний. Такие функции называются функциями распределения. И существует  понятие функции плотности распределения вероятностной непрерывной случайной величины. При задании распределения в GPSS стоит говорить о плотности  распределения.

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

В среде GPSS World можно использовать эти функции, задавая их зарезервированными словами с определёнными параметрами.