Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документ Microsoft Office Word.docx
Скачиваний:
92
Добавлен:
06.02.2016
Размер:
778.84 Кб
Скачать

13. Атрибуты узлов модели, транзактов; внутренние атрибуты событий в модели. Средства динамической отладки модели. Датчики псевдослучайных и случайных величин.

Использование параметров транзактов и узлов

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

Отсчет модельного времени всегда начинается с нуля, а его значения находятся в глобальной переменной timer. Единицы времени условны. Интервалы времени - это переменные с плавающей точкой.

Транзакты имеют параметры, некоторые из которых всегда доступны пользователю-разработчику модели:

t->iu0, t->iul, t->iu2, t->iu3 - произвольные целочисленные параметры, которые могут использоваться для различных целей, например чтобы пометить транзакт;

t->ruO, t->rul, t->ru2, t->ru3 - произвольные параметры, имеющие вид переменной с плавающей точкой;

t->ga - признак обслуживания транзакта вновь, который устанавливается операцией присваивания ему глобальной константы again, как это было показано при рассмотрении функции serv;

t->pr - приоритет транзакта;

t->ft - номер семейства, к которому принадлежит транзакт;

t->tx - параметр запоминает номер (индекс) точки пространства.

Номер точки позволяет определить ее координаты lat и Ion в массиве space.

Во время прохождения транзакта через узел номер этого узла находится в глобальной переменной next. Перечисленные ниже параметры узла доступны пользователю для анализа (но не для их изменения):

addr[next]->nc - число каналов в узле;

addr[next]->na - число транзактов, прошедших через узел на данный момент модельного времени;

addr[next]->tn - число транзактов, находящихся в узле в данный момент;

addr[next]->ts - среднее время обслуживания, подсчитанное на данный момент;

addr[next]->op - признак состояния узла типа key. Целочисленная переменная, принимающая значение true, если клапан открыт, или false - если он закрыт;

addr[next]->se - признак состояния узла типа delet. Целочисленная переменная, принимающая значение nil, если в узле нет уничтожающего транзакта;

addr[next]->kx - номер (индекс) точки, в которой находится узел типа creat, delet или proc. По номеру точки определяются ее координаты lat и lon.

Для анализа параметров любого узла можно использовать его номер n. Например, если транзакту необходимо проанализировать состояние узла типа delet, имеющего номер 5, и в случае отсутствия уничтожающего транзакта выполнить какой-либо оператор, он должен пройти через следующее выражение:

if (addr[5]->se == nil)

оператор;

причем сам транзакт в это время находится в произвольном узле. Факт входа транзакта фиксируется в глобальной переменной go и автоматически анализируется всеми функциями Pilgrim.

Параметры узлов можно наблюдать в процессе выполнения имитационной модели.

Все необычные ситуации, мешающие нормальному продолжению моделирования, фиксируются в глобальной переменной error. Моделирование может выполняться только тогда, когда error равна нулю. Значения этой переменной от 1 до 100 зарезервированы для нужд Pilgrim.

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

Если нет уверенности в том, что используются допустимые значения для определения номеров узлов при переходе транзактов из узла в узел, то самой последней строкой описания графа модели может быть строка fault(параметр), где параметр - любое число, например 123. В этом случае при возникновении ошибки координатор остановит модель, выведет накопленную статистику и сообщит код причины остановки модели - число 123.

Часто необходимо получить случайную величину в формате float, распределенную по какому-то закону. В системе Pilgrim есть стандартные 32-разрядные датчики псевдослучайных величин. В каждом узле имеется свой датчик, независимый от датчиков других узлов.

Введем в рассмотрение переменную пользователя типа float v. Связь с датчиками, осуществляется с помощью следующих функций:

v = normal(m,s) - нормальный закон распределения;

v = expont(m) - экспоненциальный закон;

v = unifrm(m,r) - равномерный закон на отрезке [m-r,m+r];

v = rundum() - равномерный закон на отрезке [0, 1];

v = erlang(e.z) - обобщенный закон Эрланга;

v = triplex(a,b,c)- треугольный закон распределения.

В данном случае использованы следующие обозначения входных параметров типа float:

m - математическое ожидание (в случаях normal, expont, unifrm);

s - среднеквадратичное отклонение (в случае normal);

е - матожидание величины одного элемента (в случае erlang);

r - максимальное отклонение (в случае unifrm);

z - количество отрезков z > 0 (в случае erlang);

а - минимальное значение (в случае triplex);

b - наиболее вероятное значение (в случае triplex);

с - максимальное значение (для triplex).

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