Предлагаю вниманию хабрапользователей небольшую статью, описывающую практическую сторону применения такой области, как имитационное моделирование.
Постановка задачи (описание процесса)
В логистический центр по согласованному с поставщиком календарю поставок прибывает известное количество товаров одного типа. При переполнении склада заявка на поставку товаров заведомо отменяется. Товар поступает, хранится и передается в розничную точку продаж в упаковках по 8 шт. По прибытию машину встречает сотрудник центра (кладовщик), проверяет наличие необходимой сопроводительной документации, актов соответствия/качества, первичной бухгалтерской документации и сопровождает машину в зону разгрузки.
В зоне разгрузки кладовщик в присутствии экспедитора и при помощи погрузочного оборудования (электрический погрузчик) проводит прием и визуальный осмотр товара. Далее перемещает его в зону входного контроля. Специалист по качеству (контроллер) проводит входной контроль товара. При допуске, товары, при помощи специалиста по качеству, перемещаются в зону ожидания для дальнейшего размещения на стеллажах участка хранения. При обнаружении товара не соответствующего входным параметрам перемещает его в изолятор брака для осуществления дальнейшего возврата поставщику.
Комплектовщики при помощи погрузочного оборудования (электрический погрузчик) комплектуют в зоне отгрузки поставку в розничную точку продаж. Комплектация проводится при достижении остатка товара в розничной точке продаж точки восполнения запаса (точки перезаказа).
После комплектации стандартной партии отгрузки товар передается в точку розничных продаж для реализации.
Необходимо разработать модель представленного процесса для дальнейшего проведения оптимизационных экспериментов (например, определения точки перезаказа при условии отсутствия нулевого остатка в розничной точке продаж).
Исходные данные
№ | Ресурс | Количество | ЕИ | Сменность |
---|---|---|---|---|
1 | Кладовщик | 2 | чел. | 3 смены по 8 часов |
2 | Электрический погрузчик | 5 | шт. | 3 смены по 8 часов |
3 | Контроллер | 3 | чел. | 3 смены по 8 часов |
4 | Ячейки стеллажей участка хранения | 120 | ячеек |
№ | Операция | Длительность, мин. |
---|---|---|
1 | Разгрузка машины | От 15 до 30, в среднем 21 |
2 | Входной контроль | От 4 до 11, в среднем 11 |
№ | Параметр | Значение | ЕИ | Примечание |
---|---|---|---|---|
1 | Текущий спрос | 40 | шт. | 1 раз в час |
2 | Точка перезаказа | 500 | шт. | |
3 | Количество товаров поступающих в 1 упаковке | 8 | шт. |
Реализация
В качестве инструмента для разработки выбран программный продукт AnyLogic (v.7.0.2).
№ | Класс | Описание |
---|---|---|
1 | Warehouse | Основной активный класс модели, содержащий в себе остальные классы; Отражает диаграмму поведения и презентацию модели склада; |
2 | LogisticsMap | Вложенный активный класс модели, содержащий в себе диаграмму поведения взаимодействия слада и розничной точки, а так же поведение розничной точки продаж; |
3 | Box | Тип заявки товара; Содержит в себе презентацию заявки Box; |
4 | Track | Тип заявки машины поставляющей товар; Содержит в себе презентацию заявки Track; |
5 | Lorry | Тип заявки машины доставляющей товар в розничную точку продаж, а так же осуществляющей возврат не прошедшего контроль товара поставщику; Содержит в себе презентацию заявки Lorry; |
6 | Storekeeper | Тип агента; Содержит в себе презентацию ресурса «storekeeper»; |
7 | Loader | Тип агента; Содержит в себе презентацию ресурса «loader»; |
8 | Controller | Тип агента; Содержит в себе презентацию ресурса «controller»; |
9 | Shop_1 | Тип агента; Содержит в себе презентацию ресурса «shop_1» имитирующего в модели розничную точку продаж; |
При помощи диаграммы дискретно-событийного моделирования разработана модель функционирования логистического центра
№ | Блок | Описание |
---|---|---|
1 | SourceBox | Перед каждым шагом модели подсчитывает кол-во свободных ячеек в зоне хранения; На каждом шаге модели генерирует заявки класса Box; |
2 | selectFreeCell | Переключатель. Анализирует рассчитанные свободные ячейки и при отсутствии свободных отправляет заявки на уничтожение в блок «cancellationRequests» |
3 | batchTruck/ unbatchBox |
Компонует/раскомпановывает указанное в календаре поставки количество заявок типа «Box» в одну заявку типа «Track» для отражения на презентации прибытия машины |
4 | seizeStorekeeper/ releaseStorekeeper |
Захватывает/отпускает ресурс типа «storekeeper» отражая на презентации взаимодействие кладовщика с машиной (встреча, сопровождение, разгрузка); После отпуска ресурс возвращается в базовый узел при условии отсутствия других работ; |
5 | serviceUnload | Захватывает ресурс типа «loader» и перемещает его к заявке; Проводит задержку, символизирующую разгрузку машины и проверку товара. Задержка проводится посредством метода треугольного распределения (triangular( 15, 21, 30 )); Отпускает ресурс типа «loader»; Отпущенный ресурс возвращается в базовый узел при условии отсутствия других работ; |
6 | splitTruck | Создает копию заявки типа «Track» для дальнейшего отражения выбытия машины в зону выхода на презентации. Потребность в этом вызвана тем что при обратной раскомпановке заявки типа «Track» в заявки типа «Box» заявка «Track» уничтожается; |
7 | seizeController/ releaseController, releaseController1 |
Захватывает/отпускает ресурс типа «controller» для отражения на презентации перемещения контролера к заявке и возврата в базовый узел при условии отсутствия других работ; |
8 | controll | Проводит задержку, символизирующую проведение входного контроля. Задержка проводится посредством метода треугольного распределения (triangular(4, 7, 11)); |
9 | admittance | Переключатель; Определяет вероятность прохождения заявкой типа «Box» процесса входного контроля; Вероятность задана напрямую (0.107) |
10 | batchLorry | Компонует заданное количество заявок типа «Box» в заявку типа «Lorry», символизируя комплектацию не прошедшего контроль товара в машину для возврата поставщику; |
11 | queuePallete | Задерживает прошедшие входной контроль заявки типа «Box» до появления свободного ресурса типа «loader» для перемещения товара в ячейки зоны хранения; |
12 | palleteSystem | Объединяет стеллажи отраженные на презентации в единую систему хранения; |
13 | palleteStore | Захватывает любой свободный ресурс типа «loader» и присоединяет его к заявке; Размещает заявку типа «Box» в свободной ячейке зоны «palleteSystem» Отпускает ресурс типа «loader». Отпущенный ресурс возвращается в базовый узел при условии отсутствия других работ; |
14 | hold | Блокирует дальнейшую передачу заявок типа «Box», если текущий остаток в розничной точке продаж больше точки перезаказа. Достигается это путем вызова методов «block()» и «unblock()» при входе заявки; код
|
15 | seizeLoaderPall/ releaseLoaderPall |
Захватывает/отпускает ресурс типа «loader» для отражения на презентации перемещения контролера к заявке и возврата в базовый узел при условии отсутствия других работ; |
16 | palletePick | Извлекает заявку типа «Box» из зоны «palleteSystem» и перемещает ее в зону отгрузки в розничную точку продаж; |
17 | batchLorry1 | Компонует заданное количество заявок типа «Box» в заявку типа «Lorry», символизируя погрузку машины для отгрузки в розничную точку продаж; |
18 | sink | Уничтожает заявку типа «Box»; При входе запускает генерацию одной заявки типа «Agent» объектом «sourceLorry» в активном классе «LogisticsMap» для отражения доставки товара в розничную точку продаж; Достигается это путем вызова метода «ручной» генерации заявок код
|
Входной поток «SourceBox» управляется расписанием, формируемым из внешнего источника:
Аналогичным способом при помощи расписания «downtime» задается расписание перерывов работы ресурсов. Визуальное представления формируется при помощи инструмента разметки пространства:
№ | Описание |
---|---|
1 | Точка прибытия машин (заявок типа «Track») |
2 | Базовый узел расположения кладовщиков (заявок типа «Storekeeper») |
3 | Базовый узел расположения электрических погрузчиков (заявок типа «loader») |
4 | Точка выбытия машин (заявок типа «Track», в случаях возврата товара не прошедшего входной контроль поставщику — «Lorry») |
5 | Узел выгрузки товара и прохождения входного контроля |
6 | Базовый узел расположения контролеров (заявок типа «Controller») |
7 | Узел комплектации товаров не прошедших входной контроль |
8 | Узел ожидания погрузчика для размещения товара на стеллажах хранения |
9 | Зона хранения товара |
10 | Узел комплектации для отгрузки в точку розничных продаж |
11 | Узел выбытия товаров |
После прохождения объекта «sink» заявкой типа «Box» заявка уничтожается, а в активном классе «LogisticsMap» объектом «sourceLorry» генерируется заявка типа «Agent». Заявка перемещается по скрытым линиям разметки пространства к единственному ресурсу «Shop_1» (рис. 4) отражающему точку розничных продаж.
При достижении ресурса, заявка типа «Agent» уничтожается объектом «sink», а текущий остаток точки розничных продаж увеличивается на заданное количество.
На презентации присутствует диаграмма, отражающая текущий остаток товара в розничной точке продаж.
При достижении нулевого остатка продажи в розничной точке приостанавливаются до следующей поставки. Функционал обеспечивает событие «sale» запускаемое с периодичностью 1 час.
Событие передает управление диаграмме действия:
Диаграмма, при наступлении события, анализирует текущий остаток (переменная «currentStock») относительно точки перезаказа (параметр «recorderPoint»). В случае превышения текущего остатка над точкой перезаказа, переменной, хранящей уровень текущего спроса (переменная «currentStock»), присваивается значение >0 и проводится реализация товара посредством уменьшения текущего остатка на уровень текущего спроса (currentStock- currentStock). В противном случае диаграмма переходит в следующий блок решения, в котором сопоставляется текущий остаток и уровень текущего спроса. В случае превышения текущего остатка над уровнем текущего спроса, переменной, хранящей уровень текущего спроса присваивается значение >0 и проводится реализация товара посредством уменьшения текущего остатка на уровень текущего спроса. В ином случае переменной, хранящей уровень текущего спроса присваивается значение 0, таким образом продажи приостанавливаются до восполнения потребности.
В качестве заключения
На текущем этапе построения модель достаточно общая, но вполне отражает процесс прохождения товара: от прибытия товара и размещения его на стеллажах участка хранения до передачи его в розничную точку продаж с последующей реализацией. Уже на данном этапе разработки модели можно выполнять эксперименты, оптимизируя точку перезаказа в целях стабилизации цепочки поставок.
Автор: OPrikazchikov