177 top(11): pay («ВозвратКредита», 19, S_bank, 20, none, 20, 12); //на слой 3 place; top(12): term («РазрешВыдачи»); rels(4); place; top(13): term («ЗаказВыполнен»); clcode supply(15, none, Max); place;
///СБЫТ ================================================ top(15): t->powr=1+rundum()*99;
//объем закупаемой партии t->summ=t->powr*The_price;
//стоимость закупаемой партии attach («СкладГотПродукции», t->powr, prty, 16); place; top(16): manage («ОтпускТовара», 17); place; top(17): pay («ОплатаПокупки», 20, t->summ, 21, none, 21, 18);//на слой 3 place; top(18): term («ТоварОплачен»); place;
///ДЕНЕЖНЫЕ ОПЕРАЦИИ ================================== top(19): send («Банк_90», t->k1, t->summ, t->dpr, 23); place; top(20): send («РасчСчет_51», t->k1, t->summ, t->dpr, 23); place; top(21): send («Клиент_62», t->k1, t->summ, t->dpr, 23); place; top(22): send («Поставщиик_60», t->k1, t->summ, t->dpr, 23); place; top(23): direct («Бухгалтерия», t->updown); //на верхний слой place;
/// ================================================== fault (123);
} modend («Run_061010_01.rep»,1,30,page); return (0);
}
Пример результата запуска показан нарис. 44.
НАЗВАНИЕ МОДЕЛИ:
Company
ВРЕМЯ
МОДЕЛИРОВАНИЯ:
731
Лист: 1
№ узла
Наименование узла
Тип узла
Точка
Загрузка (%=),
Путь(км)
M [t] среднее время
C [t] квадрат коэф.вар.
Счетчик входов и hold
Кол. кан.
Оcт. тр.
Состояние узла в этот момент
1
Заказы ag
-
-
14 0.16 54 1
1 открыт
2
Развилка_1 creat
-
-
0 1.00 53 0
1 закрыт
3
ЖдемКредит queue
-
%= 73.0 7
1.86 53 1
0 открыт
4
РазрешКредита key
-
%= 74.4 12 1.40 47 1
0 закрыт
5
ПереводКредита pay
-
-
0 1.00 53 1
0 530000.00 P
6
ЗапретВыдачи term
-
-
7 1.86 53 0
0 открыт
7
ПлатаПоставщика pay
-
-
0 1.00 53 1
0 530000.00 P
8
ОчередьЗаказов queue
-
%= 40.7 0
37.51 51 1
0 открыт
9
ВыполнениеЗаказ serv
-
-
13 0.10 51 2
1 открыт
10
Развилка_2 creat
-
-
0 1.00 50 0
0 открыт
11
ВозвратКредита pay
-
-
0 1.0 50 1
0 500000.00 P
12
РазрешВыдачи term
-
-
15 0.58 49 0
0 открыт
13
ЗаказВыполнен term
-
-
24 0.20 50 0
0 открыт
14
Клиенты ag
-
-
7 0.12 104 1
1 открыт
15
СкладГотПродукц attach
-
%= 3.7 0
43.13 103 1
0 1057 S
0 D
16
ОтпускТовара manage
-
-
0 1.00 103 1
0 открыт
17
ОплатаПокупки pay
-
-
0 1.00 103 1
0 476910.00 P
18
ТоварОплачен term
-
-
0 43.13 103 0
0 открыт
19
Банк_90 send
-
-
0 88.67 53 1
0 9960000.00 S
0.00 D
20
РасчСчет_51 send
-
-
13 0.68 103 1
0 6910.00 S
30000.00 D
21
Клиент_62 send
-
-
0 125.10 103 1
0 9523090.00 S
0.00 D
22 send
-
-
0 1.0 0
0 510000.00 S
0.00 D
23
Бухгалтерия direct
-
-
0 1.00 256 1
0 открыт
Рис. 44. Отчет запуска модели бизнес-процесса
Выводы:
1. Для создания имитационных моделей могут применяться CASE- средства, в которых предусмотрены специальные возможности для анализа и моделирования сложных систем на основе применения методологии структурного анализа. В системе Pilgrim эта возможность реализуется с помощью конструктора Gem.
2. Структурный анализ исследуемого процесса и построение графа имитационной модели возникает задача перехода между слоями, отображающими различную степень детализации описаний. Переходы между слоями в системе Pilgrim реализуются с помощью специальных узлов модели.
3. В случаях, когда необходимо обеспечить концептуальную декомпозицию описания, используется узел parent. Этот узел не выполняет никаких действий по обработке транзакта и при генерации программного кода просто заменяется своей декомпозицией.
4. В случаях, когда необходимо осуществить декомпозицию процессов с возможностью многократного использования детального описания процесса используются узлы типа pay, rent, down. С их помощью можно создать унифицированные фрагменты модели, которые могут использоваться узлами вышележащей плоскости модели.
Вопросы для самопроверки:
1. В чем состоит основное назначение конструктора Gem?
2. Какая методология положена в основу конструктора Gem?
3. Какие модели можно строить с помощью конструктора Gem?
4. Что такое декомпозиция?
5. Какие существуют разновидности декомпозиции?
6. Какую декомпозицию можно провести с помощью узла parent?
7. Какую декомпозицию можно провести с помощью узлов типа
pay, rent, down?
Литература по теме:
1. Емельянов А.А., Власова Е.А., Дума Р.В. Имитационное моделирование экономических процессов / Под ред. А.А. Емельянова. –
М.: Финансы и статистика, 2009. – 480 с.
Практические задания:
Соберите исполнительный модуль программной модели работы предприятия, рассмотренной в настоящей теме. Используйте приведенный исходный текст модели. Изменяя значения параметров, исследуйте зависимость выходных показателей от входных.
180
Тесты для самопроверки:
1. Методология структурного анализа представляет собой … а) рассмотрение множества показателей модели на основе выделения логически связанных их подмножеств б) проектирование системы путем выделения ее подсистем и их последовательного рассмотрения в) замену динамической модели процессов структурно связанным набором функциональных моделей
2. Результатом применения методологии структурного анализа является … а) сетевая модель б) линейная модель в) иерархическая модель г) несвязанная модель
3. Декомпозиция в Pilgrim представляет собой … а) детализацию узла графа модели в виде совокупности других узлов б) изучение узла графа модели путем разработки и прогонов другой модели в) разбиение множества входных параметров на иерархические подмножества г) разбиение множества выходных параметров на иерархические подмножества.
4. Узел parent … а) осуществляет вставку в модель узлов, указанных в его параметрах б) используется для повышения быстродействия программы в) не выполняет никаких действий и при генерации программного кода просто заменяется своей декомпозицией г) применяется для управления прохождением транзактов по графу модели
5. Узлы pay, rent down … а) нельзя использовать для реализации иерархических моделей б) применяются для построения моделей однотипных процессов в) не запоминают точки возврата отдельных транзактов на верхний слой г) не допускают перемещений транзактов на другие уровни модели
181
1 ... 6 7 8 9 10 11 12 13 14
Тема 12. Средства и приемы создания имитационных моделей Цели изучения темы:
познакомиться с понятием и примерами замкнутой системы;
получить представление о методике и приемах создания моделей замкнутой системы.
Задачи изучения темы:
изучить определение замкнутой системы;
рассмотреть задачу моделирования замкнутой системы на примере корпоративной информационной системы;
познакомиться с приемами, применяемыми для создания моделей замкнутых систем;
освоить приемы сбора данных с помощью имитационной модели.
Успешно изучив тему, Вы: получите представление о:
том, что называется замкнутой системой;
почему важно знать способы построения моделей замкнутых систем;
способах инициализации моделируемых процессов;
способах отладки имитационной модели;
будете знать:
типовые схемы «зарядки» моделей замкнутых систем;
узлы и сигнальные функции системы Pilgrim, применяемые в схемах «зарядки» моделей замкнутых систем;
приемы моделирования на примере модели корпоративной информационной системы.
Вопросы темы: 1. Моделирование замкнутых систем.
2. Определение нестандартных выходных параметров.
3. Отладка модели.
4. Получение гистограмм.
Вопрос 1. Моделирование замкнутых систем. Под
модельюзамкнутой системы понимается модель, в которой транзакты, будучи единожды сгенерированы, циркулируют в пределах графа модели, не погибая в терминаторах.
Такой моделью, например, может быть модель работы, группы пользователей корпоративной информационной системы с
182 компьютерной сетью в диалоговом режиме. Транзакт в этом случае имитирует запрос пользователя. Выйдя из узла, имитирующего работу пользователя, транзакт проходит по графу модели, имитируя обработку в системе, возвращается к пользователю
(узел), имитируя сформированный ответ, после чего вновь преобразуется в запрос того же пользователя.
Моделировать каждый новый запрос отдельным транзактом нельзя, так как нельзя рассчитать заранее время обработки запроса системой
(это случайная величина) и, следовательно, нельзя задать частоту генератора.
В этом случае модель может быть построена следующим образом:
Пользователи (или группы пользователей, в зависимости от сложности моделируемой системы) представляются одно- или многоканальными узлами типа serv (серверы).
Число каналов сервера соответствует числу пользователей, время обработки транзакта сервером соответствует времени подготовки пользователями запроса.
Конкретное состояние транзакта (запрос – ответ) фиксируется значением одного из его параметров.
Для зарядки транзактами серверов пользователей, принадлежащих к одному классу, используется единственный генератор, порождающий всего один транзакт. Далее транзакты размножаются с помощью узлов типа creat.
Так, если требуется смоделировать работу за терминалами
(клиентскими компьютерами) нескольких пользователей, причем работа каждого пользователя описывается своими временными характеристиками, то это может быть сделано следующим образом (рис.
45):
Рис. 45. Схема «зарядки» замкнутой модели
В этом графе каждый пользователь имитируется одним узлом модели типа serv. Текст программы на языке Pilgrim будет выглядеть так:
183 ag («Старт»,1,none, none,1.О,zero,zero,2); top (2): creat («Размножитель», none, Users, none, 4, 3); place; top (3): term («Терминатор»); cheg (1, none, none, modtime, zero, zero,3); place; top (4): t->ft = addr[4]->na + 5; t->ru0 = Think_time [addr[4]->na]; t->ru1 = Query_time [addr[4]->na]; queue («Распределитель», none, t->ft) ; place;
Значения переменных Users, modtime задают соответственно число пользователей и время моделирования, массивы Think_time и Query_time
среднее время обдумывания пользователем запроса и среднее время реакции системы на запрос (значения могут устанавливаться в начале программы вместе с описаниями переменных). Конструкция реализует следующую последовательность инициализирующих действий.
Запрос, сгенерированный узлом ag (узел 1), попадает в узел creat
(узел 2), который генерирует Users транзактов (по числу пользователей), не присваивая им номер семейства. Далее эти транзакты попадают в очередь (узел 4), где каждому из них присваивается свой номер семейства, равный номеру сервера, в который этот транзакт должен будет попасть после выхода из узла 2. Присваивание производится с помощью системной переменной addr[4]->na, в которой в каждый момент модельного времени хранится значение числа транзактов, прошедших через узел (в данном примере, через узел 4). Таким образом будет обеспечено автоматическое присвоению системной переменной) t-
>ft нужной последовательности номеров узлов-приемников.
В параметр транзакта t->ru0 заносится значение среднего времени задержки в сервере, моделирующем работу пользователя. Этот параметр используется при описании серверов пользователей (узлы с номерами из диапазона [5, Users + 4], где Users - число серверов). Кроме того, в параметр транзакта t->ru1 заносится значение среднего времени задержки запроса (обработки) в сервере, моделирующем процессор системы.
Транзакт, вышедший из узла ag и покинувший узел 2, переходит далее в терминатор (узел 3). В этом узле он инициирует выполнение сигнальной функции cheg, которая переустанавливает параметр узла ag, задающей средний интервал между двумя генерируемыми транзактами в modtime (что, по сути, означает отключение узла ag), и уничтожается.
184
Вопрос 2. Определение нестандартных выходных параметров.
В ряде моделей помимо выходных данных, собираемых автоматически системой Pilgrim относительно каждого из узлов графа модели, необходимо оценить также и ряд других. В частности, для систем замкнутого типа может представлять интерес время реакции моделируемой системы на пользовательский запрос. Наиболее информативным описанием случайной величины (каковой является в данном примере время реакции), как это известно из теории вероятностей, является ее распределение. Однако во многих случаях оказывается вполне достаточно ограничиться выяснением среднего значения (математического ожидания) этого параметра. Для оценивания среднего времени реакции системы на пользовательский запрос в замкнутой системе можно воспользоваться такими приемами.
1) Значение среднего времени реакции
р
T можно рассчитать на основании стандартного отчета с результатами моделирования системы
Pilgrim. Для этого можно воспользоваться следующим выражением:
1
,
р
о
T
T
где
о
T означает среднее время обдумывания пользователем ответа системы перед выдачей нового ей очередного запроса (вывод этого выражение весьма несложен).
2) Значенииt
р
T можно получить в явном виде как среднее значение нахождения узла key в закрытом состоянии, если прибегнуть к приему, который поясним на примере модели, рассмотренной выше.
Для получения нужного результата в модель нужно добавить дополнительные узлы типа key вместе с соответствующей логикой (рис.
46):
Рис. 46. Узел key как средство сбора данных
185
При использовании первого подхода каждому пользователю, который имитируется одним узлом типа
serv, придается дополнительный узел key, который служит только для целей измерений.
Транзакт (запрос к КИС) сначала попадает в узел key и запирает его с помощью сигнальной функции hold (5) (для примера выше). После обработки запроса, когда транзакт возвращается из модели КИС сервер, имитирующий пользователя, при входе в узел serv он открывает соответствующий узел key с помощью сигнальной функции rels(5) (для примера выше). В программной модели автоматически измеряется средний интервал нахождения узла key в закрытом состоянии, что и есть не что иное, как математическое ожидание, а также среднеквадратичное отклонение этой величины.
Рассмотрим следующий пример упрощенной модели КИС, граф которой включает схему зарядки, описанную ранее в настоящей теме, а граф, имитирующий обработку, состоит из одного узла типа queue, имитирующего очередь на обработку, и одного узла типа serv, имитирующего собственно обработку (Рис.):
Рис. 47. Пример модели КИС
В модели присутствуют четыре пользователя, представленные узлами П_1, П_2, П_3, П_4 типа serv. Для сбора данных о времени реакции системы на запрос пользователя в модель встроены узлы КП_1,
КП_2, КП_3, КП_4 типа key. Узлы 101, 102, 103 обеспечивают первоначальную зарядку транзактами узлов П_1, П_2, П_3, П_4 модели.
Для некоторой совокупности параметров модели (см. значения
186 параметров в тексте программы следующего вопроса настоящей темы) можно получить следующий результат (рис. 48):
НАЗВАНИЕ МОДЕЛИ:
КИС
ВРЕМЯ
МОДЕЛИРОВАНИЯ:
50001.00
Лист:
1
№ узла
Наименование узла
Тип уз ла
Точ ка
Заг руз ка(
%
=
),
П
уть(к м)
M
[
t]
с ред нее в
ремя
C
[t]
к вад рат коэ ф
.в ар.
С
четч ик в
ходов и hol d
К
ол.
к ан.
О
cт.
тр
С
остоя ни е узла в этот мом ент
101
Старт ag
-
-
1.00 0.00 2
1 1 открыт
102
Размножитель creat
-
-
0.00 1.00 4
0 1 закрыт
103
Стоп term
-
-
0.00 1.00 1
0 0 открыт
104
Распределитель queue
-
-
0.00 1.00 4
1 0 открыт
105
П_1 serv
-
%= 29.8 68.06 0.12 220 1
1 открыт
106
П_2 serv
-
%= 36.9 93.10 0.14 198 1
0 открыт
107
П_3 serv
-
%= 42.8 118.23 0.12 182 1
1 открыт
108
П_4 serv
-
%= 48.8 143.59 0.12 170 1
0 открыт
109
Очередь queue
-
-
92.64 0.28 768 1
1 открыт
110
КИС serv
-
%= 99.2 64.76 0.11 767 1
1 закрыт
115
КП_1 key
-
%= 70.2 160.18 0.12 219 1
0 открыт
116
КП_2 key
-
%= 63.4 160.10 0.12 198 1
0 закрыт
117
КП_3 key
-
%= 56.9 157.26 0.10 181 1
0 открыт
118
КП_4 key
-
%= 51.3 150.94 0.11 170 1
0 закрыт
Рис. 48. Результаты запуска модели КИС
Если теперь провести сопоставление значений параметров, полученных для каждого из четырех пользователей непосредственно с помощью узлов типа key и рассчитанных по приведенной выше формуле, то результаты будут следующими (рис. 49):
П
Тобд
ρ×100%
Треакции
Тобд×(1-ρ)/ρ
Key
1 68,06 29,8%
160,33 160,18 2
93,10 36,9%
159,20 160,10 3
118,23 42,8%
158,01 157,26 4
143,59 48,8%
150,65 150,94
Рис. 49. Время реакции КИС