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

Системные переменные

В системе моделирования определено небольшое количество об­щесистемных переменных, при помощи которых осуществляется управ­ление моделированием и отслеживается состояние модели.

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

Исключение составляют следующие переменные, управляющие вы­ходной печатью по ходу моделирования:

bool trace, ключ включения трассировки

errtest; ключ расширенной (аварийной) выдачи

Далее будем давать определение переменной и приводить ее описание.

Для отсчета относительного времени на очередном шаге мо­дельного эксперимента используется переменная, устанавливаемая в момент сброса статистики:

doubleresettime; время последнего сброса статистики

Переменная "СИСТЕМНОЕ ВРЕМЯ"- численная величина, относи­тельно которой синхронизируются все события в модели. При осу­ществлении событий системное время может либо оставаться неиз­менным, либо увеличиваться.

double systime; системное время

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

event ievemax; последнее выполняемое событие

"ТЕКУЩЕЕ СОБЫТИЕ" - событие, связанное с перемещением ак­тивного транзакта.

event sysevent; текущее событие

Служебная переменная, устанавливающая число транзактов дос­тупных в модели:

int itransmax; количество транзактов вdelist

"АКТИВНЫЙ ТРАНЗАКТ" - транзакт, продвигающийся по модели в данный момент выполнения программы. Он определяется переменной:

ptransact trans; ссылка на продвигаемый транзакт

Следующие переменные задают основные системные списки тран­зактов:

plistt delist, ссылка на пассивный буфер

current, ссылка на цепь текущих событий

future; ссылка на цепь будущих событий

Объекты системы моделирования помещаются в списки, задавае­мые переменными:

plistq quelist; ссылка на сист. список очередей

plistf faclist; ссылка на сист. список приборов

plists stlist; ссылка на сист. список накопителей

plisth histlist; ссылка на сист. список гистограмм

Транзакты, ожидающие появления некоторого сигнала, события, собираемые в ансамблях, помещаются в списки, определенные пере­менными:

array<min_signal,max_signal,plistt> signlist: ссылки на списки транзактов, ожидающ. сигналов

array<1,evemax,plistt> ass;ссылки на списки собираемых ансамблей

array<1,evemax,plistt> waitl; ссылки на списки транзактов, ожидающ. событий

Списки, задаваемые пользователем, помещаются в общий список или список списков:

listl userlist; список списков пользователя

Следующие переменные являются служебными:

array<1,evemax,bool> waitevent; признаки совершения событий

array<1,evemax,int> maxevent; счетчики выполнения событий

longV0, источники генераторов случайных чисел

V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15;

double eventall; общее число совершившихся событий

ofstream outfile; основной выходной файл

ofstream f; вспомогательный выходной файл

2 Принципы и методы построения моделей

2.1 Создание транзактов

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

Прежде чем транзакты станут доступными к перемещению в мо­дели, они должны быть созданы.

В модели с единственным продвигаемым (активным) транзактом связывается ссылка trans. Если ее значение равноnil, то в моде­ли или нет транзактов вообще, или они находятся в одном из спис­ков (по ссылкам:current,future,waitl(массив списков), списки прибора, накопителя).

Создаваемые транзакты поступают в модель из списка delist, а после завершения своего пути в модели возвращаются в него об­ратно.

Ввод транзакта в модель осуществляется функцией void create(double r), её единственный параметр задает интервал времени, че­рез который в систему войдет следующий транзакт. Величина "r" может быть константой или переменной, задаваться функцией. В за­висимости от способа определения "r", функцияcreateможет вы­полнять роль генератора транзактов с различными (произвольными) законами распределения интервалов между моментами их поступления в модель. Все события, содержащие функциюcreate, должны быть инициализированы при создании модельной среды. Для этого исполь­зуется функцияvoid initcreate(event e,double r), гдеe- номер события,содержа­щего функциюcreate(r),r- время поступления первого транзак­та, создаваемого функциейcreate(r). Если же необходимо обес­печить одновременный выход транзактов в событиеe, то функцияinitcreate(e,r)выполняется соответствующее количество раз.

Пример 1.1. Ввод транзактов в модель осуществляется каждые 5 единиц модельного времени

#include "simc.h"

voidmain() {

...;

initcreate(4,0); Инициализация события 4

...;

while(systime<1000) {

plan();

switch(sysevent) { Выбор системного события

case 1: ...; break;

...: ...;

case 4: create(5); break; Создание транзактов

...: ...

}

}

printall();

}

Пример 1.2. Транзакты поступают в модель по закону нормаль­ного распределения со средним 4.0 и дисперсией 1.5 .

#include "simc.h"

voidmain() {

...;

initcreate(3,0); Инициализация события 3

...;

while(systime<1000) {

plan();

switch(sysevent){

...: ...;

case 3: create(randnorm(4.0,1.5,v1)); break;

...: ... v1 - источник генератора случайных чисел

}

}

printall();

}

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