Проблема распределения запасов

Проблема распределения запасов












Главная » Ресурсы » Здесь Жоаннес Верморель, ноябрь 2016 г.

‘'Распределение запасов — это одна из проблем цепей поставок. Для ее решения необходимо правильно рассчитать, сколько товаров отправлять на разные склады. При распределении запасов необходимо учитывать, сколько товара доступно на каждом складе изначально, а также расходы на транспортировку товаров. Алгоритм распределения — это средство для числовых расчетов, очень похожее на алгоритм MOQ, но оно предназначено для решения проблемы распределения.

Обзор проблемы распределения товара

Понятие распределения запасов отражает одну из проблем цепей поставок, при которой
запасы товаров распределяются по множеству складов. Все пары товар+склад рассматриваются как единицы складского учета (SKU).

Существуют экономические программы, позволяющие решить, какой объем товара нужно хранить для каждой SKU; эти программы работают с точки зрения
экономической выгоды. Увеличение запаса может привести к повышению прибыли, если товар пользуется спросом в указанном месте, однако излишне высокие запасы могут привести и к негативным последствиям, так как из-за них повышается стоимость хранения товара, а уровень продаж остается примерно на том же уровне.

Необходимо учитывать и
расходы на транспортировку. Здесь, как правило, понимаются денежные средства, которые уходят на оплату перевозки товара с одного склада на другой. Эти расходы могут быть как линейными — расходы на транспортировку возрастают вместе с объемом перевозимых товаров, так и нелинейными — когда из-за транспортировки изменяется себестоимость товара.

Из-за транспортных ограничений не всегда есть смысл доставлять товар на определенные склады. Если запасы можно сбалансировать между парой совместимых SKU (проще говоря, когда на двух складах хранится один и тот же товар), такие пары называются
ребром транспортировки.

Общая цель всех операций — максимизация экономической выгоды от новых инвентарных позиций, которые появляются за счет доставки товаров на разные склады, и минимизация транспортных расходов.

Формальное определение проблемы распределения

Пусть $i$ и $j$ — это склады, а $k$ — товары. Пусть $T_{ijk}$ — неотрицательное целое число, отражающее объем товара $k$, перевозимого из $i$ в $j$. Пусть $U_{ijk}$ — сумма расходов на транспортировку одной единицы товара. Пусть $G$ — деление триплетов $(i,j,k)$, а $V_g$ с $g \in G$ — пороговая цена транспортировки для подгруппы $g$. Пусть $R_{ik}: \mathbb{Z}\to\mathbb{R}$ — функция прибыльности, связанная с изменением уровня запасов $k$ на складе $i$. Пусть $Q_{ik}$ — максимальный объем товара $k$, который можно забрать со склада $i$. Пусть $H$ — функция Хевисайда.

Мы ищем решение $T_{ijk}$ для транспортировки, которое позволяет максимизировать: $$\sum_{i,k} R_{ik}\left(\sum_j (T_{ijk} - T_{jik}) \right) + \sum_{i,j,k} T_{ijk} U_{ijk} + \sum_{g \in G} V_g\ H\left(\sum_{(i,j,k) \in g} T_{ijk}\right) $$ удовлетворяя при этом следующим ограничениям: $$ \forall i, \forall j, \forall k, T_{ijk} \geq 0 \\ \forall i, \forall k, \sum_j T_{ijk} \leq Q_{ik} $$ Здесь прибыльность $R$ обычно представляет собой
положительную часть уравнения, тогда как расходы $U$ и $V$ — отрицательную.

В целом, поиск оптимального объема товара для перевозки — сложная задача, однако специальные алгоритмы позволяют найти приблизительные решения.

Синтаксис алгоритма распределения в Envision

Система Lokad имеет специальный компонент для решения проблемы распределения, он называется
алгоритмом распределения. В данном разделе мы рассмотрим синтаксис Envision для этого алгоритма. Функция solve.dispatch() использует именные аргументы:
T.Q = solve.dispatch(
  sku: S.Product, S.Location
  reward: S.Reward
  stockAvailable: S.Available
  stockEligible: S.Eligible // необязательно
  edge: T.Product, T.Source, T.Destination
  unitCost: T.UnitCost // необязательно
  groupId: T.Group // необязательно
  groupCost: T.GroupCost) // необязательно
Таблица S должна содержать все SKU, то есть все пары
товар+склад. Таблица T должна представлять собой схему транспортировки, на которой будут показаны все ребра, где можно перевозить товар. Объем возврата — T.Q — отражает фактический оптимизированный объем перевезенного товара.

Используются следующие аргументы:

  • sku (текст, текст): товар и склад SKU, скрыто привязанные к аргументу edge, содержащему список всех возможных перемещений.
  • reward (распределение): распределение прибыльности, привязанное к финальной товарной позиции на определенном складе.
  • stockAvailable (число): отражает начальную точку вычисления прибыльности всех SKU до перемещения товаров.
  • stockEligible (число): отражает максимальный объем товара, который можно забрать из SKU. Если аргумент опустить, все запасы stockAvailable считаются пригодными к транспортировке. На практике перевозимые запасы считаются частью stockAvailable, однако их нельзя будет перемещать в течение некоторого времени.
  • edge (текст, текст, текст): список всех допустимых ребер транспортировки. Если ребра нет в таблице, то товар нельзя перевозить по указанной схеме.
  • unitCost (число): линейная стоимость транспортировки каждой единицы товара'' для транспортировки по ребру. Если значение опускается, оно приравнивается к нулю.
  • groupId (текст) и groupCost (число): нелинейная стоимость транспортировки. Применяется, если ни одно ребро, принадлежащее к группе, не равно нулю. В противном случае стоимость транспортировки приравнивается к нулю. Если значение опускается, оно приравнивается к нулю.

Алгоритм распределения использует алгебру распределения Envision для отображения экономической выгоды. Указанные расчеты распределения обычно создаются заранее с помощью функции прибыльности запасов.

Результаты расчетов алгоритма распределения товаров позволяют вычислить итоговые изменения уровня запасов для всех SKU:
S.Added = sum(T.Q) by [T.Product, S.Destination] at [S.Product, S.Location]
S.Taken = sum(T.Q) by [T.Product, S.Source] at [S.Product, S.Location]
S.Variation = S.Added - S.Taken

Список источников

Проблему распределения товаров в цепях поставок можно рассматривать как гибрид классической транспортной задачи (Wikipedia) и классической проблемы экономического распределения (Wikipedia). При решении проблемы транспортировки особое внимание уделяется расходам, которые возникают вследствие перемещения товаров между складами. При решении проблемы экономического распределения обращают внимание на прибыльность, которая зависит от объема товаров, полученного различными складами. Кроме того, данную проблему распределения можно рассматривать как частный случай проблемы выделения ресурсов.