Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по ИМЭП 2007.doc
Скачиваний:
18
Добавлен:
18.12.2018
Размер:
729.6 Кб
Скачать

Технологический процесс построения модели. Пример моделируемого процесса

Рассмотрим технологический процесс создания модели в системе PILGRIM на примере модели системы массового обслуживания с отказами.

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

Известны средний интервал прихода покупателей и среднее время обслуживания клиента кассиром.

Необходимо определить, сколько требуется кассиров в супермаркете, чтобы в течение заданного промежутка времени (например, рабочего дня) не происходило потери клиентов, но в то же время не было значительного простоя сотрудников.

При построении данной модели необходимо задать следующие параметры:

  • интервал прихода покупателей;

  • интервал обслуживания покупателей;

  • максимально допустимое время ожидания обслуживания;

  • количество кассиров;

  • длительность моделирования.

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

  • количество покупателей, пришедших в магазин в течение контрольного периода времени;

  • количество обслуженных покупателей;

  • количество покупателей, ушедших без обслуживания;

  • время ожидания обслуживания;

  • процент загрузки сотрудников банка.

Этапы построения построение графа модели и генерации PILGRIM-программы:

  1. найти на диске папку Gem и запустить файл Gem1.exe;

  2. в меню «Файл» выбрать пункт «Создать» и развернуть рабочую плоскость на весь экран;

  3. с помощью палитры объектов построить граф модели на рабочей плоскости (рис. 3).

Изображения узлов перетаскиваются при нажатой левой кнопке мыши. Нумеруются узлы автоматически, причем первая цифра номера – это номер плоскости, так как в системе PILGRIM есть возможность иерархического построения графов моделей. Имена узлов прописываются в диалоговых окнах описания узлов, вход в которые осуществляется с посощью двойного щелчка мыши на изображении узла графа.

Для удаления узла нужно поместить на узел кнопку с красным косым крестом и подтвердить необходимость удаления.

Стрелки проводятся следующим образом:

    • захватить стрелку (кнопка с синим крестом в круге) левой кнопкой мыши;

    • не отпуская кнопку, поместить указатель мыши на узел-источник стрелки;

    • отпустить кнопку - теперь левый конец стрелки «привязан» к узлу-источнику;

    • поместить указатель мыши на узел-приемник стрелки и щелкнуть левой кнопкой мыши.

Удаляются стрелки как Выходы из узла. Для этого нужно войти в окно описания узла-источника стрелки, пометить мышкой соответствующий выход и затем удалить его с помощью кнопки «Удалить».

Рис. 3. Пример графа модели

Для задания параментров инициализации модели необходимо нажать кнопку ModBeg (Model Begin) под палитрой объектов.

В поле «Название» введите имя модели, которое будет указано в таблице результатов моделирования.

В поле «Узлы» автоматически показывается номер последнего узла модели.

В поле «Время» следует указать обшее время моделирования – длительность периода моделирования. В модели время «течет» в условных единицах, поэтому указывается только количество необходимых отрезков времени, которое должна «прожить» ваша модель. В качестве единичного отрезка разумно принять минимальный отрезок времени, который будет использоваться при задании параметров модели, т.е. если все параметры модели заданы, например, в минутах, то общее время моделировани также следует задавать в минутах.

В поле «ПСЧ» указывается начальное значение для генератора псевдослучайных чисел, необходимых для имитации случайных процесов. Автоматически для этого используется показание компьютерного таймера.

В поле «Пространство» пользователю предлагается выбрать тип пространства, если модель будет работать с координатной плоскостью. В данной лабораторной работе это не требуется.

Поля «Задержка» и «Поток» предназначены для задания номеров контролируемых узлов: очереди (узел «Queue») и терминатора (узел «Term») соответственно. Для указанных узлов в процессе моделирования будут строиться графики времени задержки (очередь) и динамики выходного потока (терминатор). График времени задержки показывает среднее значение времени ожидания транзакта в очереди в каждый единичный отрезок модельного времени. График динамики потока показывает число транзактов, попавших в терминатор в единицу модельного времени (то есть интенсивность выходного потока заявок в моделируемой системе).

В поле «Точность» можно выбрать необходимое число знаков после десятичной точки в таблице результатов моделирования.

В окне «Начальный С++ текст» при необходимости переопределяются имена параметров транзактов и задаются числовые константы.

Окно инициализации ресурсов предназначено для задания начального состояния узлов, которые в данной лабораторной работе не используются.

Кнопка «ModEnd» служит для задания параметров файла результатов моделирования (имя файла, число строк на странице и флаг разбивки на страницы). Можно оставить вариант, предлагаемый по умолчанию.

Кнопка «Переменные» служит для определения рабочих переменных. В рассматриваемой модели необходимо определить переменную T_wait, задающую максимальное время ожидания покупателем в очереди. В случае превышения времени ожидания этого значения покупатель уходит из магазина без покупки.

Описание узлов модели. Для описания узлов необходимо с помощью двойного щелчка мыши на изображении узла графа открыть соответствующее окно настройки. Номера узла и соответствующей рабочей плоскости проставляются автоматически. Имя узла вводится пользователем в соответствии с логической ролью узла в модели. Класс узла позволяет изменить тип узла на другой, имеющий ту же форму графического значка.

Кнопка «Определить параметры» предназначена для задания настроечных параметров узла.

Окна «Общий С++ текст» позволяют описать необходимые дополнительные действия, которые должны выполняться всякий раз, когда в узел входит очередной транзакт. Эти действия (записанные по синтаксическим правилам языка программирования С++) могут быть выполнены либо перед входом транзакта в узел (закладка «Перед входом в уезл»), либо сразу после входа перед началом обслуживания в узле (закладка «Послевхода в узел»).

Разница между этими позициями состоит в следующем. Действия, указанные перед прохождением узла, могут, вообще говоря, быть выполнены моделью более одного раза – при неудачных попытках входа в узел (например, в занятый сервер или в закрытый ключ). Модель реально несколько раз пытается «протолкнуть» очередной транзакт на шаг вперед, и каждый раз выполняются действия «Перед прохождением узла». Таким образом, в этом месте не должно быть указано никаких операций, повторное выполнение которых приведет к ошибке (например, операции типа «х=х+1»). Однако, определение значений переменных параметров настройки узла (если таковые имеются) должно быть сделано именно перед прохождением узла.

Например, рассмотрим настройку генератора ag 103 (рис. 4), для которого необходимо задать интервал генерации заявок как случайную величину. Закон распределения выбирается из списка (в рассматриваемом примере – norm). Параметр 1 и параметр 2 – наиболее вероятное значение и среднеквадратическое отклонение случайной величины (в случае нормального закона распределения). Приоритет порождаемых генератором заявок в данном случае не задается, так как в модели имеется только один генератор, и заявки не будут отличаться по приоритетам.

В очереди заявок (рис. 5) помимо логического имени узла, после прохождения узла указана операция определения времени входа транзакта в очередь. Для этого в параметр транзакта t-ru0 заносится показание модельного таймера (текущее значение модельного времени).

Рис. 4. Описанеи узла Ag 103

Рис. 5. Описание узла Queue 102

Узел KEY в рассматриваемой модели используется в качестве вспомогательного узла принятия решения о дальнейшем маршруте транзакта. В качестве операции перед прохождением узла здесь выступает определение разницы между текущим показанием модельного времени (timer) и моментом входа транзакта в очередь (t->ru0). На основании полученного значения времени определяется дальнейший путь транзакта (рис. 6)– либо на обслуживание в узел 101 (сервер), либо на уничтожение в узел 106 (терминатор).

В узле serv 104 помимо закона и параметров распределения периода обслуживания покупателей кассиром задается количество каналов. По умолчанию количество каналов равно нулю и модель работать не будет – необходимо указать количество каналов больше 0.

Терминаторы помимо символического имени не имеют других настраиваемых параметров.

После того, как граф модели построен и все узлы полностью описаны, модель необходимо сохранить в графическом формате. Для этого в меню «Файл» нужно выбрать пункт «Сохранить», затем выбрать адрес сохранения на диске и ввести имя файла. Расширение .pgf (pilgrim graphic file) будет подставлено автоматически.

Рис. 6. Настройка условий перехода из узла 104

Далее необходимо осуществить генерацию кода модели для чего в меню «Выполнить» выбрать пункт «Генерировать С++ файл». В указанной пользователем папке будет создан файл PILGRIM-программы с расширением .cpp (имя также вводится пользователем).

Например, для рассматриваемого примера код модели имеет следующий вид:

#include <Pilgrim.h>

forward

{

int fw;

float T_wait=0.3;

modbeg("nonamed", 107, 24, (long)time(NULL), none, 102, none,105, 2);

ag("Покупатели", 103, none, norm, 0.5, 0.1, none, 102);

network(dummy, dummy)

{

top(101):

serv("Кассиры", 1, none, norm, 1, 0.1, none, 105);

place;

top(102):

queue("Очередь", none, 104);

clcode{

t->ru0=timer;

}

place;

top(104):

if( (timer-t->ru0)<T_wait )

{

fw=101;

}

else

{

fw=106;

}

key("Обслужить?", fw);

place;

top(105):

term("Обслужен");

place;

top(106):

term("Отказ");

place;

fault(123);

}

modend("pilgrim.rep", 1, 8, page);

return 0;

}

Сборка проекта:

    • создать на жестком диске рабочую папку для будущего проекта;

    • перенести в рабочую папку файл модели в формате .cpp;

    • вызвать Visual Studio, создать новое рабочее пространство (Workspace): File –> New – > Project –> Win32Application. В окне Location задать место расположения проекта, а в окне Project Name – имя проекта;

    • подключить необходимые для построения объектного кода модели файлы ресурсов, библиотек и д.т. Добавление файлов в проект осуществляется путем выбора в главном меню пункта Project –> Add to Project –> Files. В проект необходимо подключить следующие файлы:

  • созданный файл PILGRIM-программы с расширением .cpp;

  • файл ресурсов Windows для моделей PILGRIM …\Projects\Pilgrim.res;

  • …\Lib98\Pilgrim_2047.lib;

  • …\Lib98\Comctl32.lib;

  • …\Include\Pilgrim.h;

– выполнить сборку проекта: выбрать пункт меню Build – > RebuildAll.

В результате в папке проекта появится вложенная папка Debug, в которой будет автоматически собрана готовая к выполнению программа – файл с расширением .exe.

Перед запуском процесса имитации целесообразно выбрать в меню Результаты пункт Динамика задержки. После этого в меню Моделирование выбрать пункт Запуск модели. Тогда график задержки по выбранной при построении графа модели очереди будет изображаться динамически. Можно также выбрать динамическое построение графика динамики потока в терминаторе.

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

Результаты моделирования рассматриваемой модели представлены в файле pildrim.rep в виде следующей таблицы (рис. 7). На рисунке подробно показан процесс интерпретации результатов моделирования. Серым цветом выделены входные параметры модели.

Если после запуска модели требуется внести в нее какие-либо изменения, то перед новым построением исполняемого файла необходимо закрыть окно модели. Изменения можно вносить и в файл формата .cpp, минуя стадию .pgf, однако, эти изменения не будут отражены в модели формата .pgf.

Варианты заданий к лабораторной работе №2. Используются варианты заданий к лабораторной работе №1, т.е. тот же вариант, который был задан преподавателем в ходе выполнения лабораторной работы №1. В отличие от ЛР№1, в которой построение моделирующего алгоритма проводилось без использования какой-либо системы моделирования на алгоритмическом языке, во второй лабораторной работе для той же предметной области выполняется построение Pilgrim-модели.

Сравнить полученные обоими способами результаты моделирования.