Математическое моделирование. Документ Microsoft Word. исследование и оптимизация свойств локальных информационных систем
Скачать 1.67 Mb.
|
Тема 10. Программная модель в системе Pilgrim Цели изучения темы: · познакомиться с технологией создания Pilgrim -модели; · выяснить состав результатов моделирования; · изучить правила выполнения основных этапов технологии создания и использования модели. Задачи изучения темы: · понять назначение языковых средств системы Pilgrim; · выяснить состав, структуру и форматы выходных параметров моделирования. Успешно изучив тему, Вы: получите представление о: · основных языковых средствах системы Pilgrim; · структуре и форматах разделов программной Pilgrim-модели; · составе узловых операторов модели; будете знать: · как прочитать текст программной модели на исходном языке; · как внести изменения модель минуя этап описания ее графа; · как собрать исполнительный модуль модели; · как запустить модель; · как прочитать результаты моделирования; · семантику и синтаксис основных узлов. Вопросы темы: 1. Структура программной модели в системе Pilgrim. 2. Узловые операторы. 3. Текст программной модели СМО. 4. Сборка и запуск исполнительного модуля модели. 5. Результаты моделирования. Вопрос 1. Структура программной модели в системе Pilgrim. Все узлы имитационных моделей являются процессами в системе Pilgrim. Стохастическая сеть, в виде которой представляется модель, не является вычислительным алгоритмом. Попытки представить имитационную модель в виде набора алгоритмов приводят к написанию больших (и сложных) моделирующих программ. Такой подход называется алгоритмическим моделированием; он не всегда доступен прикладному специалисту, даже имеющему подготовку в области программирования. Модель реальной системы может состоять из очень большого числа узлов. Поэтому нужны специальные языковые средства, не являющиеся языком программирования, которые бы позволили в лаконичном (по сравнению с текстом компьютерной программы) виде описать модель. Эти средства должны учитывать особенности узлов, жизненных циклов транзактов, условий прохождения транзактов по дугам, их размножения и гибели, а также функциональные особенности взаимодействия процессов, связанных с финансовыми, материальными и информационными ресурсами. Набор языковых средств, предназначенных для описания имитационных моделей процессов, обеспечивает выполнение следующих задач: 1) Инициализацию объектов и структур данных при запуске программной модели. 2) Описание узлов с помощью общих операторов управления транзактами, событиями и узлами модели. 3) Функциональное описание процессов управления материальными и денежными ресурсами. 4) Управление переходами между слоями модели при многоуровневой декомпозиции. 5) Описание сигнальных управляющих функций. Данные средства по форме записи являются функциями, через параметры которых реализуются синтаксические связи между объектами (узлами, транзактами, ресурсами и событиями) имитационной модели. Форма записи различных условий и условных действий соответствует языку C++. Ниже представлен перечень основных разделов программного модуля на языке C++, на основе которого формируется исполнительный модуль для реализации модельных экспериментов (названия необязательных разделов заключены в квадратные скобки).
Препроцессорная инструкция #include подключает моделирующую среду имитатора к модели. Оператор modbeg (Р1, Р2, Р3, Р4, Р5, Р6, Р7, Р8, Р9) осуществляет первоначальную настройку моделирующих программ и инициализацию в памяти ЭВМ графа модели. Аргументы этой функции имеют следующий смысл: Р1 – символическое имя узла: строка длиной до 14 символов (типа char); Р2 – максимальный номер узла модели (типа int), причем 2≤p2≤mmax, где mmax – некоторое граничное значение, задаваемое при установке имитатора на ЭВМ (обычно mmax =1024); Р3 – модельное время, в течение которого необходимо производить моделирование (типа float); Р4 – произвольное целое число, используемое для настройки датчиков псевдослучайных величин (long). В каждом узле есть свой независимый датчик. В качестве этого числа полезно использовать значение таймера ЭВМ, обращение к которому имеет следующий вид p4=(long)time(NULL). В этом случае результаты разных прогонов модели будут разными, имеющими случайные отклонения. При отладке лучше использовать постоянную комбинацию цифр, например, p4=(long)2013456789. Р5 – признак режима пространственной имитации (типа int); возможные значения: · earth –поверхность Земли (сферические географические координаты широта и долгота); · plane –декартова плоскость (прямоугольная система координат); · cosmos –произвольное пространство (ответственность за правильность его представления возлагается на разработчика модели); · none – если пространственная имитация в модели не используется. Р6 – номер (типа int) одной из очередей (узел типа queue, attach или send), которую необходимо контролировать во времени для анализа динамики задержек в этой очереди с графическим отображением результатов. Р7 – номер (типа int) одного из процессов (узла типа proc), который необходимо контролировать как в пространстве, так и во времени с графическим отображением результатов. Если нет необходимости в графической интерпретации, то указывается none. Р8 – номер (типа int) терминатора (узел типа term), на входе которого необходимо наблюдать интенсивность потока транзактов во время моделирования. Если такой необходимости нет, то указывается none. Р9 – точность (типа int). Если Р9=1..6, то имитатор будет использовать от 1 до 6 знаков после запятой при выводе результатов; если Р9=none, то результаты будут округляться до целых значений. Оператор network (Р1, Р2) представляет собой координатор процессов модели. Он осуществляет диспетчеризацию транзактов в узлах модели, планирует события в едином модельном времени и активизирует дискретные или непрерывные компоненты модели, имитирующие внешнюю среду. Аргументы Р1 и Р2- это имена (адреса) соответствующих программных функций моделирования внешней среды, производящих интегрирование, решение разностных уравнений, вычисление по формулам и т.д. Функции float Р1 (d) и float Р2 (d), если они необходимы, пишутся пользователем. Если процессы Р1 (d) и Р2 (d) не моделируются, то в качестве Р1 и Р2 записывается dummy. Оператор modend (Р1, Р2, Р3, Р4) выполняется по окончании моделирования. Он позволяет просмотреть на экране монитора графические результаты и выводит итоговые результаты в файл-отчет. Аргументами оператора являются: Р1 – символическое имя файла-отчета (сhar); Р2 – номер первой страницы отчета (int); Р3 – число строк на каждой странице (int); Р4 – флаг символа перевода страницы в файле-отчете; возможные значения: · page символ ставится; · none символ не ставится. Вопрос 2. Узловые операторы. Узел в тексте программы состоит из шести компонентов (необязательные компоненты заключены в квадратные скобки):
Описание узла начинается с метки-функции top (i), где i - номер этого узла (записывается с двоеточием). Начиная с метки top(i) транзакт проходит все операторы узла i без временных задержек и попадает в оператор place, где находится до тех пор, пока не появятся условия для перехода в следующий узел. В некоторых узлах одновременно могут находиться несколько транзактов и все они содержатся в операторе place. Не следует путать поток транзактов в модели с потоком управлений в обычной программе. Задержка транзакта в place - это и есть время пребывания в узле. После метки top(i) можно анализировать условия продвижения транзактов по графу модели, при этом используются операторы if или switch. Для динамического изменения направления движения транзактов, законов распределения, значений времени обслуживания и других параметров можно использовать операцию присваивания. Например, если в узле 3 нужно изменить значение переменной b в зависимости от значения переменной а, то следует записать: top(3): if (a < 0) b =4; else b =3*а+5; key («Переключатель», b); place; где key - оператор, определяющий узел типа клапан. Основным обязательным оператором, который стоит после двоеточия метки-функции, является оператор определения типа узла (узловой оператор). Этот оператор имеет условное наименование, совпадающее с типом узла. Сводка и краткая характеристика всех узлов, имеющихся в системе Pilgrim приводится в Приложении. В качестве узловых операторов могут использоваться все типы узлов кроме ag и parent. После узлового оператора могут размещаться сигнальные функции и операторы С++, образуя конструкцию: clcode { <операторы> } Эти операторы могут задавать различные действия по управлению работой модели, например, по сбору статистики или трассировке, которые будут обсуждаться далее. Последним оператором узла является оператор place; Описание узла иногда состоит только из метки-функции top(i), узлового оператора и оператора place. Например: top(i): key ( «Переключатель», j ); place; Вопрос 3. Текст программной модели СМО. На рис. 33 показан текст программы, который был сгенерирован на основании описания модели в конструкторе Gem для ранее рассмотренной модели СМО. #include forward { int fw; modbeg («СМО», 105, 2500, (long)time(NULL), none, 102, none,104, 2); ag («Генератор», 101, none, expo, 12.0, none, none, 102); network (dummy, dummy) { top (102): queue(«Очередь», none, 103); place; top (103): serv(«Сервер», 1, none, expo, 9.0, none, none, 104); place; top (104): term(«Терминатор 104»); place; fault (123); } modend («pilgrim.rep», 1, 8, page); return 0; } Рис. 33. Исходный текст программной модели СМО Для лучшего понимания сгенерированного текста приведем описание присутствующих в программе узловых операторов. Функция ag (Р1, Р2, Р3, Р4, Р5, Р6, Р7, Р8) описывает узел, порождающий в соответствии с заданным правилом в процессе моделирования транзакты и направляющий их в указанную точку (узел) модели. Функция имеет следующие параметры: Р1- символическое имя узла (строка длиной до 14 символов типа char);. Р2- номер узла-генератора (типа int); Р3- число (типа int в диапазоне 1-32767), обозначающее приоритет, который присваивается сгенерированному транзакту, или none, если приоритет не присваивается; Р4- тип функции распределения интервала времени между генерируемыми транзактами, имеющий значения: · norm - нормальное распределение; · unif - равномерное распределение; · expo - экспоненциальное распределение; · erln - обобщенное распределение Эрланга; · beta - треугольное распределение; · none -если интервал обслуживания является детерминированной величиной. Р5- величина (типа float), зависящая от типа функции распределения Р4: · математическое ожидание интервала времени обслуживания транзакта (при Р4= norm, unif, expo); · математическое ожидание одного слагаемого этого интервала (при Р4= erln); · минимальное значение интервала (при Р4= beta); · постоянная величина этого интервала (при Р4= попе). Р6 – величина (типа float), зависящая от типа функции распределения Р4: · среднеквадратичное отклонение времени обслуживания (Р4= norm); · максимальное отклонение от среднего времени обслуживания (Р4= unif); · значение zero (Р4 = expo, none); · число слагаемых, распределенных по экспоненциальному закону и входящих в случайный интервал обслуживания (если Р4= erln, то Р6 > 0); · наиболее вероятное значение интервала времени обслуживания транзакта (при Р4=beta). Р7- величина (типа float), зависящая от типа функции распределения Р4: · максимально возможное значение интервала времени обслуживания транзакта (Р4=beta); · значение zero (Р4= norm, unif, expo, erln, ш). Р8- номер узла (типа int), в который поступает сгенерированный транзакт (узел-приемник). Функция queue(Р1,Р2,Р3) описывает узел, моделирующий очередь транзактов. Функция имеет следующие параметры. Р1 – символическое имя узла (строка длиной до 14 символов типа char); Р2 – тип организации очереди (типа int): Р2 – ргtу, если очередь с приоритетами, Р2 – none, если очередь без приоритетов. Р3 – номер узла (типа int), в который переходит транзакт из очереди (узел-приемник). Если в качестве параметра Р6 оператора modbeg поставить номер узла-очереди, то можно автоматически получать график изменения среднего времени нахождения транзактов в этой очереди. Функция serv (Р1, Р2, Р3, Р4, Р5, Р6, Р7, Р8) описывает узел, имитирующий одно- или многоканальный обслуживающий прибор. Может использовать или не использовать дисциплину обслуживания на основе абсолютных приоритетов. Имеет стек для хранения прерванных транзактов. Функция имеет следующие параметры: Р1- символическое имя узла (строка длиной до 14 символов типа char); Р2- число обслуживающих каналов, l < Р2<32767; Р3- дисциплина обслуживания; возможные значения: · abs, используется приоритетная дисциплина, с прерыванием обслуживания менее приоритетного транзакта более приоритетным; при этом после ухода приоритетного транзакта возможно одно из двух: · дообслуживание прерванного транзакта с прерванного места; · возобновление обслуживания прерванного транзакта заново. · none, используется бесприоритетная дисциплина. Р4 - тип функции распределения интервала времени обслуживания транзакта в канале узла, возможные значения: · norm - нормальное распределение; · unif - равномерное распределение; · expo - экспоненциальное распределение; · erln - обобщенное распределение Эрланга; · beta - треугольное распределение; · none -если интервал обслуживания является детерминированной величиной. Р5- величина (типа float), зависящая от типа функции распределения: · математическое ожидание интервала времени обслуживания транзакта (при Р4= norm, unif, expo); · математическое ожидание одного слагаемого этого интервала (при Р4= erln); · минимальное значение интервала (при Р4= beta); · постоянная величина этого интервала (при Р4= none). Р6 – величина (типа float), зависящая от типа функции распределения: · среднеквадратичное отклонение времени обслуживания (Р4= norm); · максимальное отклонение от среднего времени обслуживания (Р4= unif); · значение zero (Р4 = expo, none); · число слагаемых, распределенных по экспоненциальному закону и входящих в случайный интервал обслуживания (если Р4= erln, то Р6 > 0); · наиболее вероятное значение интервала времени обслуживания транзакта (при Р4=beta). Р7- величина (типа float), зависящая от типа функции распределения: · максимально возможное значение интервала времени обслуживания транзакта (Р4=beta); · значение zero (Р4= norm, unif, expo, erln, none). Р8- номер узла (типа int), в который передается обслуженный транзакт (узел-приемник). Функция term (Р1) описывает узел-терминатор, который удаляет из модели входящий в него транзакт и фиксирует время его существования начиная с момента выхода этого транзакта из генератора. Функция имеет один параметр: Р1- символическое имя узла (строка длиной до 14 символов типа char). Если в качестве параметра Р8 подставить в modbeg номер узла-терминатора, то можно автоматически получать график потока транзактов, поступающих на его вход. Вопрос 4. Сборка и запуск исполнительного модуля модели. Сгенерированный в результате описания модели файл с исходным текстом (<имя модели>.cpp) используется в качестве основы для получения работающей программы. Для этого необходимо выполнить следующую последовательность шагов. 1) Создать на жестком диске рабочую папку для будущего проекта. 2) Перенести в рабочую папку файл модели <имя модели>.cpp. 3) Открыть приложение Microsoft Visual С++. 4) Создать проект: · File à Newà Projects à Win32 Application. · В окне Locaton посредством кнопки (Browse) указать путь к файлу модели <модель>.cpp. · В окне Project name указать имя проекта (латинскими буквами) и нажать кнопку OK. · В открывшемся окне оставить неизменными установку по умолчанию для типа проекта (Empty application) и нажать кнопку OK. 5) Внести в проект файлы, необходимые для построения объектного кода модели (в таблице указаны папки, в которых обычно хранятся файлы):
Вставка выполняется командой Add Files To Folder / Add Files To Project контекстного меню, вызываемого правым щелчком мыши после установки курсора на имя проекта (предварительно должна быть выбрана вкладка в окне проектов). 6) Построить исполняемый файл модели. · Выполняется одним из следующих способов: o Build à Rebuild All главного меню Visual Studio. o Нажатием функциональной клавиши F7. o Нажатием значка панели инструментов. Если в окне отчета о процессе построения появится сообщение 0 errors, можно запустить программную модель с помощью одного из следующих способов: · Build à Execute ModelPro.exe. · Нажатием комбинации функциональных клавиш Ctrl + F5. · Нажатием значка панели инструментов. Установка параметров запуска модели и сам запуск производятся с помощью окна запуска. В частности, если требуется наблюдать график задержки по выбранной при построении графа модели очереди в динамике, то перед запуском программной модели нужно выбрать в меню Результаты пункт Динамика задержек в очереди (рис. 34Рис.). Рис. 34. Задание динамического отображения очереди Можно также выбрать режим динамического построения графика потока в транзактов в терминаторе (меню Результаты пункт Динамика потока). После установки всех необходимых значений параметров в меню Моделирование нужно выбрать пункт Запуск модели (рис. 35). Рис. 35. Запуск имитационной модели Из общего меню модельного окна осуществляется также управление режимами трассировки, которая может помочь в отладке модели. В частности, имеется возможность (рис. 35): · выйти в режим трассировки после наступления конкретного события; · перейти в трассировку, если какой-то транзакт входит в определенный - узел или выходит из него; · отслеживать путь определенного транзакта по графу модели; · выйти в режим трассировки по показанию модельного таймера. Вопрос 5. Результаты моделирования. Основные результаты запуска программной модели помещаются в таблицу, которая содержится в файле с параметрами задаваемыми оператором modend. На рис. 36 приводится пример таблицы с результатами моделирования для модели СМО:
Рис. 36. Результаты моделирования для модели СМО Строки таблицы представляют собой узлы модели, а столбцы – входные и выходные её параметры. В столбцах записываются:
После окончания процесса моделирования можно посмотреть график, а также выходные параметры всех узлов модели (также с помощью меню Результаты). Пример отображения графика, построенного в процессе имитации, показан на рис. 37, на котором синим цветом показано среднее время задержки в очереди за все время моделирования. Рис. 37. Окно результатов запуска модели Если после запуска модели требуется внести в нее какие-либо изменения, то перед очередным построением исполняемого файла необходимо закрыть окно модели. Изменения можно вносить, минуя стадию создания с помощью конструктора файла .pgf непосредственно в файл .cpp,. Следует иметь в виду, однако, что эти изменения не будут отражены в файле .pgf. Выводы: 1. Имитационные модели сложных систем могут содержать много узлов со сложными взаимосвязями между ними и сложной логикой протекания процессов. Для описания этих объектов и свойств оригинала в моделирующих комплексах применяются высокоуровневые средства, позволяющие создавать модель прикладным специалистам и не требующих специальных знаний в области программирования. 2. Вместе с тем, эффективность работ по созданию и последующей модификации программной модели можно существенно повысить в случае, когда разработчику предоставлена возможность внесения изменений непосредственно в исходный текст программной модели. В моделирующих системах типа системы Pilgrim структура программного текста стандартизована и содержится в описании системы, обеспечивая легкую модификацию и исправления. 3. Основные конструкции языка описания моделей в системе Pilgrim имеют унифицированный формат. Настройку моделей можно осуществлять заданием значений параметров узловых операторов и внесением логических конструкций в виде операторов языка С++ или Pascal, обеспечивающих маршрутизацию и управление перемещением транзактов. 4. В моделирующих комплексах типа Pilgrim модель представляет собой скомпилированный модуль. Для этого необходимо произвести сборку исполнительного модуля, которая в системе реализуется стандартной процедурой в среде пакета Visual Studio с включением в проект необходимых компонентов (модулей) системы Pilgrim. 5. Конечной целью имитационного моделирования является получение выходных данных. Моделирующие комплексы включают в себя средства для сбора, обработки и вывода стандартной набора параметров, которые в случае системы Pilgrim имеют специфицированный формат и выводятся в файл с отчетом о результатах моделирования. Вопросы для самопроверки: 1. Какие взаимосвязанные задачи реализуют языковые средства моделирующих комплексов? 2. Из каких основных разделов состоит программная модель системы Pilgrim на исходном языке? 3. Какую функцию выполняет предложение #include ? 4. Каково назначение оператора modbeg? 5. Каково назначение оператора modend? 6. Как можно пронаблюдать в динамике задержки в узлах типа queue? 7. Как можно пронаблюдать в динамике задержки в узлах типа term? 8. Как запустить процесс имитации? Литература по теме: 1. Емельянов А.А., Власова Е.А., Дума Р.В. Имитационное моделирование экономических процессов / Под ред. А.А. Емельянова. – М.: Финансы и статистика, 2009. – 480 с. |