Файл: Разработка имитационных моделей управления запасами в цепях поставок Москва 2011 2 Введение.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.12.2023

Просмотров: 87

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

91
Параметры класса Distributor:расстояние до поставщика, проверка нахождения заказа в пути, ставка хранения запаса, ставка транспортировки от поставщика. dcDist – расстояние от дистрибьютора до поставщика. Тип параметра: double. dcholdingrate – ставка содержания одной единицы запаса на складе дистрибьютора за 1 день. Начальное значение: 1. Тип параметра: double. dctrrate – ставка на доставку заказа от поставщика до дистрибьютора за 1 день пути. Начальное значение: 20000. Тип: double
Модификация класса Main
Добавим параметры и переменные в класс Main:
Переменные:
DCHoldingcost – издержки на хранение запаса дистрибьютора. Тип переменной: Int
DCTrcost – издержки на транспортировку дистрибьютора. Тип: double
DCStock
– текущий уровень запаса дистрибьютора. Тип: int
DCShortage
– переменная учета случаев дефицита дистрибьютора.
Тип переменной int.
Параметры:

92
DCEOQ – размер заказа дистрибьютора. Тип параметра int. Значение по умолчанию 15000:
DCROP – величина порогового запаса дистрибьютора, значение по умолчанию 5000.
Откорректируем Действие при запуске класса Main:
Добавим строку инициализации запаса дистрибьютора:
DCStock=DCEOQ+DCROP;
Рассчитаем срок доставки заказа от поставщика дистрибьютору: b.dcDist
= sqrt(pow(supplyCoordx-distrCoordx,2)+ pow(supplyCoordy-distrCoordy,2) );
Инициализируем объект класса Supplier:
Supplier c = add_supplier(); c.setXY(4*supplyCoordx,4*supplyCoordy);

93
Данные две строки добавляют поставщика и размещают его на карте в соответствии с указанными координатами
Также добавим еще одно транспортное средство, которое будет работать на маршруте «поставщик – дистрибьютор»:
Truck e = add_truck(); e.setXY(4*supplyCoordx,4*supplyCoordy); truck.get(8).rectangle.setVisible(false);
Мы уже создали восемь объектов truck (с индексами 0…7), поэтому индекс нового объекта будет равен восьми.
Построим линию, соединяющую поставщика и дистрибьютора на карте:

94
1   2   3   4

Динамические параметры:
X: supplier.get(0).getX()
Y: supplier.get(0).getY()
dX: distributor.get(0).getX()-supplier.get(0).getX()
dY: distributor.get(0).getY()-supplier.get(0).getY()
При запуске модели отобразится дополнительный маршрут.
Динамическое событие пополнения запасов дистрибьютора
Создадим событие пополнения запасов дистрибьютора:
DCStock=DCStock+DCEOQ;
DCTrcost=DCTrcost+time*distributor.get(0).dctrrate; truck.get(8).rectangle.setVisible(false); truck.get(8).jumpTo(supplier.get(0).getX(),supplier.get
(0).getY());


95
В отличие от RetReplenishment, используется только один параметр.
Дистрибьютор в модели один, поэтому не требуется указывать индекс объекта.
Диаграмма действий actionChart
В системе могут быть три вида заказов:
-заказ потребителя у розничной точки
-заказ розничной точки у дистрибьютора
-заказ дистрибьютора у поставщика.
У розничных точек и дистрибьютора могут быть три состояния:
-заказ не может быть выполнен
-заказ может быть выполнен
-заказ может быть выполнен, но уровень запаса ниже порогового.
В первом и третьем состоянии вверх по цепочке поставок формируется новый заказ, если заказ уже не находится в пути. Каждый день генерируются восемь значений спроса потребителей – по одному для каждой розничной точки. Система работает по «тянущей» схеме движения материального потока. При каждом событии проверяется состояние всех элементов цепи от розничной точки до поставщика. Данное требование связано с тем, что в один день дистрибьютору могут поступить заказы от нескольких розничных точек, и не во всех случаях имеющегося запаса хватит для обслуживания спроса.
Добавление еще одного эшелона цепи поставок усложняет алгоритм работы:

96
В версии «как должно быть (to be)» изменен код обработки заказов дистрибьютором(1), добавлено условие проверки порогового уровня запаса дистрибьютором(2), а также добавлен модуль выполнения заказа дистрибьютора у поставщика(3).
Модифицируем диаграмму действий:
1)Модуль: «Обработка заказа дистрибьютором»
Код: if (DCStock < retEOQ[j]){
DCShortage++;
} else {

97
DCStock-= retEOQ[j]; create_RetReplenishment(ret.retDist/10,ret.retDist/10,j
); truck.get(j).rectangle.setVisible(true); truck.get(j).moveTo(ret.getX(),ret.getY());
}
Если у дистрибьютора недостаточно запасов для выполнения заказа, учитывается случай возникновения дефицита. Если запаса достаточно, то выполняется заказ
– создается динамическое событие
RetReplenishment.
2)-3)Добавляем модули:
Модуль: «Запас дистрибьютора ниже порогового уровня?»
Условие:
DCStock < DCROP && truck.get(8).isMoving() == false
Дистрибьютор выполняет заказ у поставщика, если заказ не находится в пути, и запас ниже порогового уровня.
Модуль: «Обработка заказа поставщиком»
Код:


98 create_DCReplenishment
(distributor.get(0).dcDist/10,distributor.get(0).dcDist
/10); truck.get(8).rectangle.setVisible(true); truck.get(8).moveTo(distributor.get(0).getX(),distribut or.get(0).getY());
Добавим учет издержек дистрибьютора на хранение в событие ordering.
Общие издержки включают издержки дистрибьютора:
DCHoldingcost+=distributor.get(0).dcholdingrate*DCStock
; totalCost=retHoldingcost+retTrcost+DCHoldingcost+DCTrco st;
Версия события ordering без использования диаграммы действий представлена в Приложении 2.
Редактирование презентации
Сделаем так, чтобы график отображал уровень запасов дистрибьютора:

99
Создадим текстовое поле для отображения уровня запаса дистрибьютора:
X: distributor.get(0).getX()+8
Y: distributor.get(0).getY()
Текст: DCStock
Добавим отображение текущих издержек дистрибьютора при выполнении работы модели:
Динамические параметры элементов Текст:
Текст:
"Издержки на содержание запаса, дистрибьютор:
"+round(DCHoldingcost)

100
Текст:
"Издержки на транспортировку, дистрибьютор:
"+round(DCTrcost) -
Также добавим на карту легенду условных обозначений - создаем четыре прямоугольника и четыре текстовых окна:
При запуске модель примет следующий вид:
Дополнительно поменяем текст, отображаемый перед запуском модели
(text1), и переместим кнопку запуска (button):

101
Оптимизационный эксперимент
Модифицируем оптимизационный эксперимент – добавим переменные управления запасами дистрибьютора и возможность изменять координаты дистрибьютора при поиске решения.
Настройки параметров:

102
Перейдем к пункту Ограничения оптимизационного эксперимента:
Создадим интерфейс эксперимента:

103

104
Задания:
1)Рассчитайте аналитически оптимальные параметры управления запасами для розничных точек и дистрибьютора при помощи формулы EOQ и формулы расчета страхового запаса при вероятностной структуре спроса.
Сравните полученные значения с результатом оптимизационного эксперимента.
2)Измените тип распределения спроса на треугольное распределение triangular(0,demandMean*3,demandMean) и проведите

105 оптимизационный эксперимент. Как изменились параметры управления запасами и общие издержки системы?
3)Измените тип распределения спроса на детерминированный. Оцените изменение количества случаев возникновения дефицита у дистрибьютора, а также распределение запасов в системе.
4)Установите срок работы модели равным 10000 дней, изменив соответственно ограничения по допустимому уровню дефицита. Как изменились оптимальные значения параметров?
5)Модифицируйте модель: вместо ограничения по уровню сервиса добавьте штраф за каждую единицу потерянного потребительского спроса в размере
300 единиц. Как изменились оптимальные параметры управления запасами?
6)Поместите дистрибьютора на координатах (60;115). Заново создадите интерфейс при оптимизации. Насколько изменятся общие издержки системы?


106
Библиографический список
1.“Java For AnyLogic Users” http://www.xjtek.com/files/book/Java_for_AnyLogic_users.pdf
2.“Model time, date and calendar. Virtual and real time” http://www.xjtek.com/files/book/Model%20time%20date%20and%20calendar.%2 0Virtual%20and%20real%20time.pdf
3.Справочная система Anylogic
4. “Presentation and Animation: Working with Shapes, Groups, Colors” http://www.xjtek.com/files/book/Presentation_and_animation- working_with_shapes_groups_colors.pdf
5.Дыбская В.В., Зайцев Е.И., Сергеев В.И., Стерлигова А.Н. Логистика: полный курс МВА (учебник). – М.: ЭКСМО, 2008. – 944 с
6.”Distribution Game” http://web.lemoyne.edu/wright/trucks.htm
7.
«
Анализ размещения распределительного центра и управления складскими запасами в многоуровневой модели цепи поставок» Рожков М.И. Материалы
V Всероссийской конференции студентов и аспирантов "Интеграция и координация логистических процессов в цепях поставок"

107
Оглавление
Введение
………………………………………………………….……..………2
Благодарности……………………………………………………………………3
Раздел 1. Модели с детерминированным спросом
…………..…………4 1.1 Модель с имманентным (мгновенным) пополнением запасов…………..4
Описание модели…………………………………………………………………4
Создание класса активного объекта……………………………………………4
Краткое описание пользовательского интерфейса AnyLogic………………….6
Добавление и настройка параметров……………………………………………8
Генерация событий в модели………………………………………….............10
Редактирование презентации………………………………………………….12
Запись данных в файл для последующей обработки…………………………18 1.2 Модель с розничной точкой-агентом……………….……………………20
Описание модели………………………………………………………………20
Добавление класса Retailer………………………………………………..20
Модификация класса Main……………………………………………….……24
Раздел 2.Модели со стохастическим спросом
………….………………30 2.1 Модель линейной цепи поставок со стохастическим спросом…………30
Описание модели……………………………………………………………….31
Добавление классов Distributor и Truck………………………..………31
Редактирование класса Main………………………………………….………32

108
Генерация спроса………………………………………………………………..35
Модификация алгоритма управления запасами……………………….……36
Диаграмма действий…………………………………………………….……..39
Работа с динамическими событиями в диаграмме действия………..………43
Учет случаев возникновения дефицита………………………………………49
Учет издержек…………………………………………………………..………50
Добавление данных на окно презентации…………………………………...53
Оптимизационный эксперимент………………………………………………55
Базовые настройки………………………………………………………………55
Уточнение величин параметров……………………………………………….61 2.2 Модель с несколькими розничными точками……….…….…….………64
Описание задачи………………………………………………….…….………64
Модификация класса Main……………………………………….…...………65
Изменение алгоритма управления запасами…………………….……..……71
Модификация событий………………………………………………..……….75
Добавление элементов презентации………………………………….………76
Отображение уровня запаса в текстовом поле………………………..…….78
Запись данных о ежедневном уровне запасов в текстовый файл……………81
Оптимизационный эксперимент………………………………………………84
Ограничения…………………………………………………………………….84
Поиск решения……………………………………………………..…………..87


109 2.3 Расширенная модель цепи поставок………………………………………89
Описание задачи…………………………………………………………..……89
Добавление класса поставщика…………………………………………..……90
Модификация класса Main……………………………………………..….….91
Динамическое событие пополнения запасов дистрибьютора………….…..94
Диаграмма действий actionChart……………………..…………………..95
Редактирование презентации…………………………….…………………….99
Оптимизационный эксперимент……………………………..……………….102
Библиографический список…………………………………….……………..106
Оглавление…………………………………………………….………………107
Приложение 1…………………………………………………………………..110
Приложение 2………………………………………………………………….116

110
Приложение 1.
Создание 3D анимации работы модели
Создадим трехмерную, более реалистичную анимацию работы модели.
Перетаскиваем элемент 3D Окно панели 3D в окно редактирования класса
Main:
Меняем дополнительные свойства:
При запуске презентации модели будут отображаться трехмерные объекты на белом фоне.

111
Изменим презентацию класса Truck. Перетащим из панели 3D
Объекты объект Фура:
Удаляем предыдущий объект презентации rectangle:
Меняем масштаб на 20% и переименовываем 3D объект в rectangle:
Повторяем подобную последовательность действий для классов
Retailer, Distributor, Supplier. Используем следующие 3D объекты стандартной библиотеки AnyLogic:

112
Retailer – Магазин
Distributor – Склад
Supplier – Завод
Масштаб объектов 20%.
Для вложенных объектов класса Main активируем пункт Отображать
на 3D сцене:
Изменяем свойства вложенных объектов textRet и textDC:

113
Смещение по оси Z позволит лучше отобразить текстовое поле на трехмерной презентации.
Доработаем линии, соединяющие звенья цепи:
Запускаем презентацию. При помощи кнопок мыши и колеса прокрутки можно осуществлять навигацию по окну 3D презентации:

114

115
В качестве фона может быть использована карта местности. Как мы видим, при минимальных изменениях презентация стала более реалистичной.
Дополнительная информация по работе с 3D в AnyLogic представлена в справочной системе[3].