Моделирование работы супермаркета - GPSS

Постановка задачи. Супермаркет имеет место для парковки \(100\) автомобилей. Если все места парковки заняты, автомобиль покидает супермаркет. Время прихода покупателей в магазин с места парковки распределено равномерно и составляет \(60\pm40\) с. Магазин имеет \(100\) ручных тележек и \(50\) корзин для транспортировки купленных товаров. В магазине \(5\) кассовых аппаратов. Первый из них предназначен для быстрого обслуживания покупателей с единичными покупками. Поток покупателей экспоненциальный c с параметром \(\beta\geq 0\):
$$f\left(x \right)=\frac{1}{\beta }e^{-\frac{x-\lambda }{\beta}}$$
В противном случае он равен 0. Известно, что в интервале времени:
от 0 до 30 мин λ=0, β=60;
от 30 до 90 мин λ=0, β=40;
от 90 до 150 мин λ=0, β=80;
свыше 150 мин λ=0, β=120.
Если покупатель берет более 10 видов товаров, то необходима тележка, иначе используется корзина. После покупатели подходят к стеллажам для взятия товара. Число взятых товаров определяется с помощью датчика случайных чисел.

Задание:

1. Создать имитационную модель работы супермаркета в течение рабочей смены, равной 8 ч.
2. Определить параметры функционирования системы: коэффициент загрузки всех касс; максимальное и текущее число покупателей в каждой очереди; среднее время обслуживания в каждом канале обслуживания; среднее время нахождения покупателя в каждой очереди.
3. Построить следующие гистограммы: времени нахождения покупателей в системе; числа покупок, сделанных в течение смены; числа покупателей, посетивших магазин в течение смены.

Указания к решению задачи.

1. Выявление основных особенностей. Необходимо сформировать входной поток посетителей и временной интервал моделирования работы супермаркета. В качестве единицы измерения времени возьмем секунду, тогда общее время моделирования составит 8×60×60 с. Создание и представление имитационной модели процесса. Разобьем модель на несколько секторов. В первом введем информацию, необходимую для функционирования супермаркета. Во втором смоделируем поступление покупателей, определим число покупок, их стоимость и направление покупателей к местоположению корзинок или тележек. В третьем секторе будем собирать статистическую информацию по очереди, связанной с получением корзинок. В четвертом секторе соберем статистику по очереди, связанной с получением тележек. В пятом секторе моделируется перемещение требований в системе в зависимости от ее состояния. В шестом собирается статистика по очереди и каналу быстрого обслуживания. Моделируется время обслуживания, выход из области взятия тары и переход к другому сектору. В седьмом секторе действия аналогичны шестому сектору. В восьмом секторе собирается информация в табличном виде по времени работы системы и числу покупок. Моделируется возвращение к автомобилю и его удаление из системы. В девятом секторе моделируются различные потоки покупателей. В десятом моделируем время работы системы.

Программа может выглядеть следующим образом:
 RMULT 1187 ;определяем набор начальных чисел семи
 ;генераторов случайных чисел
kassa_2 EQU 2 ;указываем номера каналов обслуживания и
 ;соответствующие очереди к ним
kassa_N EQU 5
time_work VARIABLE 8#60#60 ;определяем время моделирования системы в
 ;секундах
n_pokupok VARIABLE (RN1@96+5) ;число покупок, одного покупателя
finance VARIABLE (RN1@3+1)#40+150 ;переменная определяет размер оплаты
 ;покупок
time_system TABLE M1,1000,1000,7 ;создаем таблицы, представляющие
 ;собой набор чисел для построения гистограмм
pokupki TABLE P$kol_pokupok,10,10,10 ;каждое целое число 
 ;представляет класс частоты в гистограмме
n_pokupatel TABLE X$pokupatel,100,50,12
park STORAGE 100 ;вместимость стоянки
telejka STORAGE 100 ;количество тележек
korzina STORAGE 50 ;количество корзин
kassir VARIABLE (P$kol_pokupok)#2+P$oplata ;переменная определяет
 ;время затраченное кассиром на обслуживание покупателя
time_mag VARIABLE P$kol_pokupok#100 ;время нахождения покупателя в
 ;магазине
 INITIAL X$pokupatel,0 ;определяет начальное значение
 ;сохраняемой величины значение которой в начале смены равно 0
******************************************
parking TRANSFER Both,,Lost ;требование направляется в следующий
 ;блок, если он занят то к блоку с меткой Lost
 ENTER park ;если есть место автомобиль въезжает на
 ;стоянку
 ADVANCE 60,40 ;покупатель идет в супермаркет
 SAVEVALUE pokupatel+,1 ;подсчет поступивших покупателей с
 ;момента открытия магазина
 ASSIGN kol_pokupok,V$n_pokupok ;выполняем присваивание
 ;параметру требования kol_pokupok с помощью переменной V$n_pokupok 
 ASSIGN oplata,V$finance 
 TEST LE P$kol_pokupok,10,Qtelejka ;определяем дальнейший
 ;путь требования 
 GATE SNF korzina,Qtelejka ;проверяем условие накопитель не
 ;полон
*******************************************
 QUEUE korzina_Q ;собираем статистику по очереди 
 ENTER korzina ;собираем информацию об использовании корзин
 ;покупателями 
 DEPART korzina_Q ;ОСВОБОЖДАЕМ ОЧЕРЕДЬ 
 ASSIGN tara,korzina ;присваивание параметру требования 
 TRANSFER ,magazin ;переход требования к оператору с меткой
 ;покупатель входит в магазин
*********************************************
Qtelejka QUEUE telejka_Q ;собираем статистику по очереди 
 ENTER telejka ;собираем информацию об использовании корзин
 ;покупателями 
 DEPART telejka_Q ;освобождаем очередь
 ASSIGN tara,telejka ;присваивание параметру требования
********************************************** 
magazin ADVANCE V$time_mag ; моделируем время нахождения
 ;покупателя в магазине
 TEST LE P$kol_pokupok,10,min_och ;определяем дальнейший путь
 ;требования 
 COUNT L kassir_0,kassa_2,kassa_n,1,Q ; определяем число
 ;объектов заданного диапазона удов-щих заданному требованию
 TEST E P$kassir_0,0,min_och ;определяем дальнейший путь
 ;требования
**********************************************
 QUEUE bistro_q ;собираем статистику об очереди
 SEIZE bistro ;собираем статистику по каналу
 ;обслуживания
 DEPART bistro_q 
 ADVANCE V$kassir ;моделируем время быстрого
 ;обслуживания
 RELEASE bistro 
 LEAVE P$tara ;завершаем сбор статистики по работе
 ;накопителей связанных с тарой
 TRANSFER ,fin ;направляем требование к оператору
 ;указанному в поле В
**********************************************
min_och SELECT MIN min_ocher,kassa_2,kassa_n,,Q ; выбираем объект
 ;удовлетворяющий условию
 QUEUE P$min_ocher 
 SEIZE P$min_ocher 
 DEPART P$min_ocher 
 ADVANCE V$kassir 
 RELEASE P$min_ocher 
 LEAVE P$tara 
**********************************************
fin TABULATE time_system ;выполняем сбор данных по времени
 ;обслуживания 
 TABULATE pokupki ;собираем данные по числу сделанных
 ;покупок 
 SAVEVALUE pokupatel-,1 ;уменьшаем число обслуженных
 ;покупателей
 ADVANCE 60,50 
 LEAVE park 
 TERMINATE 
lost TERMINATE 
*********************************************
 GENERATE (Exponential(1,0,60)),,,200 ;используем встроенное
 ;распределение вероятностей для моделирования потока покупателей
 TRANSFER ,parking 
 GENERATE (Exponential(1,0,40)),,1800,400
 TRANSFER ,parking
 GENERATE (Exponential(1,0,80)),,5400,300
 TRANSFER ,parking
 GENERATE (Exponential(1,0,120)),,9000
 TRANSFER ,parking
**********************************************
 GENERATE V$time_work ;определяем время работы системы
 TABULATE n_pokupatel ;собираем информацию о числе
 ;покупателей посетивших магазин
 TERMINATE 1
 START 1 
Подготовка к моделированию. Установить в диалоговом окне SETTINGS (закладка REPORTS) вывод информации о следующих объектах: Queues (очереди), Tables (таблицы/ гистограммы), Facilities (каналы обслуживания), Storages (накопители), Savevalues (сохраняемые величины).

Моделирование системы. Созданную имитационную модель необходимо оттранслировать и запустить на выполнение.

2. После трансляции, если нет ошибок, начнется процесс моделирования. Появится окно REPORT, в котором можно найти указанные в задании 2 параметры функционирования системы.

3. Представим табличные данные в виде гистограмм. Для построения гистограмм необходимо воспользоваться окном гистограмм (Table Window), где в выпадающем списке выбрать имена нужных гистограмм.

Очевидно, что эту задачу можно легко приспособить к любому магазину или товару. Все это усложняет цепочку транзакций, но суть остается прежней - в модель надо добавить новые элементы.
Онлайн всего: 27
Гостей: 27
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте