- •2. Цели и задачи имитационного моделирования; предметные области применения.
- •3. Хронологические данные по развитию методов им.
- •4. Основные определения теории им.
- •9. Инициализация модели. Структурные операторы forward и network. Функции modbeg и modend.
- •10. Основные операторы описания узлов графа: serv, gueue, ag, term, create, delete, key, dynam, proc, send, direct.
- •12. Операторы динамического управления генераторами, процессами и планами. Ветвление по условию и вероятностные мультиветвления: описание условий.
- •Сигнальные управляющие функции
- •13. Атрибуты узлов модели, транзактов; внутренние атрибуты событий в модели. Средства динамической отладки модели. Датчики псевдослучайных и случайных величин.
- •14. Отображения динамики управляемого процесса, динамики очереди, динамики потока транзактов. Подсчет статистических результатов моделирования.
- •16. Кибернетический подход к организации экспериментальных исследований сложных объектов и процессов.
- •17. Регрессионный анализ и управление модельным экспериментом. Вычисление коэффициентов регрессии.
- •18. Регрессионный анализ и управление модельным экспериментом. Вычисление коэффициентов регрессии.
- •19. Факторный эксперимент и метод крутого восхождения.
- •20. Факторный эксперимент и метод крутого восхождения.
- •21. Особенности замкнутых моделей корпоративных информационных систем
- •22. Метод Монте-Карло и проверка статистических гипотез
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).
При обращении к одной из этих функций используется датчик того узла, в котором находится транзакт.