№ 5 (47) 2013
А. А. Емельянов, докт. экон. наук, профессор Национального исследовательского университета «МЭИ», г. Москва Е. А. Власова, зам. главного редактора научной редакции МФПУ «Синергия», г. Москва Н. Н. Прокимнов, канд. техн. наук, доцент МФПУ «Синергия», г. Москва
Н. З. Емельянова, канд. экон. наук, доцент Национального исследовательского университета «МЭИ», г. Москва
технология программного моделирования и управления моделями в системе Actor Pilgrim
Статья содержит методические разделы и предназначена для подготовленных читателей, имеющих начальный опыт работы с системой имитационного моделирования Actor Pilgrim, а также знакомых с публикациями [1-4] в журнале «Прикладная информатика».
введение
Имитационное моделирование — один из эффективных инструментов предварительной проверки решений, реализуемых в некотором проекте. Ошибки в определении мощностей ресурсов проектируемой системы, а также алгоритмов их использования могут привести к существенному ухудшению ее пользовательских параметров. В практической работе с моделирующей системой часто необходимо использовать параметры акторов и узлов, а план эксперимента зачастую требует динамического изменения или настройки этих параметров без остановки модели. Также иногда требуется создавать нестандартные средства отображения информации для неподготовленного конечного пользователя.
Рассмотрим корректную подготовку пакета Actor Pilgrim к работе для создания типовых моделей. Разработку имитационной модели необходимо вести с использованием инструментальной среды C++, поскольку в ней есть хороший компилятор и удобные средства для редактирования программно-
го текста модели, генерируемого графическим конструктором. Хорошим подспорьем для начинающего разработчика имитационных моделей (студента или аспиранта) представляется студенческая оболочка MS Visual C++ Express Edition (начиная с версии 2008 г.), позволяющая значительно облегчить рутинный труд по проектированию, созданию и эксплуатации имитационной модели, которая является сложным программным продуктом.
Предположим, что читатель установил MS Visual C++ Express Edition на свой компьютер. Многие программные модули пакета Actor Pilgrim целесообразно поместить непосредственно в файловую структуру этой оболочки.
Рассмотрим рис. 1. Слева показаны фрагменты файловых структур Visual C++ Express Edition и Windows (рис. 1а), справа — фрагмент папки Actor Pilgrim System Simulator (рис. 1б). Обычно пакет устанавливается один раз. В каждой новой версии Actor Pilgrim его актуализированные модули содержатся на компакт-диске. Поэтому любая инсталляция или актуализация пакета завершается перемещением некото-
№ 5 (47) 2013
Visial C++ Express Edition
■ Common7
■ VC
■ Bin
■ Include ч
■ Lib <
Перенос файлов
Windows
■ System32
Actor Pilgrim System Simulator
■ GeoMaps
■ Gem
■ Projec Files
— Pilgrim.h
— Simulate.h
— Pilgrim.lib
<« MyWindow.dll
б
Рис. 1. Инсталляция пакета Actor Pilgrim в Visual С++ Express Edition: фрагмент Visual С++ (а) и Windows на диске C; фрагмент Actor Pilgrim (б)
рых модулей из папок Actor Pilgrim в папки Visual C++ и Windows1:
• модули Pilgrim.h и Simulate.h — в папку \VC\Include;
• модуль Pilgrim.lib — в папку \VC\Lib;
• модуль MyWindow.dll — в папку Windows\System32.
Естественно, одноименные модули должны быть заменены модулями Actor Pilgrim. Работоспособность Visual C++ при этом не пострадает.
Далее рассмотрим три возможных варианта проекта с учетом данных предпосылок об использовании оболочки Visual C++:
• типовой проект модели, в которой весь сервис настраивается «по умолчанию» (рабочий вариант, основной для профессионалов);
• проект модели с диалоговой корректировкой параметров в процессе ее выполнения;
• проект модели с функциональным окном, предназначенным для конечного пользователя (непрофессионала в моделировании).
1 В разных версиях Windows XP/7/8 имя папки System32 стандартное. В разных версиях Visual C+ + Express Edition имена папок Common7, VC, Include и Lib также не меняются. Перемещение модулей делается в режиме администратора.
1. Типовой проект модели
Типовой вариант проекта, несмотря на его простоту, можно рекомендовать для широкого практического использования [5]. Полученные с его помощью имитационные модели можно использовать в случаях, когда необходимо провести эксперименты с дискретно-непрерывными моделями сложных объектов для получения и отслеживания их динамики в экстренных ситуациях, связанных с рисками, натурное моделирование которых нежелательно или невозможно.
Приступим к сборке файлов учебного проекта Example01. Вначале создадим папку с именем d:\Samples. Далее подготовим текст имитационной модели в терминах Actor Pilgrim вручную или с помощью графического конструктора GEM и поместим полученный cpp-файл в папку d:\Samples под именем Test-Expo.cpp ( [6], с. 17, 47-49). Программный текст модели представлен на листинге 1.
Больше для разработки модели ничего самим помещать в эту папку не нужно: все нужные действия выполнит Visual С++, создавая вспомогательные папки, компилируя и помещая в них необходимые файлы, пока не будет получена программная имитационная модель в виде ехе-файла.
65
§ §
s I
«
о ¡
о &
а; a¿
S*
О U
il "S
«
S S
I
а
№ 5 (47) 2013
Листинг 1
Текст модели Test-Expo.cpp
Е
U ^
Si is
I
со i 1 if
I t
s
I
0
1
I
0 &
1
0
is
1
#include <Pilgrim.h> double Tinp = 10.0; double Tser = 5.0; long Chen = 1;
forward {
modbeg ("Модель обслуживания none, 2, none, none, 6);
// Интервал между заявками
// Интервал обслуживания
// Число каналов обслуживания
// Блок "Акторная модель"
100000000.0, (long)time(NULL)
actor
network {
top(2) top(3) top(4)
("Жители поселка", 1, none, expo, Tinp, zero, zero, 2 ); (dummy,standard) // Граф модели
queue ("Комната ожидания", none, 3); place;
serve ("Парикмахер", Chen, none, expo, Tser, zero, zero, 4) place;
term ("Касса"); place; (123);
fault }
modend ("Результаты.doc
return 1; }
1, 24, page)
Далее вызываем Visual С++, например, посредством панели задач с помощью иконки
и создаем рабочее пространство проекта с именем Example01. Для этого из главного меню выбираем следующую цепочку опций: Файл ^ Создать ^ Проект ^ Общие ^ Пустой проект.
После этого, не выходя из данного режима, выполняем два действия:
1) в окошке Имя задаем имя проекта — Example01, и в результате создается Имя Решения — тоже Example01;
2) в окошке Расположение выбираем место расположения проекта d:\Samples, в этом может помочь кнопка Обзор... (изменить папку).
После описанных действий в папке d:\Samples кроме файла Test-Expo.cpp появится рабочая папка Example01 и высветится новый пустой проект (рис. 2).
Обозреватель решений - Решение "ExampleOl" (проектов: 1) X
ЩАМ
| Решение "Ехатр1е01" (проектов; 1) □■■■ |Ща Ехагпр1е01
Заголовочные файлы I И Файлы исходного кода I ^ Файлы ресурсов
еватель решении
Окно классов .^Диспетчер свойств
Рис. 2. Новый пустой проект: решение ExampleOl
66 у
№ 5 (47) 2013
Далее начинается сборка проекта. Для определенности полагаем, что пакет Actor Pilgrim находится в папке d:\Actor Pilgrim System Simulator. Необходимо выполнить следующие действия:
1. Включаем в проект файл исходного кода Test-Expo.cpp. Для этого правой кнопкой мыши нажимаем позицию Файлы исходного кода, плавно переходим в опцию Добавить и нажимаем левой кнопкой мыши позицию Существующий элемент. В результате автоматически вызывается Проводник. Далее выбираем файл d:\Samples\ Test-Expo.cpp, дважды щелкаем левой кнопкой мыши, и имя Test-Expo.cpp появляется в окне состава проекта (рис. 3).
2. Включаем ресурс пакета Actor Pilgrim. Правой кнопкой нажимаем Файлы ресурсов, плавно переходим в Добавить и нажимаем левой кнопкой мыши Существующий элемент. Аналогично п. 1 включаем в проект файл d:\Actor Pilgrim System Simulator 2012\Project Files\Pilgrim.res (рис. 3).
3. Включаем библиотеки Actor Pilgrim. Правой кнопкой мыши нажимаем на заглавную пиктограмму Example01 и включаем в проект файл d:\Actor Pilgrim System Simulator 2012\Project Files\Pilgrim.lib (рис. 3).
s
После этого дважды щелкаем левой | кнопкой мыши по имени Test-Expo.cpp, ко- 2 торое появилось в окне после действия 1, | и полностью подготовленный проект отображается на экране, как показано на рис. 3. а:
п ■»
В левой части экрана видно, что в состав §
проекта включены три файла: Test-Expo.cpp, | Pilgrim.res и Pilgrim.lib.
Объединение файлов в составе проекта а;
не означает их автоматическую компиляцию ^
и сборку в виде выполняемой программы, §
поэтому после подключения всех файлов |
выполним компиляцию модели. ^
Существуют два типовых способа компи- и
ляции и выполнения модели: |*
Способ 1. Используется при отладке мо- |
дели. Из главного меню выполним последо- §
щ
вательно действия: ^
Построение ^ Перестроить Example01. ^
Если в модели не обнаружены Ошибки, и есть только Предупреждения, то модель готова к выполнению. Простейший вариант запуска таков. Из главного меню выполним последовательно действия:
Отладка ^ Запуск без отладки.
На экране появляется главное окно оболочки Actor Pilgrim с иконкой .
Файл Правка Вид
Щл Ш-М У i
Проект Построение Отладка Сервис Окно
HL Ча С& I «? - -М^М I ► Debug
\щ % ^ А* I im I - % I□ q, С* £ §> Ol _
Обозреватель ре... т ^ X
mm Lp
в-
I Решение "ExampleOl" (г ExampleOl СЗ Заголовочные ф. I □ Файлы исходного
..... cjj Test-Expo.cpp
У Файлы ресурсов ijp Pilgrim.res Pilgrim.lib
В-
в-
Test-Expo.cpp'
(Глобальная область)
□ #include <Filgrim.h>
double Tinp = 12.0; // Инге!
double Тзег = 10.0; // Инте|
long Chen =1; // Чтлслс
forward // Нача
{
ir.odteg ("Парикмахерская", 4,
actor ("Жители посёлка", 1,
Рис. 3. Состав подключаемых к проекту ExampleOl файлов
V 67
№ 5 (47) 2013
Далее из главного меню выполним:
Результаты ^ Динамика задержек в очереди,
а далее также через главное меню запустить модель:
Моделирование ^ Запуск модели.
Способ 2. Используется после отладки модели, чтобы далее можно было работать с моделью без пакета Actor Pilgrim на любом компьютере, используя только исполняемый программный модуль Example01.exe.
Из главного меню выполним последовательно действия:
Построение ^ Пакетное построение.
Далее появится окно Пакетное построение, где нужно выбрать опции
Выделить все ^ Перестроить.
Если в модели не обнаружены Ошибки и есть только Предупреждения, то готовые ехе-файлы находятся в папках проекта:
d:\Samples\Example01\Debug\Example01. exe — отладочный вариант;
d:\Samples\Example01\ Release\Example01. exe — рабочий вариант.
Далее запускаем любой из этих файлов, и на экране появляется главное окно оболочки Actor Pilgrim. Запуск работы модели осуществляется, как в способе 1.
Итоговые результаты моделирования выводятся в файл, указанный в операторе modend, в виде алфавитно-цифровой таблицы, доступной из всех текстовых редакторов для дальнейшей обработки (табл. 1).
Таблица включает 11 строк, трактовка информации в которых вполне очевидна.
Замечание 1. Во всех случаях модель запускается по умолчанию в самом быст-
е ¡E
0
Чч
U ^
Si
ES §
«
1 s i S
!
t
«
S
S
i
12
о ¡
5
0
6
1
о §
Таблица 1
Трактовка итоговой таблицы основных результатов моделирования
№ Наименование столбца Трактовка (расшифровка)
1 No узла Номер узла, присвоенный разработчиком
2 Наименование узла Условное название узла (до 15 символов)
3 Тип узла Одно из обозначений: actor, attach, create, destroy, direct, down, dynamo, key, manage, parent, pay, produce, queue, rent, send, serve, term
4 Точка Точка пространства, в которой находится узел на момент завершения модели
5 Загрузка, % (путь, км) — загрузка в узлах attach, produce, serve, key; — путь при перемещениях узла produce
6 M[t] среднее Математическое ожидание времени пребывания акторов в узле: M[t]
7 C 2[t] коэф . вар . в квадрате Коэффициент вариации C[t] времени пребывания акторов в узле, возведенный в квадрат: C 2[t]
8 Счетчик входов (переключ . hold) Число акторов, вошедших в узел за время моделирования; для key — число переключений hold
9 Число каналов Число параллельных каналов обслуживания
10 Остаток акторов Число акторов, оставшихся в узле в момент завершения моделирования
11 Состояние узла в данный момент На момент завершения модели: — открыт или закрыт; — положительное и отрицательное сальдо (send); — остаток и дефицит (attach)
68 у
№ 5 (47) 2013
ром масштабе виртуального времени, что не всегда бывает удобно. Замедлить время выполнения для удобства восприятия динамической информации на экране монитора можно двумя способами:
• запустить модель из главного меню, выбрав опции
Моделирование ^ Запуск с установкой масштаба,
далее ввести небольшую задержку выполнения, которая будет происходить после каждого события модели, и запустить команды
Изменение ^ Выполнить.
Начинать эксперимент по замедлению следует с самых малых значений;
• вставить в текст модели перед оператором network агентную функцию timescale (установка масштаба времени).
Замечание 2. Излишняя на первый взгляд подробность изложения вызвана тем, что раньше, начиная с 2000 г., большинство пользователей Pilgrim в своей работе использовали оболочки Developer Studio (версия 4.1), Visual Studio (версия 6.1) или Bilder C++ (фирмы Borland). Кроме того, в различных вузах появились многочисленные начинающие разработчики моделей, разбирающиеся в экономических процессах, знающие экономико-математические методы, но имеющие представление о средствах разработки программ либо на уровне пользователя, либо в большей степени теоретическое.
Замечание 3. Опытные программисты могут настроить оболочку Visual C++ Express Edition таким образом, чтобы вручную подключался только исходный файл, а необходимые ресурсы и библиотеки присоединялись автоматически (по умолчанию).
2. Проект модели с диалоговой корректировкой параметров во время выполнения
Такой вариант проекта модели рекомендуется для двух функциональных применений [5].
я
1. Имитационная модель управляемо- | го экономического объекта применяется | в управлении сложным бизнес-процессом. | Она используется в качестве инструмен- ^ тального средства в контуре адаптивной ^ системы управления. |
2. Имитационная модель встраивается | в профессиональную компьютерную тре- ^ нажерную систему для обучения практиче- ^ ским навыками специалиста (команды спе- ^ циалистов). Без начальной подготовки та- § ких специалистов нельзя сразу допускать | к выполнению своих профессиональных ^ обязанностей, так как возможная ошибка и (риск по причине человеческого фактора) |* имеет весьма высокую вероятность. С тре- | нажером можно не только обучать выпол- | нению основных функций, но и разбирать ¡^ нештатные критические ситуации. Примеры ^ довольно распространенные:
• необходимо провести профессиональную переподготовку группы ведущих менеджеров, работающих сравнительно автономно в территориально-распределенной торгово-промышленной корпорации;
• нужно подготовить команду, управляющую океанским лайнером, космическим кораблем, большим самолетом, экипажем танка (натурное без тренажера обучение будет очень дорогим).
Принцип коллективного тренажера, использующего встроенную имитационную модель, впервые использовался для подготовки специалистов довольно давно2.
Одна из возможных реализаций тренажера показана на рис. 4. Имеются три группы специалистов, готовящихся к совместному управлению океанским кораблем. Им отведены роли: командир корабля, заместитель командира, штурман корабля, старший вахтенный офицер, службы наблюдения. Каждому специалисту переданы конкретные функции по управлению кораблем. Работая с тренажером, каждый специалист не толь-
2 30 лет назад. Системная модификация управляющих программ в GPSSV для этого режима была выполнена А. А. Емельяновым [8].
№ 5 (47) 2013
ко совершенствует свои профессиональные навыки, но и учится быстрее подстраиваться к действиям коллег, более осознанно понимать причины их внезапных решений.
Далее вернемся к проекту Example01 и тексту модели Test-Expo.cpp. Допустим, что в процессе выполнения модели нужно в диалоге, без ее остановки выполнять одну из следующих задач:
• корректировать входные параметры модели (листинг 2);
• задавать входные параметры каждый раз без перезапуска модели (файла Example01.exe).
Для этого потребуется вспомогательная унифицированная функция Parametr, вызов которой осуществляется с помощь макроса parametr003 (листинг 3), где «003» обозначает, что управление ведется по трем параметрам.
Максимальное число параметров, которые можно корректировать (подстраивать) таким способом, — 12. Соответствующие окна ввода именуются от DM_C001 до DM_ ЗД12. Если, например, нужно регулировать 10 параметров, то для первого выделяется окно DM_C001, для второго — DM_C002, и так далее до десятого DM_C010.
В данном случае параметры изменяются только при перезапуске модели, но можно их изменять так часто, как нужно экспериментатору, вплоть до контроля каждого актора на входе какого-то узла в процессе выполнения модели.
Функция Parametr в каждой реализации отличается только числом параметров и названиями окон, выделенных для их корректировки. Рассмотрим текст этой функции для модели Test-Expo.cpp, в текст которой вставлен макрос parametr003. На листин-
е <Е
0
Чч
U ^
1
SS
I
со
I
s
Ü
I !
t
ss
I
s
Ü
e
0
1
5
о
6
g
о §
Листинг 2
Входные параметры модели
double Tinp = 10.0; // Интервал между заявками ;
double Tser = 5.0; // Интервал обслуживания ;
long Chen = 1; // Число каналов обслуживания ;
Модель корабля в автономном плавании
Службы наблюдения
Старший вахтенный офицер
Рис. 4. Корректировка параметров модели во время ее выполнения
70
№ 5 (47) 2013
Листинг 3
Вызов макроса parametr003
I
«
0
1
о ê
Эй Эй
s* 00 О
u
il <3
«
ig S
I
#include <Pilgrim.h> double Tinp = 10.0; double Tser = 5.0; long Chen = 1;
forward {
parametr0 03;
modbeg("Модель обслуживания", 4, none, 2, none, none, 6);
actor ("Жителипоселка
// Интервал между заявками
// Интервал обслуживания
// Число каналов обслуживания
// Блок "Акторная модель"
100000000.0, (long)time(NULL)
1, none, expo, Tinp,
network(dummy,standard) {
// Граф модели
ге 4 подчеркнуты те фрагменты модели, ко-тоые зависят от числа параметров и их типов и от названий окон. Остальные фрагменты имеют стандартный вид.
Программный модуль Рагате^.срр нужно включить в папку d:\Samples\Parametr. срр, а затем включить в проект в папку Файлы исходного кода вместе с файлом Test-Expo.cpp.
Листинг 4
Функция Parametr
#include <Pilgrim.h> extern double Tinp
extern double Tser
extern long
Chen
// Средний интервал поступления
// Среднее время обслуживания
// Число каналов обслуживания
(HWND
message, wParam, lParam )
BOOL CALLBACK ParametrFunc (HWND hdwnd,
UINT WPARAM
LPARAM {
PAINTSTRUCT paintstruct;
HDC hdc;
HBITMAP hBitl;
int i, j, mX, mY ;
switch(message)
{
caseWM_INITDIALOG: // Вывод из модели в окна редактирования sprintf(str, "%4.2lf", Tinp); // Из double в char[]
SetDlgItemText(hdwnd, DM_C001,str sprintf(str, "%4.2lf", Tser);
SetDlgItemText(hdwnd, DM_C002, sprintf(str, "%1ld",_Chen);
str)
SetDlgItemText(hdwnd, DM_C003,str) return false; case WM_PAINT:
hdc=BeginPaint(hdwnd,&paintstruct)
mX=GetSystemMetrics(SM_CXSCREEN);
mY=GetSystemMetrics(SM_CYSCREEN);
// Выводвокно 001
// Из double в char[]
// Выводвокно 002
// Из long в char[]
// Выводвокно 003
// Вывод комментариев // Дескриптор экрана // Ширина экрана (пиксели) // Высота экрана (пиксели)
71
2
№ 5 (47) 2013
Окончание листинга 4
Ü <Е
0
Чч
U ^
! SS
1
00 §
!
1 I I
t ss
I
5
Ü е
0
1
6
о &
8
о §
hBit1=LoadBitmap(hInst,"MYBP1") sprintf(str, "%s", " "); for (i=0; i < 3; i++) for (j = 1; j<439; j+ + )
TextOut(hdc, 170+j, 33+28
// Развертка экрана как Bitmap
str, strlen(str)
sprintf(str, "%s' "
TextOut(hdc, 178 33
sprintf(str, "%s" " 2
TextOut(hdc, 178 61
sprintf(str, "%s" " 3
TextOut(hdc, 178 89
1.Средний интервал поступления ( мин. )
// 33 + (3
str, strlen(str)) Среднее время обслуживания ( мин.
str, strlen(str)),• // 33 + (3 Число каналов обслуживания "); str,strlen(str)),• // 33 + (3
з-
28 = 33
28 = 61
28 = 89
return false; case WM_COMMAND:
switch(wParam {
case IDOK:
// Ввод новых значений в модель
// Кнопка GetDlgItemText(hdwnd, DM_C001 sscanf(str, "%lf", &Tinp); GetDlgItemText(hdwnd, DM_C002 sscanf(str, "%lf", &Tser); GetDlgItemText(hdwnd, DM_C003 sscanf(str, "%ld", &Chen); EndDialog(hdwnd, TRUE); break;
case IDCANCEL: // Кнопка
"Настрой" str, 80)
str,
str,
//
// Ввод из окна 001 // Из char[] в double
// Ввод из окна 002 // Из char[] в double // Ввод из окна 003 Из char[] в long
Пропуск'
EndDialog(hdwnd,FALSE) break;
default: return
}
false;
break; default: return
false;
}
return }
true;
На рисунке 5 выведены следующие значения параметров:
12.00 — средний интервал поступления; 10.00 — среднее время обслуживания; 1 — число каналов обслуживания.
Можно, например, уменьшить средний интервал поступления (т. е. увеличить интенсивность входного потока в 2 раза, что одно и то же), поставив указатель мыши на первое окно и заменив 12.00 на 6.00. Но это
Рис. 5. Регулируемые параметры модели
72
№ 5 (47) 2013
Файл Правка Вид Проект Построение Отладка Сервис Окно Справка Ш - Ш - Й у ш | * ► Debug fl Win32
ЯА ^ iF IF
Обозреватель решений - Ре,., т JJ X
11 S
Te5t-E>cpa.cpp Parametr.cpp
Решение "ExampleOl" (проектов: 1] Й- ц^ ExanipIeOl
..... □ Заголовочные файлы
□ ■ Файлы исходного кода Й- йШ Файлы ресурсов
1..... Pilgrim,res
Parametr.cpp tjJ Test-Expo.cpp ^ Pilgrim,lib
(Глобальная область)
□ # include <Pilgrim.h>
double Tinp = 12.0; // Интер
double Tser = 1Q.0; // Интер
long Cben — 1; // Число
forward // Начал
{
parametrOQ3;
ir.odfceg ("Парикмахерская", 4,
actor ("Жители посёлка", 1,
Рис. 6. Состав подключаемых к проекту Example01 файлов
потребует дополнительного ресурса обслуживания, поэтому меняем в третьем окне 1 на 2, добавив еще канал. Далее нажимаем кнопку Настрой, и моделирование продолжится с новыми значениями параметров.
Существуют и другие, более сложные возможности Рагате^.срр — это разработка уникального интерфейсного модуля [17], что не всегда необходимо.
Состав проекта показан на рис. 6, на котором видно, что в составе проекта Ехатр1е01 появился еще один файл — рагате^.срр.
3. использование параметров акторов и узлов. динамическая трассировка модели
Параметры акторов и узлов можно наблюдать в процессе выполнения имитационной модели, для чего существует режим трассировки модели. Главное окно этого режима показано на рис. 7.
В окне трассировки всегда присутствуют два узла:
• узел-производитель, из которого выходит актор (происходит событие);
• узел-потребитель, в который актор переходит.
В момент события в окне отображаются все наиболее важные параметры актора, характеризующие его состояние в данный
момент времени, и параметры узла-потребителя.
Просмотр динамики выполнения моделей полезен, прежде всего, для наблюдения изменений, происходящих в узлах. В этом режиме можно прослеживать пути акторов, просматривать, например, такие характеристики моделируемого процесса, как динамика изменения денежных средств на счетах, динамика состояния складов и т. п. Отметим, что трассировка также является мощным инструментом для целей отладки сложной модели.
Диалоговое управление трассировкой осуществляется с помощью радиокнопок.
Параметры акторов. Повышение эффективности создаваемых моделей невозможно без знания некоторых параметров акторов, узлов, глобальных переменных моделирующей системы и полезных функций, значения которых можно использовать. Операндами (аргументами) рассмотренных выше функций системы Pilgrim могут быть числа, как целые, так и с плавающей точкой, — тип определяется по смыслу, параметры акторов и узлов, некоторые глобальные переменные и любые переменные, вводимые разработчиком модели.
Отсчет модельного времени всегда начинается с нуля, а его текущее значение содержится в глобальной модельной переменной timer. Единицы измерения времени в модели
73
§
ig I
со
0
1
о §
Эй ЭЙ
S* 00 О
U §
<3
со ig
I
№ 5 (47) 2013
Модель перешла в режим трассировки
Узел-производитель Номер: 14 Имя: Клиенты Процесс: actor
Радиокнопки просмотра Г По событиям С Выход из узла (* Вход в узел С Виртуальное время С Актор
Г Маршрут актора
Состояние актора Актор:
46
308
Событ: Время: 138
Номер асЬ: (5]
Номер есЬ: [51
Семейство: 0
Приоритет: 0
А-ресурсы: 0
Т-агент: Нет связи
ЭРА-то чка: 0
Узел-потребитель Номер: [Ï5
Имя: Склад гот.прод Процесс: attach Входов: Акторов: N каналов: R-агент: S РА-то чка: Остаток: Запросы:
19
1
1
Не внедрён 0
1179
2
Управление отладкой Резервное окно отладки:
I-
Список ecb: А Своб. ecb: 5 Своб. acb: G
Просмотр I Выход I
Параметры текущего актора Параметры long int t->lo1 = О t-> I о 2 = О t-> I о 3 = 0 t->lo4 = О t-> I о 5 = О t->lo6 = О t >lo7 = О t-> I о 8 = 0
Параметры double t->do1 = 0 t->do2 = 0 t->do3 = 0 t->do4 = 0 t->do5 = 0 t->do6 = 0 t >do7 = 0 t->do8 = 0
Рис. 7. Получение динамической информации в режиме трассировки
¡E
U
i К
I
00 §
S
1 ¡
I
t ss
I
S
ü s
o ¡
5
o
6
8
o §
условны, т. е. разработчик должен помнить, какой интервал реального времени он принял за единицу времени модельного. С точки зрения типа данных, интервалы времени — это переменные с плавающей точкой.
Акторы имеют параметры, некоторые из которых всегда доступны пользователю — разработчику модели. Связь с параметрами в любой момент времени осуществляется с помощью глобальной переменной t, являющейся указателем структуры данных рассматриваемого актора. Например, если актор проходит через какой-либо узел, то программный доступ к его приоритету осуществляется из узла или агентной программы следующим образом: t ^ pr. Соответственно, указатель с именем t — это зарезервированное системное обозначение. Разработчик модели может использовать для анализа любые параметры актора, но изменять в нем может только некоторые, а именно:
1) приоритет актора t ^ pr;
2) номер семейства актора t ^ ft;
3) восемь целочисленных 32-разрядных переменных пользователя (типа long), которые обозначаются как t ^ loi, ..., t ^ lo8;
4) восемь 64-разрядных переменных пользователя c плавающей точкой (типа double), имеющие обозначения t ^ do1, ..., t ^ do8;
5) t ^ ga — признак обслуживания актора вновь, который устанавливается операцией присваивания ему глобальной константы again, как это было показано при рассмотрении функции serve;
6) t ^ tx — параметр запоминает номер (индекс) точки пространства. Номер точки позволяет определить ее координаты lat и lon в массиве space.
Изменение других параметров следует доверить только системе Actor Pilgrim.
Параметры узлов. Во время прохождения актора через узел номер этого узла находится в глобальной переменной next. Перечисленные ниже параметры узла доступны пользователю для анализа (но не для изменения):
addr [next] ^ nc — число каналов в узле;
addr [next] ^ na — число акторов, прошедших через узел на данный момент модельного времени;
addr [next] ^ tn — число акторов, находящихся в узле в данный момент;
74
ПРИКЛАДНАЯ ИНФОРМАТИКА /-
' № 5 (47) 2013
addr [next] ^ ts — среднее время обслуживания, подсчитанное на данный момент;
addr [next] ^ op — признак состояния узла типа key. Это целочисленная переменная, принимающая значения:
• true, если клапан открыт,
• false, если он закрыт;
addr [next] ^ se — признак состояния узла типа destroy (целочисленная переменная, принимающая значение nil, если в узле нет уничтожающего актора);
addr [next] ^ kx — номер (индекс) точки, в которой находится узел типа create, destroy или produce. По номеру точки определяются ее координаты lat и lon.
Для анализа параметров любого узла можно использовать его порядковый номер n. Например, если актору необходимо проверить состояние узла типа destroy, имеющего номер 5, и в случае отсутствия поглощающего актора в этом анализируемом узле выполнить какой-либо оператор, он должен «пройти» через следующее выражение:
if (addr [5] ^ se == nil) <оператор>;
Актор, анализирующий узел номер 5, во время проверки может находиться в произвольном узле, к которому и должна быть приписана данная языковая конструкция. Следует отметить, что возможны пробные обращения координатора network к ветви top(n) для анализа состояния узла, но не для ввода актора в узел. Факт входа актора фиксируется в глобальной переменной go и автоматически анализируется всеми функциями Actor Pilgrim. Поэтому еще раз необходимо обратить внимание на то, что поток управления в программе и поток акторов в модели — это абсолютно разные явления.
Все необычные ситуации, мешающие нормальному продолжению моделирования, фиксируются в глобальной переменной error. Моделирование может выполняться, только когда значение error равно нулю. Значения этой переменной от 1 до 100 зарезервированы для нужд Pilgrim. Пользователь сам может останавливать модель, если
при выполнении каких-то условий в модели |
этой переменной присвоить любое значе- 2
ние, начиная с 101. |
Например, если нет уверенности в том, что используются допустимые значения для
определения номеров узлов при переходе |
акторов из узла в узел, то самой последней | строкой описания графа модели может быть
строка fault (параметр), где параметр — лю- а;
бое число, например 123. ^
S*
СО О U
особенности замкнутых моделей |
корпоративных информационных систем <
Uj
Под замкнутой моделью корпоративной |* информационной системы (КИС) будем по- | нимать модель системы, работающей в ре- | жиме «запрос-ответ», в которой акторы, ¡í¡! единожды сгенерированные, циркулируют ^ в пределах графа модели, не исчезая в терминаторах. Например, это может быть работа группы пользователей с компьютерной сетью в диалоговом режиме. Актор в данном случае — это запрос пользователя. Выйдя из генератора, актор проходит по графу модели и постепенно, по мере моделирования процесса работы КИС, превращается в ответ системы и возвращается к пользователю, после чего вновь начинает играть роль запроса того же пользователя. Ниже используется идеология системы имитационного моделирования Actor Pilgrim, в соответствии с которой замкнутая модель КИС — это частный случай самодостаточой системы.
Моделировать новый запрос новым сгенерированным актором не представляется возможным, так как нельзя рассчитать заранее время обработки запроса системой (это случайная величина) и, следовательно, нельзя задать частоту генератора. В данном случае модель может быть построена следующим образом:
• пользователи (или группы пользователей, в зависимости от сложности моделируемой системы) представляются одно- или многоканальными узлами типа serv (серверы);
• число каналов сервера соответствует числу пользователей, время обработки ак-
№ 5 (47) 2013
Рис. 8. Модель КИС с одним многоканальным сервером
Ü ¡E
0
Чч
U ^
1
К §
со i s i I !
t
ss
I
5
Ü
s
0
1
I
о
6
g
о §
тора сервером соответствует времени подготовки пользователями запроса;
• приписываемая актору роль запроса или ответа обозначается в одном из его параметров;
• для зарядки акторами серверов пользователей, принадлежащих к одному классу, используется единственный генератор, порождающий всего один актор. Далее акторы размножаются с помощью узлов типа creat.
Пример 1. Зарядка одного многоканального сервера (рис. 8).
Описание узлов, заряжающих модель акторами, в данной схеме имеет вид, представленный на листинге 5.
Генератор (узел 1) в течение единицы модельного времени генерирует один актор, который попадает в узел create (узел 2) в качестве порождающего. Узел 2 генерирует (порождает) семейство акторов количеством Users (модельная константа — число пользователей) и с номером семейства 4
(номер узла, моделирующего работу пользователей). Порождающий актор исчезает в терминаторе (узел 3). В этот же момент происходит перенастройка генератора(оператор customize): интервал между генерацией акторов устанавливается равным времени моделирования Modtime (это же время задано в modbeg). После этого генератор «выключается», так как за время моделирования больше не успевает выпустить ни одного актора.
Порожденные узлом create акторы попадают в узел serve (узел 4), моделирующий работу пользователей. Число каналов в нем равно числу вошедших в него акторов (константа Users), а среднее время обслуживания актора равно среднему времени обдумывания пользователем запроса (модельная константа Think-time). Далее — перед выходом актора из узла — ему присваивается начальная метка «запрос» (в параметр t ^ lo1 заносится модельная константа QUERY).
Листинг 5
Зарядка модели с одним многоканальным сервером
actor ( "Исходный aKTop",1,none,none,1.0,zero,zero 2);
top(2) create("Размножение",4,Users,none,4,3),• place;
top(3) term("Выключение"),•
customize(1,none,none,Modtime,zero,zero,3); place;
top(4) serve("Пользователи",Users,none,expo,Think_ _time,zero,zero, 5);
agent
t ^ loi =QUERY;
place;
76
№ 5 (47) 2013
Таким образом, по графу модели начинает циркулировать столько запросов, сколько имеется пользователей. Адрес возврата запроса пославшему его пользователю можно определить по значению параметра t ^ ft «номер семейства». В случае с одним сервером пользователей эта проблема не столь актуальна, тогда как в двух описанных далее случаях данный способ очень удобен.
Пример 2. Зарядка нескольких однока-нальных серверов (рис. 9). Описание узлов этой схемы см. в листинге 6.
Отличие этой схемы от предыдущей (на рис. 8) состоит во введении дополнительного узла queue (узел 4). Узел 2 create генерирует Users акторов (по числу пользователей), не присваивая им номер семейства.
Далее указанные акторы попадают в очередь (узел 4), где каждому из них присваивается свой номер семейства, равный но-
меру сервера, в который этот актор поступит. Также в параметр актора t ^ do1 заносится среднее время задержки в сервере, моделирующем работу пользователя. Данный параметр используется при описании серверов пользователей (узлов c номерами из диапазона [5, Users + 4], где Users — число серверов).
Пример 3. Зарядка нескольких многоканальных серверов. Этот вариант (рис. 10) отличается от предыдущего введением второго узла create (узел 5). Он получает последовательно из очереди (узел 4) порождающие акторы, уже обладающие необходимыми параметрами для каждого сервера, моделирующего работу группы пользователей (см. описание узла 4 в варианте 2).
Указанные акторы становятся образцами для порождаемых семейств. Количество акторов, генерируемых дополнительно для ка-
I
со
0
1
о £ а;
Эй
S*
СО
о
U §
<2
со §
I
Листинг 6
Зарядка нескольких одноканальных серверов
Граф
КИС
Рис. 9. Модель КИС с несколькими одноканальными серверами (N = Users + 4)
77
№ 5 (47) 2013
customize
-ч Группа ! {term\пользователей User
Рис. 10. Модель КИС с несколькими многоканальными серверами (N = Users + 5)
Листинг 7
Описание дополнительного узла creat в схеме зарядки модели с несколькими многоканальными серверами
top(5): create("Размножение" t^ft, Число_каналов-1, copy, t^ft, t^ft);
place; .
ждого сервера, равно числу моделируемых им пользователей минус 1, так как порож-
£ дающий актор-образец тоже использует-
0 ся в качестве запроса и поступает в тот же
u г-1
^ сервер, что и порожденные им. В данном
Ц случае Users — это число групп пользова-
g телей. Описание второго узла create имеет
■а вид, представленный в листинге 7.
| В операторе queue нужно также заме-
1 нить параметр «номер семейства» t ^ ft § на номер 5, так как из очереди все акторы
ss идут в узел 5 create. Для описания серверов %
¡а число пользователей можно задать в неко-
S^ тором массиве, доступ к которому осущест-
^ вляется через значение параметра актора
§ «номер семейства», равный номеру соот-
! ветствующего сервера.
^ Далее рассмотрим возможности опре-
§ деления времени ответа на запрос в моде-
Si лируемой КИС. При моделировании работы
5 корпоративных информационных систем мо-
I жет быть поставлен вопрос, сколько времени в среднем тратит система на обработку
о одного запроса пользователя. Существуют
« три способа решения этой задачи:
is 1) добавить в модель дополнительный
§ узел key и с его помощью проводить заме-
Й ры времени реакции;
2) получить с помощью модели средние времена пребывания акторов во всех узлах имитационной модели КИС и использовать эти данные для расчета времени реакции;
3) использовать только среднее время подготовки конкретным пользователем запроса (или задания) для КИС, полученное с помощью модели, и загрузку узла serve, имитирующего данного пользователя.
Рассмотрим эти способы подробнее.
Способ 1. Через дополнительный узел key (рис. 11) акторы не проходят, он служит только для измерений. Каждый пользователь имитируется одним сервером, дополнительно каждому пользователю приписывается свой узел key. На рисунке 11 показана модель работы одного пользователя.
Актор — задание для КИС — предварительно проходит через key и запирает его. Далее, после обработки запроса, этот актор возвращается из модели КИС в тот же сервер, но при входе в узел serv он открывает key. В модели автоматически измеряется интервал закрытого состояния узла key и определяются матожидание и среднеквадратичное отклонение.
№ 5 (47) 2013
Рис. 11. Пример измерения среднего времени реакции системы с помощью дополнительного узла key
Достоинство способа:
• измерения очень точные при большом числе акторов.
Недостаток:
• необходимо для каждого пользователя ввести в модель и описать дополнительный узел key, что усложняет модель.
Способ 2. Можно получить с помощью модели средние времена пребывания акторов во всех узлах имитационной модели КИС. Далее необходимо определить средние значения вероятностей переходов для всех узлов в модели (это несложно). Затем, используя методы теории стохастических сетей, можем определить среднее время пребывания актора в графе модели КИС.
Достоинство способа:
• применяется известная расчетная методика.
Недостатки:
• метод приближенный, так как вероятности могут меняться во времени;
• расчетная методика довольно сложная, требует привлечения математического аппарата, который вносит дополнительные методические погрешности.
Способ 3. Среднее время подготовки конкретным пользователем запроса (или задания) для КИС и загрузка соответствующего узла serve, имитирующего этого пользователя, определяются в модели автоматически. Причем эти измерения всегда точны: в случае моделирования и группы типовых пользователей одним многоканальным узлом serve, и каждого уникального пользователя отдельным одноканальным узлом serve.
Рассмотрим временную диаграмму работы уникального пользователя с КИС (рис. 12). На достаточно длинном интерва-
I
со
0
1
о §
а;
Эй
S*
СО
о
U §
<2
со §
I
— пользователь готовит очередное задание КИС
— КИС выполняет задание пользователя
Рис. 12. Временная диаграмма взаимодействия пользователя и системы
79
-ч ПРИКЛАДНАЯ ИНФОРМАТИКА
№ 5 (47) 2013 ' -
ле времени моделирования т происходит п обращений к КИС.
Среднее время Ю подготовки пользователем каждого задания КИС автоматически определяется по следующей формуле:
=n
s t
\i=1
Загрузка р узла serve — это доля всего времени tm, которое тратится пользователем на подготовку каждого нового задания КИС, причем справедлива формула
1
Р =
S t
i =1
<Е
Нетрудно заметить, что доля времени моделирования, в течение которого КИС обрабатывала п запросов, равна 1-р. Поэтому справедливо соотношение
Р-tm + (1 -Р) tm = ^т ■ Разделим левую и правую части этого равенства на п и получим следующее выра-
о жение:
U
I
SS
IS
00 §
S
if
1 si
t
ss
I
5
t
e
0
1
I
0
6
1
0
S3
tu +
(1-P) L
= t.
n!
r !(n - r)!
где tc — среднее время одного цикла «запрос-ответ» при выполнении всех п заданий пользователя, в том числе при р = 0 (одно из возможных решений), причем tc = tm / п.
Время цикла в данном случае состоит из двух слагаемых: времени подготовки задания и времени обработки этого задания —
времени реакции КИС. Поэтому запишем
^ + ^ = ^,
где tг — искомое время реакции КИС.
В результате моделирования известны значения tu и р. В связи с вышеизложенным запишем систему уравнений
К / Р = ^ ^/(1-Р) = К'
из которой получим время реакции КИС:
tr = ^ tu, 0 <р< 1.
Здесь нет никакого противоречия: чем дольше пользователь готовит запрос, тем меньше загрузка, т. е. рост tu приводит к снижению р, и оба фактора приводят к увеличению t.
Достоинства способа:
• он имеет такую же высокую точность, как при работе с дополнительным узлом key;
• этот способ значительно проще, чем способы 2 и 3: действительно, расчет по формуле значительно проще, чем включение n дополнительных узлов key или решение системы из n нелинейных уравнений методом итераций.
Недостаток:
• не определяется среднеквадратичное отклонение.
Программирование условий прохождения актора по графу модели
Рассмотрим случайный выбор узлов для перехода актора из заданного набора (или класса). При построении моделей часто может встретиться ситуация, когда какой-либо объект имеет несколько подчиненных объектов, объединенных общим именем класса, в который они попадают, и требуется решить, в какой из подчиненных узлов направлять актор. В этом случае можно поступить, например, следующим образом: актор тем чаще направляется в узел, чем больший вес он имеет. Под весом в данном случае понимается любая количественная характеристика объекта, по которой может производиться сравнение. На рисунке 13 приведен пример фрагмента графа модели.
Условие выбора узла с номером k выглядит следующим образом:
1 k-1 1 k 1 Sw < p < 1 s W ,
T'
где p — случайная величина, равномерно распределенная на [0,1];
t
m
n
i =1
i =1
80 j
№ 5 (47) 2013
* II .кала условных весо
30 10 45 55 15 45
queue queue queue queue queue queue
1 2 3 4 5 6
queue
101 L
к к
hold
release
Рис. 13. Фрагмент схемы модели с вероятностным выбором узла к из общего числа узлов п = 6
W¡ — вес узла;
Т — сумма весов, где сумма весов определяется через условие нормирования:
T = XW.
Приведенное выше соотношение следует из рис. 14, на котором показано, как реализовано дискретное распределение вероятностей.
Заштрихованные прямоугольники изображают отношение веса каждого объекта к общей сумме весов (весовую долю); пунктирные линии определяют границы интервала, при попадании в который величины p в данном примере будет выбран узел с соответствующим номером i. Вероятность выбора узла 4 самая высокая, так как он имеет наибольший вес.
Функция Number, определяющая номер выбираемого узла, показана на листинге 8.
Si
Щ
со Эй
ео
0
1
о §
Эй ЭЙ
S*
СО О
U §
<3
со §
I
i=1
Номер узла
Рис. 14. Схема выбора узлов по их условным весам
v 81
№ 5 (47) 2013
Листинг 8
Функция Number
int Number (float *weight, int n, float sum) {
inti, k;
float p, p0; p0 = 0.0;
p = random(); // Датчик случайных чисел Pilgrim на отрезке [0,1]
for (i=0; i<n; i++) {
k = i;
if (( p >= p0) && ( p <= p0+weight[i] / sum ))
break;
else
p0 += weight[i] / sum;
}
return (k+1); }
<E
U ^
Si is
IS
«
i ! if I I
t
«
I
S
t
S
0
1
5
о
6
s
0 §
Входными параметрами являются массив весов, число узлов и суммарный вес. Функция возвращает номер элемента массива весов.
Накапливаемое значение p0 соответствует суммам площадей прямоугольников на рис. 14. Оно будет накапливаться до тех пор, пока функция Number не «доберется» до нужного столбика.
Схема выбора дальнейшего пути продвижения актора в зависимости от значения некоторого его целочисленного параметра-критерия имеет типовое описание (листинг 9). В качестве номера следующего узла, в который должен перейти актор, фигурирует его параметр t ^ loi, предварительно получающий значение в соответствии со значением другого (критериального) параметра данного актора. Количество
возможных узлов перехода в данном случае равно m.
В качестве узла ветвления лучше всего использовать key, поскольку он самый «легкий» из всех узлов конструктора (т. е. имеет минимальное количество параметров описания). Но в принципе, в зависимости от конструкции конкретной модели, узлом ветвления может быть любой узел, кроме, естественно, генератора и терминатора.
Пример такого узла ветвления показан на рис. 15.
Далее рассмотрим следующие полезные рекомендации по нумерации узлов составных объектов (частей модели) одного класса. Если в модели имеется несколько принадлежащих одному классу объектов, каждый из которых представлен несколькими узлами, то целесообразно нумеровать узлы,
Листинг 9
Описание узла ветвления
^р(<номер_узла_ветвления>):
switch( <критериальный параметр_актора> ) {
case(<значение_1>) case(<значение_2>)
t^1о1=<номер_узла_1>; break; t^1о1=<номер_узла_2>; break;
case(<значение_m>): t^1о1=<номер_узла_т>; break; }
Тип_узла_ветвления(<параметры_узла>, t^loi); place;.
82
№ 5 (47) 2013
Возможные значения параметра актора t^ 1о0:
со
0
1
о §
а;
Эй
S*
СО
о
и §
<2
со §
2
Рис. 15. Схема выбора пути в соответствии с параметром актора
относящиеся к каждому объекту, таким образом, чтобы номера соответствующих узлов разных объектов были функцией от к — номера объекта данного класса (рис. 16).
В этом случае типовые блоки обработки акторов в одних и тех же узлах разных объектов можно оформить в виде процедур, вызываемых с параметром «Номер объекта» (вместо того чтобы переписывать одни и те же операторы обработки), изменяя лишь номера узлов (например, с шагом 10, как показано на рис. 16).
Таким образом, для каждого класса объектов, входящих в модель, могут быть составлены наборы стандартных модулей обработки акторов, что значительно упростит создание модели.
Проект модели с функциональным окном для конечного пользователя
Довольно часто разрабатываемая модель в итоге предназначается для использования в своей работе конечным пользо-
Рис. 16. Пример объектно-зависимой нумерации узлов: т1 = 10 ■ к + 1; т2 = 10 ■ к + 2; т3 = 10 ■ к + 3
83
№ 5 (47) 2013
Функциональный интерфейс
Настройка Моделирование Результаты Помощь
Сафоново
Модель "Воздушные рейсы"
Sat Feb 05 10:16:33 2008 Процент выполнения: 83
Рис. 17. Вид окна функционального назначения
вателем — менеджером моделируемого предприятия, который не является профессионалом в области имитационного моделирования и не владеет понятиями и терминологией пакета Pilgrim. Такой пользователь будет использовать модель, только ко-£ гда разработчик модели не требуется ему
0 в качестве «переводчика», трактующего типовые результаты моделирования.
Ц Таким образом, возникает задача созда-У ния проблемно-ориентированного функ-£ ционального окна, информация из кото-| рого понятна потребителю, не знакомому
1 с моделирующей системой [5]. Такая задача § актуальна и для моделей, созданных по ва-■а рианту «Типовой проект модели», и особен-¡а но для моделей, реализованных по способу S^ «Проект модели с диалоговой корректиров-^ кой параметров».
§ Такая, понятная конечному потребителю, ! информация может представлять собой ди-^ намически изменяющиеся таблички с пока-§ зателями, графики, диаграммы, перемещаю-§ щиеся по экрану изображения (например, 5 монетки, машинки или фигурки людей — I в зависимости от предметной области задачи). Для обеспечения необходимой дина-о мической визуализации процесса модели-« рования средствами Visual C++ создается is специальная функциональная программа § funcwindow, которая помещается в динами-Й чески вызываемую библиотеку Windows (dll-
библиотеку)3. Обращение к такой библиотеке производится после каждого события в модели. После первого события она загружается в оперативную память.
В качестве элементарного примера динамической визуализации работы модели можно рассмотреть полезную программу «Часы моделирования». В качестве модели, для которой используем эту программу, можно взять учебный пример «Модель посещения пунктов местности коммивояжером» ([6], с. 230-233). Текст модели приведен в листинге 10.
В системе моделирования Actor Pilgrim разработчику предоставлен межпроцессный интерфейс, который обеспечивается системным указателем pointer. В данном случае, как только очередной интервал моделирования превзойдет небольшой квант модельного времени, эта программа переформировывает содержание функционального окна, в результате чего можно наблюдать эффект анимации. Изображения, появляющиеся в правом верхнем углу такого окна, представлены на рис. 17. При достижении коммивояжером очередного пункта его название появляется слева. Часы в виде постепенно закрывающегося сектора показаны справа.
3 Данный параграф предназначен для разработчиков моделей, хорошо владеющих программированием на С/С++.
№ 5 (47) 2013
Листинг 10
Модель посещения пунктов местности коммивояжером
#include<Pilgrim.h> #defineAntHill(addr[2]->na + 1) #define AntPoint (addr[4]->na)
double Slow = 0.15; // Параметр замедления модели
doubleTmod = 5 0.00; // Время моделирования
longJournal[] = {none}; // Стандартный системный журнал
forward {
int M = npoints; // Максимальное число пунктов
staticchar* Town; // Только для демонстрации pointer modbeg ("Воздушныерейсы", 5, Tmod, (long)time(NULL), earth, 3,
Journal, 5, 2);
actor ("Вызовы", 1, none, expo, 0.02, zero, zero, 2);
timescale(Slow); // Масштаб времени
sknot(4); // Просматриваем параметры узла 4
network(dummy, standard) {
top(2): t->path = 3;
if(AntHill >= 1 && AntHill <= M) sewt(AntHill);
else
t->path = 5; queue ("Пунктывызовов", none, t->path);
place;
place;
top(3): queue ("Расписание", none, 4);
top(4): produce("Полет вертолета",dummy,1,earth,zero,10 0.0,zero,5),• agent // Агент только для демонстрации pointer
Town = spacelook(AntPoint);
pointer = Town; // Это только "демонстрация
pointer"
place;
top(5)
}
place;
: term ("Акторы-пункты")
(123)
fault }
modend ("Helicopter.doc", 1, 12, page)
return 0; }
Программа функционального окна получает в качестве параметра область памяти с указателем structfwcb, в которой размещены все необходимые оперативные данные на момент последнего события, которое произошло в модели. Адрес этой области памяти содержится в системном параметре s, передаваемом в программу funcwindow. Структура блока fwcb показана в листинге 11.
Структура рассмотренной области памяти описана в системном 1>файле Simulate.h. В соответствии с этим в листинге 12 приведен текст программы, реализующей окно типа «Часы моделирования». Следует отметить, что в данной программе значительное место занимают операторы, необходимые для автоматизации размещения текстов и изображений в заданном прямоугольнике
№ 5 (47) 2013
Листинг 11
Структура блока fwcb
structfwcb {
// БЛОК УПРАВЛЕНИЯ ФУНКЦИОНАЛЬНЫМ ОКНОМ
void *pointer; // Указатель рабочей области
LONG mywndproc; // Адрес процедуры окна
HWND hwnd; // Дескриптор окна
HDC hdc; // DC устройства
HDC memdc; // DC виртуального окна
HFONT hOldf; // Старый шрифт
HFONT hNewf; // Новый шрифт
HBITMAP hbit; // Растр — виртуальное окно
HBRUSH hbrush; // Рабочая кисть
HBRUSH hOldbrush; // Дескриптор прежней кисти
HBRUSH hHollowbrush; // Прозрачная кисть
HBRUSH hWhitebrush; // Белая кисть
HBRUSH hBlackbrush; // Черная кисть
HBRUSH hRedbrush; // Красная кисть
HBRUSH hGreenbrush; // Зеленая кисть
HBRUSH hBluebrush; // Синяя кисть
HBRUSH hYelloybrush; // Желтая кисть
HBRUSH hMagentabrush; // Фиолетовая кисть
HBRUSH hCyanbrush; // Бирюзовая кисть
HPEN hOldpen; // Дескриптор прежнего пера
HPEN hWhitepen; // Белое перо
HPEN hBlackpen; // Черное перо
HPEN hRedpen; // Красное перо
HPEN hGreenpen; // Зеленое перо
HPEN hBluepen; // Синее перо
HPEN hYelloypen; // Желтое перо
HPEN hMagentapen; // Фиолетовое перо
HPEN hCyanpen; // Бирюзовое перо
double timer; // Модельный таймер
float tmax; // Время моделирования
long
struct
struct
struct
struct
int
int
int
int
int
int
int
int
int
int
int
char
char
w
nd;
kcb tcb ecb ecb next; error; maxn; presise; maxX; maxY; percent; stopO; stopl; stop2; stop3;
modname[16]; filename[2 5 6
// Число событий в модели addr[pool],• // Массив узлов модели ^ // Адрес асЬ актора
// Адрес созданного есЬ // Адрес спланированного есЬ // Номер «текущего» узла // Фатальная ошибка в модели // Число узлов модели
// Количество знаков после десятичной точки // Размер X экрана монитора // Размер Y экрана монитора // Процент выполнения модели // Признак выполнения модели // Признак приостановки // Признак отладки/трассировки // Установить масштаб времени // Название модели // Имя найденного файла
86 у
№ 5 (47) 2013
Листинг 12
Программа «Часы моделирования»
I
со
0
1
о §
Эй ЭЙ
S* 00 О
U §
<3
со §
I
#include <Windows.h>
#include <Simulate.h>
void funcwindow(structfwcb*);
//-----------------------------------------------
// Вход в динамическую библиотеку MyWindow.dll //-----------------------------------------------
BOOL WINAPI DllEntryPoint
{
(HINSTANCE hDLL, DWORD dwReason, LPWORD Reserved)
switch(dwReason {
case DLL
break;
case DLL
break;
PROCESS_ATTACH: {
PROCESS_DETACH:
{
}
return TRUE; }
//----------
// //--
void {
char
Вход в программу управления окном funcwindow(s) funcwindow(structfwcb *s)
townname; TEXTMETRIC tm; SIZEsize; time_tct; charstr[3000]; charcomwork[96];
structtm structkcb doubleap doublehp
'newtime; k;
float intxL intyL intwE inthE intxLp intxRp intyHp intyLp intwX; intwY; int xS1 int xS2
// Для демонстрации pointer // Метрики текста // Структура для метрик текста // Переменная для таймера ЭВМ // Буфер для строки вывода // Строка для измерений длины
// Адрес структуры для таймера // Адрес узла модели // Текущий угол // Шаг угла // Проценты с плавающей точкой // X левого верхнего угла эллипса // Y левого верхнего угла эллипса // Ширина эллипса // Высота эллипса
// X левого края прямоугольника индикатора // X правого края прямоугольника индикатора // Y верхнего края прямоугольника индикатора // Y нижнего края прямоугольника индикатора // Текущие координаты вывода X // Текущие координаты вывода Y // Рабочая координата // Рабочая координата
87
№ 5 (47) 2013
Продолжение листинга 12
intyS,• // Рабочая координата
intiP,• // Рабочая переменная для процентов
// Рабочая переменная s->hOldf=(HFONT)SelectObject(s->memdc,s->hNewf),• // Шрифт
if (!SetWindowLong(s->hwnd,GWL_WNDPROC, s->mywndproc)) MessageBox(s->hwnd,"", "НеподключенаMyWindow", МВ_ОК); hp=pi/100,•
p=s->timer/s->tmax*100,• iP=p,•
if (iP>10 0) iP=10 0,•
if ( iP>s->percent || s->percent ==100 || (s->percent && ! s->stop0 && ! s->stop1 && ! s->stop2 && ! s->stop3))
{
MessageBeep(1),• ар^р*р + 0.0001; if (ap>pi) ар=р^-
xRp = s->maxX-2,• уНр=2;
GetTextMetrics(s-sprintf(comwork,
GetTextExtentPoint32(s-i=xRp-size.cx,• xLp = i,•
sprintf(comwork,"Модель \"%s\"",s->mюdname),•
GetTextExtentPoint3 2(s->memdc,comwork,strlen(comwork),&size) i=xRp-size.cx,• if (i<xLp ) xLp = i,•
^ = // Получить новое время
newtime = localtime(&ct),•
strcpy(str,asctime(newtime)),• // Время в буфер
str[strlen(str)-1] = '\0',• // Удалить \г\п
GetTextExtentPoint32(s->memdc,str,strlen(str),&size),• i=xRp-size.cx-10,• if (i<xLp ) xLp = i,• xLp -= 9;
yLp = унр + 3 + 12 * (tm.tmHeight + tm.tmExternalLeading)+3,•
->memdc,&tm); //Метрики текста
''Процент выполнения: 100 ");
->memdc,comwork,strlen(comwork),&size)
wX=xLp+3; wY=yHp+3;
TextOut(s->memdc,wX,wY,comwork,strlen(comwork) wY=wY+9*(tm.tmHeight+tm.tmExternalLeading); TextOut(s->memdc,wX,wY,str,strlen(str)); wY=wY + (tm.tmHeight + tm.tmExternalLeading); sprintf(str,"Процент выполнения: %3d "
// Текущий X текста // Текущий Y текста ); // Название
//Время
•iP)
TextOut(s->memdc,wX,wY, wY=wY + (tm.tmHeight +
if (iP == 100) {
sprintf(str,"Выполнена. TextOut(s->memdc,wX,wY,
str,strlen(str)); tm.tmExternalLeading)
str,strlen(str)
// Процент
88 j
ПРИКЛАДНАЯ ИНФОРМАТИКА /-
' № 5 (47) 2013
Окончание листинга 12 §
} !1
else if (s->nd == 0) §
{ *
sprintf(str,"Моделирование ");
TextOut(s->memdc,wX,wY,str,strlen(str)); }
xL=(xLp+xRp)/2; // X и Y центра эллипса
hE=6*(tm.tmHeight + tm.tmExternalLeading); // Высота эллипса
wE=hE; // Ширина эллипса
xL=xL-hE/2.0; // X левого верхнего уг
ла
yL=yHp+3+2*(tm.tmHeight+tm.tmExternalLeading); // Y лев.верхн. угла SelectObject(s->memdc,s->hRedpen); // Выбрать красное перо
SelectObject(s->memdc,s->hWhitebrush); // Выбрать белуюк исть
Ellipse(s->memdc,xL,yL,xL+wE,yL+hE); // Эллипс
xS1=xL+wE*(1-sin(ap))/2; xS2=xL+wE*(1+sin(ap))/2; yS =yL+hE*(1+cos(ap))/2;
SelectObject(s->memdc,s->hCyanbrush); // Выбрать бирюзовую кисть
Pie(s->memdc,xL,yL,xL+wE,yL+hE,xS1,yS,xS2,yS); // Сектор
SelectObject(s->memdc,s->hBluepen); // Выбрать синее перо
MoveToEx(s->memdc,xL+wE/2-1,yL-s->maxY/60,NULL); LineTo(s->memdc,xL+wE/2-1,yL+hE+s->maxY/6 0); MoveToEx(s->memdc,xL-s->maxX/80,yL+hE/2-1,NULL); LineTo(s->memdc,xL+wE+s->maxX/80,yL+hE/2-1);
SelectObject(s->memdc,s->hHollowbrush); // Выбрать прозрачнуюк исть SelectObject(s->memdc,s->hGreenpen); // Выбрать зеленое перо
Rectangle(s->memdc,xLp,yLp,xRp,yHp); // Прямоугольник
s->percent=iP;
//---------------------------------------------------------------------------
// Передача области памяти через pointer //---------------------------------------------------------------------------
townname=(char*)s->pointer; sprintf(str,"%s",townname);
Text0ut(s->memdc,10,10,str,strlen(str)); //---------------------------------------------------------------------------
InvalidateRect(s->hwnd,NULL,1); }
return; }
со Q
I
О §
a;
ss"
О
U §
CO §
.Ii
экрана. Если же окно сделать без данного сервиса, программа будет значительно короче и понятнее.
Замечание. Если модель содержит функциональное окно для конечного пользователя, то соответствующий а71-файл должен быть помещен в одну из папок:
• в ту же папку, где находится ехе-файл модели (независимо от типа операционной системы, это проще всего);
• в папку System32 (в системах типа Windows XP/7/8 для этого необходимо получить режим администратора).
Модернизация и выполнение моделей
Модернизация моделей. Все элементы проекта автоматически сохраняются средствами Visual Studio. Для того чтобы прервать разработку, необходимо выполнить следующее:
№ 5 (47) 2013
Ü sc
0
Чч
U ^
1
SS §
со i I i I I
t ss
I
s
Ü e
0
1
I
0 &
1
0 §
• на всякии случаи принудительно сохранить последний модифицированный текст модели (если модификации были), выполнив действия File ^ Close через главное меню VisualStudio или нажав значок «дискета» на панели инструментов;
• затем либо выйти из VisualStudio (если нет других проектов), либо в главном меню выполнить действия File ^ CloseWorkspace, если нужно перейти к другому проекту.
Модернизация моделей возможна и по завершении ее разработки. Чтобы выполнить модернизацию ранее созданной модели, через меню Visual Studio открывается существующий проект:
File ^ OpenWorkspace.
Далее автоматически подключается проводник для поиска файла управления проектом с суффиксом dsw (например, Taxomotor.dsw). Этот файл автоматически показывается в папке с проектом. После двойного щелчка по имени этого файла проект восстановится в том виде, в котором он находился в последний раз (повторно его собирать не нужно). Можно сразу перейти к изменению любых текстов и состава модели.
Отлаживаемая модель по умолчанию создается в виде exe-файла в папке Debug, вложенной в папку с проектом. В данном ехе-файле присутствует все необходимое для поддержания процесса отладки модели. Окончательный вариант отлаженной модели
обычно берется из папки Release: он работает быстрее и меньше по объему.
В процессе отладки модель запускается из папки Debug одним из двух способов:
• нажатием комбинации Ctrl + F5;
• через главное меню Build ^ Execute Taxomotor.exe.
Файл с моделью можно переписать в любую другую папку и на любой другой компьютер — модель не всегда сможет быть запущена.
Выполнение модели
После запуска исполняемого файла модели ее взаимодействие с пользователем осуществляется через главное меню, автоматически создаваемое для каждой модели. Меню реализует четыре основных режима работы модели:
• настройка;
• моделирование;
• результаты;
• помощь.
Режим настройки. Этот режим вызывается нажатием клавиши Настройка. В открывающемся подменю (рис. 18) предлагается конкретизировать данный режим с помощью дополнительных восьми клавиш.
Клавиша Работа со SPACE-массивами вызывает проводник операционной системы, с помощью которого текстовый файл, имеющий суффикс spa и содержащий координаты пунктов пространства модели, становится доступным. Такой spa-файл необходимо заранее создать вручную или выка-
-ф-' Actor Pilgrim 2012 00(Х)
Настройка Моделирование Результаты Помощь
Работа со space-массивами > Открыть окно функциональной задачи F3 Работа с ГЕО-картографией > Прикрыть функциональное окно Alt+F3 Выдвинуть панель инструментов Убрать панель инструментов Включить/Выключить звуковое сопровождение Выход в Operation System Alt+F4
Рис. 18. Подменю режима настройки модели
90
№ 5 (47) 2013
Таблица 2
Название пункта
Формат текстового space-файла
Широта
Долгота
Параметры
I
Параметр 1 Параметр 2
1-24 26-36 38-48 50 52-61 63-72
Александров +056°24'33» +038°43'43» d 45.0 2.0
Апрелевка +055°33'23» +037°05'15» r 19.6 2.0
Балашиха +055°48'55» +037°57'53» d 131.5 1.6
Бронницы +055°26'05» +038°16'59» w 17.2 2.0
Верея +055°20'43» +036°12'41» r 4.9 1.6
Видное +055°32'50» +037°45'39» d 52.5 1.6
Владимир +056°08'20» +040°24'11» g 234.0 4.8
Волоколамск +056°01'49» +035°57'26» d 17.2 2.0
Воскресенск +055°18'50» +038°43'40» d 78.8 3.6
Высоковск +056°19'42» +036°34'02» r 11.9 1.2
Гагарин +055°32'48» +035°01'42» d 16.0 1.6
Дедовск +055°52'15» +037°09'00» r 28.8 1.2
Дзержинский +055°38'00» +037°51'15» w 38.8 1.2
Дмитров +056°21'18» +037°32'21» d 63.0 2.0
Долгопрудный +055°56'26» +037°33'00» w 74.5 1.6
Домодедово +055°25'16» +037°49'03» d 57.8 2.8
чать из базы данных для модели, работающей с пространственно-распределенными данными. Все поля файла отделяются друг от друга одним пробелом. Посимвольный формат файла приведен в табл. 2.
Каждый пункт местности имеет свой статус. Обычно принимаются следующие обозначения статуса:
д — административный центр региона; а — районный центр, являющийся городом областного подчинения;
t — районный центр, являющийся городом;
V — районный центр, являющийся ПГТ или селом;
w — город областного подчинения; г — город районного подчинения; h — село, поселок, деревня, хутор, ж/д станция, пристань; т — метеостанция; г — пункт триангуляции; в — пункт старта; f — пункт финиша;
и — неизученный населенный пункт; п — пункт, который не нужно отображать во время моделирования.
В файле могут присутствовать десяти-символьные параметры населенных пунктов, максимальное число которых 8. В таблице показаны два таких параметра.
Нажатие на клавишу Открыть окно функциональной задачи создает окно для подключения а11-программы, созданной по принципу «Проект модели с функциональным окном».
Клавиша Работа с ГЕО-картографией позволяет произвести подключение растровой карты с оцифрованными координатами в специальном окне либо вызвать а11-про-грамму для работы с векторной геоинформацией в предварительно открытом окне функциональной задачи.
Назначение клавиш Прикрыть окно функциональной задачи, Выдвинуть панель инструментов и Убрать панель инструментов понятно по их названию.
№ 5 (47) 2013
Actor Pilgrim 2012 00(Х)
НИИ Моделирование Результаты Помощь
Запуск модели F4 Принудительная аварийная остановка модели Esc Приостановка F5 Продолжение F6 Переход к трассировке F7 Запуск с трассировкой Alt+F7 Управление масштабом времени F8 Запуск с установкой масштаба времени Alt+F8
Рис. 19. Подменю режима моделирования
¡E
U
I Й
I
00 ! s
1 ¡
I
t ss
I
5
ü s
0 ¡
1
o
6
g
o §
При работе с моделями, имеющими длительное время выполнения, полезна также звуковая индикация. Она подключается с помощью клавиши Включить/Выключить музыкальное сопровождение.
Клавиша Выход в Windows понятна по ее названию.
Режим «Моделирование». В открывающемся подменю (рис. 19) предлагается конкретизировать этот режим с помощью дополнительных восьми клавиш.
Клавиша Запуск модели просто передает управление в ехе-файл модели.
Если пользователь понял, что фазовая траектория модели неинтересна и необходимо прекратить процесс моделирования, то используется клавиша Принудительная аварийная остановка модели.
Клавиша Приостановка используется для временной остановки процесса моделирования и анализа информации на экране монитора, если она изменяется слишком быстро. Процесс моделирования восстановится, если нажать клавишу Продолжение.
Клавиша Переход к трассировке переводит процесс моделирования в отладочный режим, описанный выше. Если необходимо сразу обеспечить такой режим работы модели, то используется клавиша Запуск модели с трассировкой.
Переход из режима максимально ускоренного масштаба времени в пропорционально замедленный (и наоборот) позволяет клавиша Управление масштабом времени. В результате вызывается диалоговое окно редактирования (рис. 20), где нужно ука-
зать интервал времени не менее 0,001 сек. Это интервал задержки процесса выполнения модели после каждого события. Если указать 0 или интервал менее 0,001 сек., то произойдет перевод моделирования в максимально-ускоренный режим.
Клавиша Запуск с установкой масштаба позволяет сразу, перед запуском модели, установить нужный масштаб времени.
Режим «Результаты». Это основной режим просмотра параметров модели в стандартах системы имитационного моделирования Actor Pilgrim. В открывающемся подменю (рис. 21) предлагается конкретизировать этот режим с помощью дополнительных пяти клавиш.
Нажатие клавиши Параметры узла открывает диалоговое окно, позволяющее выбрать интересующий узел по его номеру и наблюдать за изменением параметров узла в процессе моделирования. В примере функционального окна на рис. 22 (правая часть) представлена следующая информация:
• модель называется «Предупреждение»;
• узел № 4 key называется «Показатель риска»;
• выполнено 83% времени моделирования, заданного в modbeg;
• моделирование продолжается;
• для узла № 4 типа key получено среднее время пребывания в закрытом (в данном случае в незащищенном состоянии) 7,01 ед. времени;
• коэффициент вариации в квадрате этого времени — 0,243 или 2,43%;
92
№ 5 (47) 2013
5
Actor Pilgrim 2012
Настройка Моделирование Результаты Помощь
28
21
14
Узел 51 send "Расчетный счет"
Модель "Предупреждение"
Настройка масштаба времени моделирования
0.01
Изменение
Выполнить
1. Измените задержку (секунды)
2. Нажмите [Изменение] для ввода
3. Нажмите [Выполнить] или повторите 1 и 2
91
182
273
364
Время hold: 7.01
Коэф. вариации C2: 2.43 Текущее состояние: закрыт
hold-состояние 77.723 %
Рис. 20. Окно редактирования масштаба времени
• модель находится в защищенном состоянии посредством узла № 4 типа key 77,723 процентов времени;
• интегральная вероятность рискового события на данном интервале времени моделирования составляет 1-77,723/100 = 0,22277 < 0,25.
Клавиша Динамика задержек в очереди позволяет перейти к просмотру ситуаций в очереди, указанной в операторе modbeg. В качестве примера вновь вернемся к рис. 22, где в левой части показана динамическая экранная форма с результатами — изменяющийся в процессе работы
модели и автоматически масштабируемый график состояния узла типа send «Расчетный счет».
По оси X отложено время моделирования в выбранных единицах измерения (в этом случае моделируется интервал в 365 дней, т. е. год). По оси Y показаны измерения интервалов времени, в течение которых на расчетном счете нет средств, чтобы осуществлять платежи поставщикам, банку и другим (тоже в днях). Из графика видно, что на момент завершения третьего квартала получена неожиданная задержка в 28 дней, хотя в первом полугодии она в сред-
Actor Pilgrim 2012
Настройка Моделирование
Результаты
Помощь
Параметры узла F9
Динамика задержек в очереди F10
Динамика потока F11
Мониторинг перемещений в пространстве F12
I
со
0
1
о §
а;
Эй
S* 00 о
U §
'S
со §
I
Рис. 21. Подменю режима просмотра результатов
93
7
5
0
0
№ 5 (47) 2013
Ш.
Actor Pilgrim 2012
Настройка Моделирование Результаты Помощь
28
21
Узел send "Расчетный счет"
Введите или выберите узел модели
Указали
Выбрали
91 182 273 365
Модель "Предупреждение"
Wed Jan 14 10:20:51 2009 Процент выполнения: 83
Узел №4 key "Показатель риска" Время hold: 7.01
Коэф. вариации C : 2.43 Текущее состояние: закрыт
hold-состояние 77.723 %
4
7
5
0
0
Рис. 22. Просмотр результатов моделирования в конкретном узле: выбран узел № 4 key «Показатель риска»
¡E
U
I Й
I
со §
1 i I I
t =s
I
s
i e
о ¡
&
о &
8
о §
нем не превышала 5 дней. Такой прогнозный результат наверняка должен заинтересовать конечного пользователя имитационной модели: существенные задержки платежей создадут риск банкротства.
Динамику потока акторов в узле типа term, указанном в операторе modbeg, можно наблюдать после нажатия клавиши Динамика потока. Появляется график, подобный динамике задержка в очереди, но отличающийся смыслом оси Y: вместо задержек по этой оси откладываются изменяющиеся значения потока, измеряемые в акторах за единицу модельного времени.
Клавиша Построение пространства позволяет получить упрощенное векторное изображение пространства, в котором происходят моделируемые процессы (например, для изображения маршрута транспортных средств [6, 7]).
Картографическая информация отображается в виде стандартной конической развертки участка Земли, вписанного в прямоугольник — электронный образ листа бумажной карты.
Режим Помощь. В данном режиме можно получить некоторую справочную информацию. В открывающемся подменю (рис. 23) предлагается конкретизировать этот режим с помощью пяти дополнительных клавиш.
Клавиши-акселераторы позволяют получить справочную информацию о клавишах-акселераторах основного меню.
Клавиша Управление трассировкой выводит краткую информацию о диалоговом управлении трассировкой модели.
Клавиша Управление масштабом времени позволяет получить подсказку о том, как задавать масштаб времени с помощью диалогового окна.
Последняя клавиша О программном продукте выводит информацию о корректной лицензионности программного пакета Actor Pilgrim.
Заключение
Подведем некоторые итоги, объясняющие методические отличия Actor Pilgrim от более ранней версии пакета Pilgrim-5.
94
№ 5 (47) 2013
ЕЕ
Actor Pilgrim 2012
Настройка Моделирование Результаты
Помощь
Клавиши-акселераторы Управление трассировкой Управление масштабом времени О программном продукте
F1
Alt+F1
F5
F8
Рис. 23. Подменю режима помощи
1. Программисту предоставляется возможность получать, задавать и использовать значения параметров акторов, узлов и глобальных переменных моделирующей системы. Для наблюдения пространственной динамики и отладки сложных моделей используется эффективный инструмент — диалоговый трассировщик модели. Окончательные выходные данные отображаются в итоговой таблице.
2. Имитационная модель создается с применением студенческой оболочки Visual C++ и некоторых элементов C++. Введены в употребление типовые технологические последовательности действий, необходимые при создании, модернизации и выполнении моделей. Разработчик может создать типовой проект, проект с диалоговым окном для управления параметрами при запуске модели или во время ее выполнения.
3. Динамическое управление моделью прямым регулированием параметров с помощью стандартного средства Parametr существенно облегчает проведение эксперимента.
4. Иногда для внедрения модели в состав системы поддержки принятия решений требуется создание проблемно-ориентированных диалоговых окон, содержимое которых понятно лицу, принимающему решения (ЛПР). Это самая ответственная работа по внедрению модели, эффективность которой, понятная разработчику-профессионалу, станет понятной ЛПР только после создания такого окна.
Список литературы
1. Емельянов А. А. Концепция и возможности ак-торно-ориентирован-ной системы имитационного моделирования Actor Pilgrim. Часть I // Прикладная информатика. 2012. № 6 (42). С. 49-66.
2. Емельянов А. А. Концепция и возможности ак-торно-ориентированной системы имитационного моделирования Actor Pilgrim. Часть II // Прикладная информатика. 2013. № 1 (43). С. 41-53.
3. Емельянов А. А. Лаг-генераторы для моделирования рисковых ситуаций в системе ActorPilgrim // Прикладная информатика. 2011. № 5 (35). С. 98-117.
4. Емельянов А. А. Планирование экстремальных экспериментов с имитационными моделями // Прикладная информатика. 2013. № 3 (45). С. 76-90.
5. Емельянов А. А., Власова Е. А, Дума Р. В., Емельянова Н. З. Компьютерная имитация экономических процессов / под ред. А. А. Емельянова. М.: Маркет ДС, 2010. — 464 с.
6. Емельянов А. А., Емельянова Н. З. Имитационное моделирование и компьютерный анализ экономических процессов. Смоленск: Универсум, 2013. — 266 с.
7. Емельянов А. А., Емельянова Н. З. Технология работ с топографической информацией в имитационных моделях Actor Pilgrim // Прикладная информатика. 2013. № 4 (46). С. 65-91.
8. Емельянов А. А., Корнейчук Н. А., Руднев Ю. П. Система коллективного управления процессом моделирования // Управляющие системы и машины (УСиМ). 1983. № 3. С. 38-43.
95
I
со
0
1
о £ а;
Эй
S* о
U §
<2
со §
I