Главная страница

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


Скачать 3.44 Mb.
НазваниеРазработка имитационных моделей управления запасами в цепях поставок Москва 2011 2 Введение
АнкорЭкономический анализ
Дата12.05.2023
Размер3.44 Mb.
Формат файлаpdf
Имя файлаRozhkov_Designing_Simulation_Models_For_Inventory_Management_Ana.pdf
ТипПрактикум
#1125745
страница1 из 4
  1   2   3   4

Национальный Исследовательский Университет – Высшая Школа
Экономики
Отделение логистики
Кафедра информационных систем и технологий в логистике
М.И. Рожков
Разработка имитационных моделей управления запасами в
цепях поставок
Москва 2011

2
Введение
Целью данного практикума является изучение влияния параметров управления запасами в цепи поставок на производительность цепи с использованием метода имитационного моделирования.
Для этого разрабатываются несколько моделей с постепенным расширением их функциональности. Модели основаны на агентном подходе моделирования и отражают работу цепи поставок.
В практикуме развиваются идеи, заложенные в известной программе- симуляторе распределительной сети Distribution Game[6]. Главной особенностью Distribution Game является вероятностная структура спроса на товар в трех розничных точках. Несмотря на внешнюю простоту, подбор оптимальной стратегии управления запасами в программе вручную является достаточно сложной и трудоемкой задачей. В данном практикуме работа системы автоматизирована, также добавлена возможность поиска оптимальных значений параметров управления запасами в цепи поставок.
Процесс моделирования каждой из рассмотренных систем можно поделить на две части:
-моделирование объектов сети
-моделирование «управляющего контура» системы
Таким образом, объектно-ориентированный подход в разработке имитационных моделей согласуется с объектной декомпозицией цепей поставок[5].
Следует заметить, что работа с AnyLogic требует знания основ языка программирования Java, поэтому процесс моделирования относительно сложен. При разработке данного практикума активно использовались материалы “Java for AnyLogic Users”[1], а также учебные примеры моделей:

3
Supply Chain, Two Stocks Problem, Event Generating New Agents и Dynamic
Event Models Product Delivery.
При первом упоминании циклических конструкций, модулей принятия решения, переменных, массивов в тексте практикума будут приведены ссылки на соответствующий раздел “Java for AnyLogic Users”. Также подробное описание элементов среды может быть найдено в справочной системе AnyLogic[3].
Модели, рассмотренные в практикуме, по возможности сохраняют преемственность кода и общей структуры. В начале каждого раздела используется модель, построенная в конце предыдущего.
Благодарности
Автор выражает благодарность Заходякину Глебу Викторовичу за содействие в работе над содержанием практикума, а также Зиновьеву
Константину Михайловичу, Овсову Сергею Павловичу и Столяр Екатерине
Юрьевне за помощь в редактировании текста.

4
Раздел 1. Модели с детерминированным спросом
Данный раздел ориентирован на работу с теоретическими моделями управления запасами. Модели максимально упрощены и не учитывают многие факторы. Основная задача – рассмотреть реализацию подобных систем в среде имитационного моделирования AnyLogic.
1.1 Модель с имманентным (мгновенным) пополнением запасов
Описание модели
Допустим, спрос детерминированный и составляет 80 единиц за один период. В модели одна розничная точка. При уровне запасов равном нулю осуществляется имманентное (мгновенное) пополнение запасов. Данные о текущем уровне запаса фиксируются в начале периода. Размер оптимального заказа составляет 400 единиц.
Задача: смоделировать процесс изменения уровня запаса.
t1 – момент перезаказа.
Создание класса активного объекта
Открываем среду разработки AnyLogic. Создаем новую модель:

5
Выбираем название для модели:
Создаем модель «с нуля»:

6
Нажимаем Готово.
Краткое описание пользовательского интерфейса AnyLogic
В левой части рабочей области будет находиться панель Проекты.
Панель Проекты обеспечивает легкую навигацию по элементам моделей, открытых в текущий момент времени. Поскольку модель организована иерархически, то она отображается в виде дерева: сама модель образует верхний уровень дерева; эксперименты, классы активных объектов и Java

7 классы образуют следующий уровень; элементы, входящие в состав активных объектов, вложены в соответствующую подветвь дерева класса активного объекта и т.д.
В правой рабочей области будет отображаться панель Палитра, а внизу
- панель Свойства. Панель Палитра содержит разделенные по категориям элементы, которые могут быть добавлены на диаграмму класса активного объекта или эксперимента. Панель Свойства используется для просмотра и изменения свойств выбранного в данный момент элемента (или элементов) модели.
В центре рабочей области AnyLogic Вы увидите графический редактор диаграммы класса активного объекта Main. [3]

8
Добавление и настройка параметров
В AnyLogic нет строгих различий между переменными и параметрами при работе модели. Параметры обычно используются для задания статических характеристик объекта. Переменные обычно используются для моделирования изменяющихся характеристик объекта или для хранения результатов работы модели.[2] [1,p8]
В нашей модели будут использоваться три параметра: уровень спроса, текущий уровень запаса, величина оптимального размера заказа.
Спрос составляет 80 единиц. Создадим параметр currentDemand, который будет соответствовать текущему уровню спроса. Дважды щелкаем мышью на Retailer в панели Проекты:
Перетаскиваем мышью Параметр из палитры [1,p8]:
Переименовываем параметр и меняем его тип:

9
Имя: currentDemand, Тип: double. Значение по умолчанию: 80.
Int соответствует целым числам. Double – числам с дробной частью.
Дополнительная информация о типах данных в “Java for AnyLogic
Users”[1,p2].
По аналогии создаем параметры EOQ и переменную retStock: retStock будет соответствовать текущему уровню запаса, EOQ – размеру заказа при пополнении запаса (EOQ – Economic Order Quantity). Тип обоих параметров также int.
Начальное значение EOQ : 400
Начальное значение retStock:400
Здесь и далее не используется привязка значений переменных и параметров к единицам измерения.

10
Генерация событий в модели
В нашей модели происходят два вида событий:
1. каждый день запас уменьшается на величину спроса;
2. если текущий уровень запаса равен нулю, то выполняется пополнение запасов.
Для моделирования событий используется элемент Event (Событие).
Добавим Событие в окно редактирования [2]:
Поменяем Основные Свойства события:
Имя: ordering, Режим: циклический, Время первого срабатывания:
0, Период: 1.
Добавим код в окно Действие:

11
Действие:
retStock-= currentDemand;
Данная строка уменьшает уровень запасов на величину дневного спроса
Добавим код проверки текущего уровня запасов. Заказ формируется, если текущий запас равен нулю: if(retStock==0){ retStock+=EOQ;
}
Для реализации условия используется блок if.[1,p35] Граница блока обозначается фигурными скобками. Первая строка сравнивает уровень запаса розничной точки и ноль. Если запас равен нулю, то выполняется пополнение запаса на величину EOQ (EOQ = 400).
В Java можно комментировать код, используя комбинации символов
«//»
(для комментирования строки) или «/* */» (для комментирования большего объема кода).[1,p41] Прокомментированный код может выглядеть, например, так:

12
//обновление уровня запасов retStock-= currentDemand;
//проверка условия пополнения запасов if(retStock==0){
//пополнение запасов retStock+=EOQ;
}
Далее в практикуме не используется комментирование кода, так как все нужные комментарии приведены в тексте. В общем случае при разработке моделей рекомендуется комментировать код.
Редактирование презентации
Для отображения работы модели при запуске используем элемент
Временной график панели Статистика:
Нажимаем Добавить элемент данных:

13
График должен показывать динамику изменения уровня запаса, поэтому в поле Значение вписываем retStock:
В AnyLogic есть удобная система автоподстановки значений через контекстное меню[1,p13]. Начнем набирать «re» в поле Значение и нажмем
Ctrl+Пробел:
Появляется контекстное меню, где можно выбрать нужный параметр, начинающийся с данного сочетания букв. В нашем случае – retStock.
Поменяем настройки отображения графика:

14
Изменим значение дополнительных свойств – увеличим размер окна графика:
Ширина: 500
Высота:400
Перейдем в редактирование настроек симуляции:

15
Модель будет работать в течение 100 дней. Запустим симуляцию:
Нажимаем кнопку Запустить модель и открыть презентацию класса
Main:

16
При запуске динамически формируются график значений параметра retStock:

17
Проанализируем полученные данные:

18
Точками 1 – 5 показаны моменты генерации спроса – события ordering (1 раз за период). В пятый день работы модели текущий запас равен нулю, выполняется мгновенное пополнение запасов на величину EOQ, равную 400, поэтому «ступеньки» от 80 до 0 на графике нет.
Запись данных в файл для последующей обработки
Добавим в модель возможность записи данных об уровне запаса в текстовый файл. Запись данных в файл, так же, как и презентация, позволяет выявить возможные ошибки и лучше понять алгоритм работы модели. Для этого перенесем элемент Файл на рабочую область (класс Main):

19
Имя: filestock, Режим: запись, выбираем место расположения файла.
(Перед этим нужно создать пустой *.txt файл по указанному адресу)
Данные будут записываться в файл каждый день, поэтому отредактируем событие ordering – добавим код для записи данных об уровне запасов в файл. Для записи используем метод println() – данные будут записываться в один столбец. filestock.println(retStock);
Запустим модель и откроем текстовый файл, в который были записаны данные во время работы симуляции:

20
В текстовом файле сто значений ежедневного уровня запаса по состоянию на начало периода.
1.2 Модель с розничной точкой-агентом
Описание модели
В предыдущей версии разбиралась работа с абстрактной моделью. Для расширения возможностей модели системы добавим класс активного объекта типа «агент». Агент соответствует звену цепи поставок.
В данной промежуточной версии продемонстрируем, каким образом можно использовать объектно-ориентированный подход для решения поставленной в данном разделе задачи.
Задача: добавить обособленный элемент цепи поставок – розничную точку.
Добавление класса Retailer
Создадим Среду environment, в которой будут находиться агенты:

21
Добавим популяцию агентов в класс Main:

22
В окне Палитра, находящемся справа на рабочей области, выделяем пункт Прямоугольник и, не отпуская кнопку мыши, перетаскиваем его в окно редактирования агента.
Корректируем Основные свойства прямоугольника:

23
Меняем дополнительные параметры
Ширина,
Высота
прямоугольника, а также расположение:
Теперь у класса Retailer появилось вложенное меню Презентация
Удаляем retailer из вложенных объектов класса Main и создаем снова, перетаскивая Retailer в окно редактирования Main. После этого презентация класса (retailer_presentation) отображается корректно:
Указываем среду и начальное количество агентов:

24
Прямоугольник rectangle – упрощенное отображение розничной точки на окне презентации модели. AnyLogic представляет широкие возможности по работе с презентацией модели, включая использование трехмерной графики, но в рамках данного практикума используется максимально упрощенная анимация. Вопросы работы с анимацией подробно рассмотрены в материале “Presentation and Animation: Working with Shapes,
Groups, Colors”, представленном на сайте XjTek [4]. Добавление трехмерной графики в последнюю версию модели рассмотрено в Приложении 1.
Модификация класса Main
В новой версии модели агенты (звенья цепи поставок) генерируются и размещаются в пространстве по определенному алгоритму.
Добавим переменные значений координат розничной точки в класс
Main:
Имя: retailCoordx и retailCoordy, обе переменные типа int, значения по умолчанию 10. В этой модели удобнее использовать целые числа для отображения координат.

25
Модифицируем модель так, чтобы при инициализации создавался один объект класса Retailer и размещался в презентации в соответствии с указанными координатами.
Инициализируем агент Retailer:
Retailer a = add_retailer();
Строка Retailer a = add_retailer(); добавляет новую розничную точку. [1,33] В дальнейшем можно в данной части модели
(действие при запуске класса Main) использовать переменную “a” для ссылки на объект класса Retailer.
После создания агента нужно определить некоторые дополнительные параметры только что добавленного объекта: a.setXY(4*retailCoordx,4*retailCoordy);
Метод setXY() предназначается для определения начальных координат объекта. Каждая координата умножается на 4; когда мы добавим дополнительных агентов в модель, они будут более равномерно размещены на окне презентации.
Вырежем (Ctrl+X) параметр currentDemand из окна редактирования класса Main и вставим (Ctrl+V) в окно редактирования класса Retailer:

26
Теперь отредактируем событие ordering:
Было в предыдущей версии: retStock-= currentDemand;
Стало в новой версии модели: retStock-=retailer.get(0).currentDemand;
В новой версии модели параметр currentDemand размещен не в классе Main, а в классе retailer, вложенном в класс Main. Поэтому чтобы обратиться к данному параметру, требуется более сложный синтаксис.
«retailer.» – указывает, что объект вложенный, «get(0)» – указывает, какой по счету требуется объект из класса retailer. Несмотря на то, что в нашей модели имеется только одна розничная точка, в языке java в большинстве случаев требуется указывать индекс (порядковый номер)

27 объекта. Нумерация объектов начинается с нуля, поэтому индекс единственного агента retailer – ноль. В дальнейшем нам неоднократно придется обращаться из одного класса модели к элементам другого, используя похожие синтаксические конструкции. Более подробный материал представлен в “Java For AnyLogic Users” [1,p43]
Перенесем все элементы класса Main (кроме графика) в левый квадрант окна редактирования:

28
У графика поменяем параметры расположения и размера – перенесем его в правый нижний угол и уменьшим:
Запускаем модель:
Синий квадрат – это агент Retailer, расположенный на указанных нами координатах (10*4;10*4). Модель работает так же, как и в предыдущей версии. По ходу данного практикума модели будут становиться менее

29 абстрактными. Отображение упрощенной презентации агента-розничной точки – это только первый этап расширения возможностей данной модели.

30
Раздел 2.Модели со стохастическим спросом
В данном разделе практикума модификация моделей (при сохранении преемственности) выполнена, ориентируясь на следующую последовательность этапов:
1)добавление классов объектов
2)добавление переменных и параметров
3)изменение кода инициализации модели
4)изменение кода алгоритма управления запасами
5)изменение кода событий
6)редактирование окна презентации
7)редактирование оптимизационного эксперимента
2.1 Модель линейной цепи поставок со стохастическим спросом
Описание модели
Доработаем модель, завершенную в предыдущем разделе. В случае потребности в запасе розничная точка размещает заказ у дистрибьютора, и заказ транспортируется в розничную точку. Добавим два новых агента
(участника цепи поставок): дистрибьютора и «транспортное средство».
Спрос генерируется нормальным распределением с математическим ожиданием 80 и стандартным отклонением 18. Количество выполненных заказов потребителей должно составлять не менее 98,5%. Розничная точка формирует заказ при достижении определенного порогового уровня запаса.
Срок доставки (Lead Time, LT) зависит от расстояния между дистрибьютором и розничной точкой. Ставка на хранение запаса для розничной точки составляет 1 единицу за хранение единицы товара в течение периода, ставка

31 транспортировки 5 единиц за 10 единиц расстояния между розничной точкой и дистрибьютором. Ставка транспортировки не зависит от объема поставки.
Расстояние между розничной точкой и дистрибьютором рассчитывается по формуле:
Где и координаты розничной точки, а и координаты дистрибьютора.
При транспортировке заказа одна единица расстояния преодолевается за один день. Таким образом, если расстояние составляет 5 единиц, то потребуется пять дней на доставку.
Координаты дистрибьютора: (50;50)
Задачи:
1. смоделировать и отразить в презентации работу цепи поставок;
2. найти оптимальные значения параметров управления запасами.
Добавление классов Distributor и Truck

32
В новой версии модели используются два дополнительных типа объектов: Distributor – дистрибьютор и Truck – транспортное средство.
Добавим данные объекты в модель по аналогии с классом Retailer. Цвет
заливки для прямоугольника презентации Distributor – green, ширина и высота 8, Truck – cyan, ширина и высота 5. Цвет линии для всех объектов: black
Дополнительно для объекта Truck укажем во вкладке свойств Агент параметр движения Скорость, равный 40.
В работе модели задействованы три объекта: розничная точка, дистрибьютор и транспортное средство. Розничная точка и дистрибьютор размещены на презентации в соответствии с координатами, транспортное средство отображается только во время анимации доставки товара по маршруту «дистрибьютор - розничная точка».
  1   2   3   4


написать администратору сайта