Скачиваний:
44
Добавлен:
06.02.2016
Размер:
450.56 Кб
Скачать

31

Лабораторные занятия № 2-4 Технологический процесс построения модели

2.1. Пример моделируемого процесса

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

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

Известны следующие параметры этого процесса:

- средний интервал прихода клиентов;

- среднее время обслуживания клиента операционистом.

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

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

- интервал прихода клиентов;

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

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

- количество операционистов;

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

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

- количество клиентов, пришедших в банк в течение контрольного периода времени;

- количество обслуженных клиентов;

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

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

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

Результаты моделирования будут представлены в файле в виде таблицы (рис.5). Серым цветом выделены входные параметры модели.

2.2. Этапы построения модели.

  1. Построение графа модели и генерация PILGRIM-программы

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

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

Рис.6. Создание рабочей плоскости

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

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

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

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

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

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

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

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

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

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

Рис.7. Граф модели на рабочей плоскости

    1. Инициализация модели (рис.8).

Нажмите кнопку ModBeg (Model Begin) под палитрой объектов.

В строке «Название» введите имя модели, которое будет указано в таблице результатов моделирования. Расширение .pgf следует убрать, так как это имя не является именем какого-либо файла, как ошибочно решили разработчики Gem.

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

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

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

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

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

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

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

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

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

Кнопка «Переменные» служит для определения рабочих переменных (в данной задаче не нужно).

    1. Описание узлов модели.

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

Рис.8. Инициализация узлов модели

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

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

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

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

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

      1. Очередь заявок (рис.9).

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

С помощью кнопки «Определить параметры» можно было бы задать флаг учета приоритета транзактов, но в данной задаче это не нужно.

1.5.2.Ключ (рис.10, 11).

В данной модели узел «Ключ» используется в качестве зоны принятия решения о дальнейшем маршруте транзакта. В качестве операции перед прохождением узла здесь выступает определение разницы между текущим показанием модельного времени (timer) и моментом входа транзакта в очередь (T_start). На основании полученного значения времени ожидания, попавшего в параметр транзакта T_wait, определяется дальнейший путь транзакта – либо на обслуживание в узел 101 (сервер), либо на уничтожение в узел 106 (терминатор).

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

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

Рис.10. Описание узла Key 104, выход в Serv 101.

1.5.3.Терминаторы (рис.12,13).

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

Рис.11. Описание узла Key 104, выход в Term 106.

1.5.4.Генератор заявок (рис.14).

Для генератора здесь необходимо задать интервал генерации заявок как случайную величину. Закон распределения выбирается из списка. Дополнительный параметр нужен в том случае, если выбран бета-закон, который задается с помощью трех чисел – минимального, наиболее вероятного и максимального значений случайной величины.

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

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

1.5.5.Сервер или Обслуживающий прибор (рис.15).

Описание сервера похоже на описание генератора. Здесь также необходимо задать интервал времени, представляющий собой поставить число обслуживающих каналов (по умолчанию их нулевое количество, и модель работать не будет).

Флаг учета приоритетов заявок здесь также устанавливать не нужно, так как приоритетов в данной модели заявки не имеют.

Рис.12. Описание узла Term 105.

    1. Сохранение модели в графическом формате

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

1.7.Генерация PILGRIM-программы

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

Рис.13. Описание узла Term 106.

  1. Создание выполняемого файла модели

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

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

  3. Открыть приложение Microsoft Developer Studio.

  4. Пройти следующую последовательность пунктов меню:

    1. File

    2. New

    3. Project Workspace

    4. Application

      1. В окне Applicationв строкеLocaionуказать (через кнопкуBrowse) путь к файлу модели <модель>.cpp.

      2. В окне Nameуказать имя проекта (латинскими буквами).

      3. Нажать кнопку Create.

  5. Теперь в проект нужно вставить файлы, необходимы для построения объектного кода модели.

    1. Стандартная библиотека С++ Comctl32.lib(адрес –Msdev/Lib)

    2. Библиотека системы PILGRIMPilgrim.lib(Msdev/Lib)

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

    1. Файл ресурсов Windowsдля моделейPILGRIMPilgrim.res

(Msdev/Projects)

    1. Файл модели <модель>.cpp(адрес расположения файла модели должен совпадать с указанным в окнеLocationперед вводом имени проекта в окнеName)

Вставка файлов в проект осуществляется с помощью меню Insert, пункт Files into Project.

  1. Теперь нужно построить исполняемый файл модели. Это делается с помощью меню Build, пунктBuild<модель>.exe. Если в окне отчета о процессе построения появится сообщение «0errors», можно запустить модель, выбрав в менюBuild пункт Execute <модель>.exe.

  1. Запуск модели и получение результатов моделирования

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

Рис. 15. Описание узла Serv 101.

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

Закрыв окно модели, можно открыть в Msdev файл результатов, где сведены в таблицу выходные параметры всех узлов модели. Файл результатов находится по адресу Location/Name, то есть в папке созданного проекта.

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

Соседние файлы в папке Лабораторные_занятия