Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МиАПО / SIMC_dorab.doc
Скачиваний:
13
Добавлен:
07.02.2016
Размер:
756.22 Кб
Скачать

2.13 Ансамбли

2.13.1 Создание ансамблей. Функцияsplit

Транзакты могут вводиться в модель как функциями createиinitcreate, так функциейvoid split(int n,event e), гдеn- число создавае­мых транзактов,e- номер события, в которое направляются вновь созданные транзакты. Активный транзакт, на который указывает ссылкаtrans, называется транзактом-родителем, а созданные тра­закты - потомками.

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

2.13.2 Сбор членов ансамбля. Функцияassemble

Функцией void assemble(int n) осуществляется сборnчленов ансамбля. При входе первого члена ансамбля в событие, содержащее функциюassemble, он помещается в системный списокass[sysevent].

Следующие члены этого ансамбля выводятся функцией assembleв списокdelist.

При входе n-го члена ансамбля в событие, содержащее функциюassembleпервый член собираемого ансамбля удаляется из спискаass[sysevent] и помещается в списокdelist, аn-ый член ансамбля продолжает продвигаться по модели дальше.

2.13.3 Изменение приоритета всех членов ансамбля. Функцияpriority

Для изменения приоритета активного транзакта и всех тран­зактов - членов того же ансамбля служит функция void priority(prtyrange p), гдеp- новое значение приоритета. При этом остальные члены ан­самбля перемещаются в списках в соответствии с новым значением приоритета.

Назначение приоритета отдельному транзакту производится простым присваиванием:

trans->prty=<новый приоритет>;

2.13.4 Изменение значения параметра всех членов ансамбля. Функцияparmans

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

2.14 Генераторы случайных чисел

В процессе моделирования почти всегда необходима генерация случайных величин. Для этого в системе существуют функции:

double rand01(long& v)- генератор случайных чисел, равномерно распреде­ленных в интервале [0;1).v- число-"источник".

double randab(double a, double b, long& v)- генератор случайных чисел, равномерно расп­ределенных в интервале [a;b).v- число-"источник".

double randexp(double lambda, long& v)- генератор экспоненциально распределен­ных случайных чисел с интенсивностьюlambda.v- число-"источ­ник".

double randnorm(double xmean, double disp, long& v)- генератор случайных чисел, распре­деленных по нормальному закону со среднимxmean и дисперсиейdisp.v- число-"источник".

Пример 14.1. Присвоение переменнойrзначения случайной величины, равномерно распределенной в интервале [4;7)

r=randab(4.0,7.0,v)

Закон распределения случайных чисел может быть задан табли­цей. Для этого в системе определен тип "таблица" следующим обра­зом:

struct table {

array<1,hint,double> x,p;

hint2ihint;

};

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

Для дискретного распределения ihintсоответствует количест­ву значений, которые может принимать случайная величина.h- массив значений,p- массив вероятностей, причемp[1]- вероят­ность присвоения случайной величине значенияx[1],p[2]- веро­ятность присвоения значенияx[2]при условии, что ей не присвое­но значениеx[1], и т.д., так чтоp[ihint]=1.0(вероятность присвоения случайной величине значенияx[ihint]при условии, что она она не приняла ни одно из предыдущих значений.

Реализует дискретное табличное распределение функция double randdtable(table t, long& v), гдеt - таблица,v- число-"источник".

Для непрерывного табличного распределения генератор - функ­ция double randtable(table t, long& v)(t- таблица,v- "источник") - дает случай­ные числа, с вероятностямиp[i]попадающие в интервалы отх[i-1]дох[i]. При этом в таблице должно бытьр[1]=0.0.

Соседние файлы в папке МиАПО