Лабораторная работа №2. Создание имитационной модели экономического процесса.


Цель: на примере реального предприятия научится создавать и редактировать новую модель; определять параметры узлов и переменных; работать в различных плоскостях.

1. Постановка задачи

В качестве примера, иллюстрирующего создание моделей с по­мощью конструктора, рассмотрим следующий объект. Имеется предприятие, принимающее заказы на изготовление продукции ти­пов А и В. Заказы на продукцию типа А поступают в среднем раз в 30 дней, а на продукцию типа В — раз в 5 дней. Для производства продукции типа А необходимо 10 дней, а для продукции типа В — 2 дня. Одновременно может идти производство только по одному заказу. При этом заказы на продукцию А являются первоочередны­ми. Все сведения о выполнении заказов типов А и В фиксируются в отдельных документах. Модель строится для исследования очереди задержек заказов.

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

Опишем создание имитационной модели с помощью графиче­ского конструктора как последовательность технологических шагов.

Ш а г I. Создание графа модели.

1. Рассмотрим в качестве автономных процессов:

• производство и фиксацию выполненных заказов;

• формирование заказов и очередь заказов на производство.

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

3. Запустим конструктор на выполнение.

4. В основном меню выберем «Файл» ® «Создать». В результате, в рабочей области экрана появится пустое окно с именем «Плос­кость 1». Это пустая корневая плоскость.

5. Из панели узлов в левой части экрана перетащим в плоскость построения узлы типов parent, serv. В панели узлов также найдем узел типа ag и щелкнем мышью по узлу ag. Надпись на панели сме­нится на term. Добавим в плоскость построения два узла типа term. Расположим узлы в рабочей области так, как показано на рисунке 1.

Окно создания узлов в корневой плоскости

Рисунок 1- Окно создания узлов в корневой плоскости

6. Зададим имена узлов. Для этого нужно дважды щелкнуть мы­шью по каждому из узлов и в появившемся диалоговом окне в поле «Имя» вместо находящегося там «Object…» ввести: «Производство» для узла 102; «Отчет А» для узла 103, «Отчет В» для узла 104. Узел 101 будет содержать подуровень формирования заказов; он будет рассмотрен позже.

7. Определим маршруты транзактов. Для этого захватим изобра­жение круга с перекрестием на панели узлов и перетащим на узел «Производство». После отпускания кнопки мыши за курсором потя­нется стрелка. Далее необходимо щелкнуть мышью по узлу «Отчет А», в результате чего появится стрелка, символизирующая маршрут прохождения транзактов из узла «Производство» в «Отчет А». Ана­логичную операцию повторим, задав маршруты из узла «Производ­ство» в «Отчет А» и из «Object 101» в «Производство».

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

Окно графа корневой плоскости

Рисунок 2 — Окно графа корневой плоскости

8. Создадим плоскость формирования заявок. Дважды щелкнем по узлу «Object 101», в результате чего получим новую пустую плоскость 10 с именем «Object 101». В этой плоскости теми же опе­рациями, что и ранее, создадим граф, как показано на рисунке 3. Ос­танемся в этой плоскости.

Окно графа плоскости 10

Рисунок 3 — Окно графа плоскости 10

9. Можно увидеть, что в информационной строке в нижней части экрана красным цветом отображены надписи «Вход не назначен» и «Выход не назначен». В нашем случае плоскость 10 не будет иметь входа, так как сама предназначена для генерации заявок, однако выход необходимо назначить. В левой части экрана щелкнем по кнопке «Слой». В диалоговом окне введем имя слоя «Заказы» и выход 107. Вход установим на значение «nоnе», т.е. отсутствующий. Результат приведен на рисунке 4. После нажатия кнопки «ОК» одна из красных надписей в информационной строке будет заменена на

«Выход:107.».

Окно определения параметров слоя

Рисунок 4 — Окно определения параметров слоя 10

Шаг П. Определение глобальных переменных модели.

Определим переменные модели. Очевидно, для работы может понадобиться переменная времени обслуживания заявки. На левой панели щелкнем по кнопке «Переменные». Появится соответствую­щее диалоговое окно (рисунок 5). В нем необходимо ввести: имя пе­ременной proc_time, тип переменной float. Значение можно не ука­зывать, так как оно будет определяться при выполнении модели в зависимости от типа продукции.

Окно определения параметров слоя

Рисунок 5- Окно определения глобальных переменных модели

Шаг III. Определение свойств узлов.

1. Определим свойства узлов плоскости 10. Узел 105 будет фор­мировать заказы типа А, узел 106 — типа В. Необходимо дважды щелкнуть мышью по узлу 105, в результате чего появится диалого­вое окно «Свойства узла». В нем щелкнуть по кнопке «Определить параметры». В результате появится окно определения параметров узлов типа ag (рисунок 6). Очевидно, для заявок типа А значение «Приоритет» нужно указать равным 1. На выборе закона распреде­ления не будем останавливаться, выберем его как norm — нормаль­ное. В строке «Мат. ожидание» введем значение 30, а «Отклонение» примем равным 10. Повторим процедуру для узла 106. Но значение приоритета укажем 2, математическое ожидание примем равным 5, а отклонение — равным 2. Теперь генераторы подготовлены.

2. Аналогичным образом определим параметры для узла 107 «Очередь заявок». Здесь всего один параметр, его необходимо уста­новить в значение «prty». Это будет означать, что заказы проходят очередь в соответствии с приоритетами. Поэтому заявки на произ­водство продукции типа А будут проходить прежде заявок на продукцию типа В.

Окно определения переменных узла типа ag Заказы А

Рисунок 6 — Окно определения переменных узла типа ag Заказы А

3. Определим свойства узлов плоскости 1. Начнем с узла 102 ти­па serv. Дважды щелкнем по нему мыщью — появится диалоговое окно «Свойства узла» (рисунок 7). В поле «Выходы» на выберем строку «Из 102 в 103». В поле «Условие перехода» укажем «t®pr = = 1». Это значит, что по этой ссылке перейдут только те транзакты, которые в качестве параметра t®pr (приоритет) имеют значение 1. В поле «C++ текст», располагающееся под «Условием перехода», вве­дем строку «proc_time = 10». Далее, выбрав в поле «Выходы» строку «Из 102 в 104», в поле «C++ текст» напишем «proc_time = 2». Щелк­нем по кнопке «Определить параметры». В появившемся диалого­вом окне «Serv детализация» зададим параметры: число каналов = 1; приоритетность = abs; закон распределения = norm; математическое ожидание = proc_time; отклонение = proc_time/2; дополнительно = nоnе (рисунок 8). Таким образом, определен обслуживающий прибор с одним каналом и временем обслуживания, зависящим от приори­тета транзакта.

4. Для узлов типа term параметров не существует.

Окно определения общих свойств узла

Рисунок 7- Окно определения общих свойств узла 102 Производство

Шаг IV. Определение параметров функций modbeg и modend.

1. Определим параметры функции modbeg. В левой панели инст­рументов щелкнем по кнопке modbeg либо выберем соответствую­щий пункт меню раздела «Модель». В появившемся диалоговом ок­не зададим имя модели «Очередь заказов». Параметр «Узлы» обо­значает порядковый номер последнего узла модели и рассчитывает­ся автоматически. Поле «Время» подразумевает время выполнения модели, в моделируемых единицах времени. Поскольку за единицу времени взят один день, то рассмотрим модель на отрезке времени 365 единиц, т.е. один год. Параметр «ПСЧ» служит для настройки датчика случайных чисел. Значение, отображенное по умолчанию, позволяет при каждом запуске получать различные результаты моделирования. Поле «Пространство» используется при пространственном моделировании и в нашем случае не понадобится.

Окно определения переменных функции serv для узла Производство

Рисунок 8 — Окно определения переменных функции serv для узла Производство

В поле «Задержка» необходимо ввести номер узла типа queue, информация о котором будет отображаться при выполнении модели, т.е. в нашем случае это номер 107. Поля «Поток» и «Точность» оставим без изменений. Результат определения параметров в диалоговом окне при­веден на рисунке 9.

Окно определения параметров функции modbeg

Рисунок 9 — Окно определения параметров функции modbeg

2. Определим параметры функции modend. Для нашей задачи оставим параметры modend, заданные по умолчанию. Вызов диалогового окна для ввода параметров осуществляется аналогично вызову окна modbeg.

Шаг V. Генерация текста имитационной модели в операторах Pilgrim.

Итак, модель готова. Для нее сформирован граф, заданы пере­менные, определены параметры узлов и функций. Для генерации программного файла необходимо в основном меню выбрать «Вы­полнить», а затем — «Генерировать C++ файл». При этом конструк­тором сначала будет выполнена проверка модели, в нашем случае не обнаружившая никаких ошибок или подозрительных участков на графе модели (рисунок 10). После нажатия кнопки ОК будет выведено стандартное диалоговое окно, предлагающее сохранить файл с рас­ширением «срр». Сохраненный конструктором файл можно далее компилировать в среде Visual C++.

Окно проверки корректности модели

Рисунок 10 — Окно проверки корректности модели

Программная модель, автоматически сгенерированная конструк­тором и помещенная в срр-файл, имеет следующий вид:

#tinclude <Pilgrim.h>

forward

{

int fw;

int proc_time;

modbeg("Производство под заказ", 107, 365, (long) time (NULL) , none, 107, none,none, 2) ;

ag("Заказы A", 105, 1, norm, 30, 10, none, 107);

ag("Заказы В", 106, 2, norm, 5, 2, none, 107);

network(dummy, dummy)

{

top(102):

if( t®pr == 1 )

{

proc_time =10;

fw=103;

}

else

{

proc_time =2;

fw=104;

}

serv("Производство", 1, abs, norm, proc_time, proc_time/2, none, fw) ;

place;

top(103):

term("Отчет A");

place;

top(104):

term("Отчет В") ;

place;

top(107):

queue("Очередь заказов", prty, 102);

place;

fault(123);

}

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

return 0;

}

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

Контрольные вопросы:

1. Какие основные технологические шаги для создания модели необходимо выполнить с помощью конструктора Pilgrim?

2. Почему появляется многослойная конструкция модели и что она дает разработчику?

3. Что может привести к уменьшению суммарного числа узлов на всех уровнях иерархической структуры модели?

4. Почему узел parent виртуален? Как проводится детализация с его помощью?

5. Какие основные технологические окна имеет конструктора Pilgrim?

К сдаче лабораторной работы №2 необходимо:

1. Выполнить все пункты лабораторной работы с помощью графического конструктора Pilgrim.

2. Подготовить отчёт о проделанной работе.

3. Ответить на контрольные вопросы.

Загрузка...