
- •«Моделирование работы магазина по продаже офисной мебели»
- •Аннотация
- •Содержание
- •Введение
- •1. Принцип функционирования моделируемой системы
- •1.1.Постановка задачи
- •1.2.Блок – схема алгоритма функционирования моделируемой системы
- •1.3.Выбор концептуальной модели
- •2. Формализация модели
- •2.1.Группировка событий
- •2.2.Переменные модели
- •2.3.Алгоритм имитации модели
- •2.3.1. Процедура планирования событий
- •2.3.2. Процедура grup
- •2.3.3. Процедура извлечения первой записи из календаря
- •2.3.4. Процедура инициализации
- •2.3.5. Главный модуль
- •2.3.6. Процедура поиска алгоритма обработки события
- •2.3.7. Процедура обработки события первого класса
- •2.3.8. Процедура обработки события второго класса
- •2.3.9. Процедура обработки события третьего класса
- •2.3.10. Процедура обработки события четвёртого класса
- •2.3.11. Процедура обработки события пятого класса
- •2.3.12. Процедура формирования отчёта по прогону (Outputn)
- •2.3.13. Формирования итогового отчёта (Output)
- •3. Выбор программного обеспечения
- •4. Программа имитационного моделирования
- •5. Результаты моделирования
- •6. Анализ результатов
- •6.1. Расчёт оптимального числа прогонов
- •6.2. Установление закона распределения
- •Заключение
- •Список использованной литературы
2. Формализация модели
2.1.Группировка событий
Для разработки имитационной модели рассмотрим пять классов событий:
Приход клиента.
Обслуживание клиента первым менеджером.
Обслуживание клиента вторым менеджером.
Обслуживание клиента кассиром.
Чрезвычайная ситуация (отключение света).
2.2.Переменные модели
При моделировании системы использовались следующие переменные:
f_Cal – файл календаря;
f_Och – файл очереди;
f_Report – файл отчётов;
Ttbeg – время начала имитации;
Ttfin – время окончания имитации;
Tnow – текущее время;
Lo – длина очереди;
Ni – номер изъятия клиента из очереди;
Nl – номер постановки клиента в очередь;
Tsob – время свершения события;
Atribut – атрибут события;
Key – код события;
Nrns – номер текущего погона;
Nnrns – общее количество прогонов;
A3 – массив для копирования календаря в электронную память;
A2 - массив предварительной компоновки записи для ее дальнейшей пересылки в календарь событий;
Busy_L1 – флаг занятости для первого менеджера;
Busy_L2 – флаг занятости для второго менеджера ра;
Kol_NClient – количество не обслуженных клиентов;
Kol_NClientN – количество не обслуженных клиентов за все прогоны;
Kol_Client – количество пришедших клиентов;
Kol_ClientN – количество пришедших клиентов за все прогоны;
Kol_Client_L1 – количество клиентов, обслуженных первым менеджером;
Kol_Client_L1N – количество клиентов, обслуженных первым менеджером за все прогоны;
Kol_Client_L2 – количество клиентов, обслуженных вторым менеджером;
Kol_Client_L2N – количество клиентов, обслуженных вторым менеджером за все прогоны;
Kol_Client_L3 – количество клиентов, обслуженных кассиром;
Kol_Client_L3N – количество клиентов, обслуженных кассиром за все прогоны;
Deb – количество клиентов-дебиторов;
DebN – количество клиентов-дебиторов за все погоны;
TExtr – время устранения причин задержки;
Flag – флаг обнаружения ЧС;
KolChs – количество ЧС.
2.3.Алгоритм имитации модели
После запуска модели вначале производится инициализация всепрогонных переменных (в главном модуле) и, далее, прогонных для первого прогона (в процедуре INTLC).
Поскольку алгоритм имитации ориентирован на обработку событий, необходимо перед первым обращением к календарю запланировать хотя бы одно событие. Это делается после инициализации прогонных переменных в процедуре INTLC, куда помещается оператор вызова процедуры планирования SCHDL.
Модуль SCHDL передает в календарь все сведения о событии: его атрибут, код класса KEY и интервал свершения DTIME, отсчитываемый от текущего времени TNOW.
Собственно имитация работы моделируемой системы начинается с выбора из календаря первого события с минимальным временем свершения TSOB (процедура RMOVE). Информация об извлеченном событии используется для проведения ряда операций. Так, интервал свершения DTIME дает возможность обновить системное время: TNOW=TNOW+DTIME. Код класса KEY необходим для поиска соответствующего алгоритма обработки (реализации) события. Атрибуты события используются для определения направления действий при реализации события.
После планирования или извлечения события необходимо совершить сортировку календаря (процедура GRUP), потому что события в календаре должны быть расставлены по возрастанию времени свершения.
Поиск программы обработки события осуществляет специализированная процедура EVENT, в которую при ее вызове передается код события. По коду события программа EVENT либо вызывает саму подпрограмму обработки, либо ищет у себя внутри встроенные элементы алгоритма реализации события.
После обработки (реализации) события проверяются условия окончания прогона. Если прогон можно продолжить, идет обращение в календарь для извлечения очередного ближайшего по времени события. Если прогон должен быть завершен, то накопленная в процессе прогона информация обрабатывается и формируется отчет по прогону (OUTPUTN). Затем проверяются условия окончания всех прогонов. Если прогоны продолжаются, управление передается процедуре INTLC для выполнения очередного прогона. При завершении всех прогонов составляется итоговый отчет по всей имитации (OUTPUT).
Все основные шаги по дискретно-событийной имитации будут повторяться для любых моделируемых объектов. Поэтому управление ходом имитации независимо от задачи поручают отдельной процедуре системного типа - процессору имитации СЛАМ, вызываемому из главного модуля (рис. 2).