С помощью данной переменной можно осуществлять контроль за длительностью нахождения транзактов в очереди. Например, организовать ветвление, при котором происходит проверка на время нахождения транзакта в очереди, если время больше 12 единиц модельного времени, то следующие транзакты просто уничтожаются.
При вычислении значений любых переменных можно использовать логические операнды: AND, OR, G, NE и др. или их символьные эквиваленты &, |, >, != и пр., а также различные СЧА и генераторы случайных чисел.
Так например, можно случайным образом генерировать время появления очередного транзакта. Это можно реализовать следующим образом:
TimeDelay VARIABLE (RN124/20+50)
GENERATE V$TimeDelay
Исходя из данной записи, можно сказать, что транзакты будут генерироваться с интервалами от 50 до 100 единиц модельного времени.
Для обращения к значению переменных используются СЧА-ы, относящиеся к классу переменных: V для вещественных и целочисленных переменных и BV – для булевских переменных.
Так, например, для обращения к булевской переменной из предыдущего примера нужно использовать запись вида BV$BoolVariable или V$TimeDelay (из предыдущего примера).
Раз уж зашла речь о логических выражениях, то перейдём к рассмотрению блока 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.
На сегодняшний момент, вы знаете несколько способов задания временных интервалов для появления или задержки транзактов.
Например, с помощью задания полуинтервала и отклонения в соответствующих операндах блоков. Или же с помощью значения, возвращаемого функцией. И т.д.
Но, если вы помните из раздела математической статистики, существуют функции, позволяющие предсказать вероятность появления какого-либо события при определённом количестве испытаний. Такие функции называются функциями распределения. И существует понятие функции плотности распределения вероятностной непрерывной случайной величины. При задании распределения в GPSS стоит говорить о плотности распределения.
Существует достаточно много функций описывающих плотности распределения, для описания конкретной последовательности. Так, например, время прихода покупателей в магазин можно задать функцией экспоненциального распределения, а время задержки на обслуживание – распределением Пуассона.
В среде GPSS World можно использовать эти функции, задавая их зарезервированными словами с определёнными параметрами.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.