Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Имитационное моделирование экономических процессов

.pdf
Скачиваний:
241
Добавлен:
01.05.2014
Размер:
6.69 Mб
Скачать

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

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

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

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

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

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

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

V = aormal(m,s) - нормальный закон расгфвделеиия; V = expont(m) - экспоненциальный закон;

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

V = nmdumO

- равномерный закон на отрезке [0,1];

V = erlang(e,z)

- обобщенный :}акон Эрланга;

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

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

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

131

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

г- максималыюе отклонение (в случае unifrm);

2 - количество отрезков z > О (в случае erlang); а - минимальное значение (в случае triplex);

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

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

4.2 ОТЛАДКА МОДЕЛЕЙ В ПРОЦЕССЕ ИХ ВЫПОЛНЕНИЯ

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

Итоговая таблица состоит из 12 столбцов, каждый из которых несет определенную смысловую нагрузку (табл. 4.1). Если в вбкодном документе меньше 12 столбцов, то их взаимное расположение не изменяется.

Таблица 4.1

Трактовка итоговой таблицы результатов моделирования

Наименование

п/п столбца

1 Хаузла

2Наименование

узла

3Тип узла

Содержание столбца

Номер узла

Смысловое название узла в конкретной модели

Один из типов: ag, serv, key, queue, term, creat, delet, proc, dynam, send, direct, attach, manage, pay, rent, down или parent

132

Наименование

п/п

столбца

4

Точка

Продолжение

Содержание столбца

Номер последней точки пространства, в которой нахо­ дится узел типа creat, delet или proc в момент оконча­ ния моделирования

5 Загрузка (%=)

Загрузка (коэффициент использования транзактами)

 

узлов типа serv или proc в процентах. Для узла key -

 

доля времени пребывания в закрытом состоянии

6Путь, км

7M[t]

среднее время

8c'[t]

квадрат коэффициентавариации

Если производятся пространственные перемещения узлов типа proc, creat или delet, то подсчитьшается пройденный путь. Для пространств типа geo путь счи­ тается в километрах

Среднее значение времени задержки транзакта в узле или иной интервал времени, зависящий от типа узла:

1)для serv - это среднее время пребывания в узле (оно может быть больше времени обслуживания у непри­ оритетных транзактов при p3=abs, т.е. при наличии приоритетных транзактов и правила абсолютных при­ оритетов);

2)для queue - среднее время задержки в очереди;

3)для ag - среднее время между двумя сгенерирован­ ными трайзактами;

4)для term или delet - среднее время существования транзакта;

5)для key - среднее время пребывания в закрытом состоянии;

6)для creat и dynam - всегда нулевое значение;

7)для proc при р4=попе, р4=погт, р4=ехро или p4=unif-среднее время пребывания в узле (оно может быть больше времени обслуживания транзакта при переводе узла в пассивное состояние);

8)для proc при p4=earth, Р4=р1апе или p4=cosmos -сум­ марное время пребывания транзакта в узлах dynam и proc с учетом возможных возвратов транзактов из proc в dynam

Отношение дисперсии временного интервала к квад­ рату его среднего значения - коэффициент вариации, возведенный в квадрат

133

Ns Наименование п/п столбца

9Счетчик входов и hold

Продолжение

Содержание столбца

Число транзакгов:

прошедших через узел;

сгенерированных транзакгов (для ag или creat);

уничтоженных (для term или delet);

выполнивших операцию hold из другого узла в отношении узла key

10

Количество

Число каналов в узле

 

 

каналов

 

 

11

Осталось тран-

Количество транзакгов, которые остались в узле на

 

зактов

момент завершения моделирования

12

Состояние узла

Состояние узла в момент окончания прогона модели:

 

в этот момент

узел может быть открыт (свободен), закрыт для входа

 

 

очередного транзакта, активен или пассивен (узел

 

 

ргос).

'

Вузле типа send может быть положительное сальдо на момент завершения модели (денежная сумма с буквой

S)и отрицательное сальдо (сумма с буквой D).

Вузле типа attach может быть остаток ресурса на мо­ мент завершения модели (денежная сумма с буквой S) и дефицит (сумма с буквой D).

Вузлах типа pay и rent указывается количество пере­ ходов транзакгов ^а нижние уровни - слои модели (на момент завершения модели)

Врежим трассировки модель можно перевести, используя меню модели или панель ее инструментов. Можно запустить модель сразу

врежиме трассировки. Окно фрагмента трассировки показано на рис. 4.1. Содержимое окна по умолчанию изменяется после каждого события. Однако число событий в модели может бьпъ очень велико, поэтому существуют следующие режимы трассировки, позволяю­ щие ускорить процесс отладки:

выйти в режим трассировки после конкретного события;

перейти в трассировку, если какой-то транзакт входит в определеншлй узел или выходит из него;

отслеживать путь конкретного транзакта по сложному графу модели;

выйти в режим трассировки по показанию модельного тай­

мера.

134

Процесс трассировки

X

Событие 399383 (есЬ 508)

 

Модельное время timer=2774.67

 

Транзакт (tcb 65954)

 

Параметр t->iu0=356

Параметр t->ruO=0.00

Параметр t-»iu1=0

Параметр t->ru1=31415.16

Параметр t->iu2=6

Параметр t->ru2=0.00

Параметр t->iu3=0

Параметр t-*ru3=0.00

Семейство t->ft=0

Выходит из узла 8 creat

Приоритет t->pr=1

Входит в узел 14 queue

 

 

 

• Число входов 11022

 

 

 

• Число транзактов 37

Планируемых событий 90

 

 

 

 

Число свободных tcb 1026

 

 

 

 

Число свободных есЬ 961

 

 

 

 

Команда трассировки еО

 

 

 

 

Стоп

i

Повтор

i

1 Пропустить i

Рис. 4.1. Диалоговое окно трассировки

Управление трассировкрй осуществляется из общего меню мо­ дельного окна.

4.3 ПРОГРАММИРОВАНИЕ УСЛОВИЙ ПРОХОЖДЕНИЯ ТРАНЗАКТА ПО ГРАФУ МОДЕЛИ

Рассмотрим случайный выбор из класса узлов. При построении моделей часто может встретиться ситуация, когда какой-либо объект имеет несколько подчиненных объектов, объединенных общим име­ нем класса, в который они попадают, и требуется решить, в какой из подчиненных узлов направлять транзакт. В этом случае можно по­ ступить, например, следующим образом: транзакт тем чаще направ­ ляется в узел, чем больший вес он имеет. Под весом в данном случае

135

понимается любая количественная характеристика объекта, по кото­ рой может производиться сравнение. На рис. 4.2 приведен пример фрагмента графа модели.

30

10

45

55

15

45

Шкала условных весов

Рис. 4.2. Фрагмент графа модели

Условие выбора узла с номером к вьп-лядит следующим образом:

кI-\

Вес.

к

Вес,

,^1 Сумма_весов

,_i Сумма_весов

гдер - случайная величина, равномерно распределенная на отрезке [0,1].

Условие нормирования записьюается так:

Сумма_весов = % Вес,,

/=1

Следует учесть, что

,_1 Сумма_весов

Приведенное соотношение следует из рис. 4.3, на котором пока­ зано, как реализовано дискретное распределение вероятностей. За­ штрихованные прямоугольники изображают отношение веса каждо-

136

го объекта к общей сумме весов (весовую долю); пунктирные линии определяют границы интервала, при попадании в который величи­ ны р в данном примере будет выбран узел 3. Вероятность выбора узла 3 самая высокая, так как он имеет наибольший вес.

Y/ п

1 _ .

 

 

 

 

 

45

 

 

 

 

15

 

 

 

 

55

 

 

 

 

AS

 

 

 

 

 

-ID­

 

 

 

30

 

 

 

 

 

1

2

3

4

5

6

 

 

 

 

 

Номер узла

Рис 4.3. Схема выбора узлов по их условным весам

Функция Number, определяющая номер выбираемого узла, пока­ зана ниже. Входными параметрами являются массив весов, число узлов и суммарный вес. Функция возвращает номер элемента мас- :ива весов.

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

int Number

(float

*weight, i n t

n, float sum)

i{n t i ,

k;

 

 

float p, pO;

 

 

pO=0.0;

 

// Датчик случайных чисел Pilgrim

p=rundum();

 

 

//на отрезке

[О, 1]

137

}
return
}

for (i=0;

i<n; i++)

 

{

 

 

k=i;

p >= pO) && ( p

<= pO+weight[i]/sum

if ((

break;

 

else

+= weight[i] /

sum;

pO

(k+1);

Ha рис. 4.4 представлена схема выбора дальнейшего пути про­ движения транзакта в зависимости от значения некоторого его пара­ метра. В этом случае блок выбора номера следуюп^его узла с ис­ пользованием параметра транзакта t->iuO может выглядеть сле­ дующим образом:

Возможные значения параметра транзакта t->iuO:

Номер_узла_1 •= 41 queue 41

Номер_узла_2 = 56 queue

Узвл_ветвления:

 

56

 

 

102

Номер_узла_3 = 68 queue

 

 

 

6S

queue

Номвр_узла_4 = 34

queue

101

 

34

 

 

Номер_узла_5 = 29 queue 29

Номер_узла_6 = 11 queue 11

Рис. 4.4. Схема выбора пути в соответствии с параметром транзакта

138

top{ Номер_узла_ветвления ):

 

switch( Параметр транзакта )

 

{

;break;

сазе(значение_1) :t->iuO= (Номер_узла_1)

case {значение_2) :t->iuO={Hoмep_yзлa_2)

/break;

case (значение m) :t-*iuO=(Номер узла rti) ;break;

} ~ ~ ~

Тип_узла_ветвления(Параметры_узла, t->iuO); place;

Существуют следующие рекомендации по нумерации узлов со­ ставных объектов одного класса. Если в модели имеется несколько принадлежащих к одному классу объектов, каяздый из которых представлен несколысими узлами, то целесообразно нумеровать уз­ лы, относящиеся к каждому объекту, таким образом, чтобы номера соответствующих узлов разных объектов были функцией от номера объекта данного класса фис. 4.5). В этом случае типовые блоки об­ работки транзактов в одних и тех же узлах разных объектов можно оформить в виде процедур, вызываемых с параметром «Номер объ­ екта», вместо того чтобы переписывать одни и те же операторы об­ работки, изменяя лишь номера узлов. Таким образом, для каждого класса объектов, входящих в модель, могут быть составлены наборы стандартных модулей обработки транзактов, что значительно упро­ стит программирование модели.

1^

 

±

_jr^]

queue _ ^

key ) !

queue

1 И

/ 1 2 \

^^ I

7"ИЛ

 

queue

 

queue

 

13

 

 

Объект 1

Объект т

 

т

 

 

Рис 4.5. Пример объектно-зависимой нумерации узлов: *1=10т+1; А2=10т+2; Л3=10т+3

139

4.4 ОСОБЕННОСТИ ЗАМКНУТЫХ МОДЕЛЕЙ КОРПОРАТИВНЫХ ИНФОРМАЦИОННЫХ СИСТЕМ

Под замкнутой моделью корпоративной информационной сис­ темы (КИС) будем понимать' модель системы, работающей в режи­ ме «запрос-ответ», в которой транзакты, единожды сгенерирован­ ные, циркулируют в пределах графа модели, не погибая в термина­ торах. Например, это может быть работа группы пользователей с компьютерной сетью в диалоговом режиме. Транзакт - это запрос пользователя. Выйдя из генератора, транзакт проходит по графу мо­ дели и постепенно, по мере работы IGiC, превращается в ответ и возвращается к пользователю, после чего вновь начинает играть роль запроса того же пользователя.

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

пользователи (или группы пользователей, в зависимости от сложности моделируемой системы) представляются одноили мно­ гоканальными узлами типа serv (серверы);

число каналов сервера соответствует числу пользователей, время обработки транзакта сервером соответствует времени подго­ товки пользователями запроса;

приписываемая транзакту роль запроса или ответа обозначает­ ся в одном из его п^аметров;

для зарядки транзактами серверов пользователей, принадле­ жащих к одному классу, используется единственный генератор, по­ рождающий всего один транзакт. Далее транзакты размножаются с помощью узлов типа creat.

Ниже представлены варианты зарядки модели транзактами.

1. Зарядка одного многоканального сервера (рис. 4.6). Описание узлов имеет следующий вид:

ад("Один транзакт",1,попе,попе,1.0, zero,zero, 2);

top(2): creat("Размножение",4,Users, none,4,3); place;

top(3): term("Выключение");

140