Решение главной проблемы MOQ (минимального объема заказа)
Минимальный объем заказа (MOQ) — это один из наиболее распространенных видов ограничений заказа в цепях поставок. MOQ используется, когда поставщик не принимает заказы на закупку, если их объем меньше определенного значения, которое обычно выражается в единицах товара или в долларах. Достаточно часто различные ограничения MOQ накладываются друг на друга, и все их обязательно нужно учитывать. Основная проблема MOQ заключается в (приблизительном) расчете оптимального объема заказа, который соответствовал бы всем ограничениям MOQ и позволял бы получать максимальную прибыль за каждую приобретаемую единицу товара.
Главная проблема MOQ заключается в сложной нелинейной оптимизации. Она считается сложной, потому что рассчитать оптимальный объем заказа обычно не получается. Тем не менее, несмотря на то, что оптимальных значений, как правило, получить нельзя, особые нелинейные алгоритмы расчета ограничений позволяют получить значения, близкие к оптимальным. В частности, ниже описана функция moqsolv , которая представляет собой сложный алгоритм Lokad для решения основной проблемы MOQ.
Стандартные ограничения MOQ
Ограничения MOQ могут принимать различные формы. Приведем несколько наиболее распространенных ограничений MOQ, с которыми мы сталкивались:
- минимальный объем заказа, выраженный в единицах товара на SKU. Как правило, используется для предметов, которые слишком дешевы, чтобы продавать их поодиночке.
- минимальный объем заказа, выраженный в долларах за весь заказ на закупку. Используется, когда поставщик не берет плату за доставку.
- минимальный объем заказа, выраженый в единицах товара по категориям. Используется для товаров, которые изготавливаются на заказ, при минимальном объеме производственной партии.
Понятия
Прежде чем разбираться с числовой оптимизацией, давайте рассмотрим наиболее важные понятия, которые используются при решении основной проблемы MOQ. У нас есть:
- наименования — непосредственно то, что приобретается. Обычно количество единиц товара выражается целым числом, однако это не является обязательным требованием.
- объем заказа для каждого наименования (может быть равен нулю) — отражает потенциальное решение проблемы MOQ.
- рентабельность каждой дополнительной единицы товара для каждого наименования — данные, получаемые с помощью функции рентабельности запасов (stock reward), однако использование данной функции не является обязательным требованием.
- расходы на приобретаемые товары. Наша цель — максимально повысить прибыль с бюджета, выраженного в параметре расходы. Расходы на покупку одного товара обычно не меняются, но мы не можем полагаться на предположения, поэтому в расчет необходимо принимать скидки.
- цели — отражают критерии завершения заказа, которые могут не являться фактическими расходами. Это достаточно сложное понятие, и мы рассмотрим его подробнее ниже.
Понятие цели вводится как универсальный механизм определения дополнительных критериев завершения заказа при работе с политикой приоритетных заказов. Проще говоря, мы рассчитываем такие заказы на закупку, которые дадут максимальный экономический эффект при минимальных вложениях и обеспечат достижение целей. Ниже приводится более точное определение данного процесса оптимизации.
Формальное определение основной проблемы MOQ
В данном разделе основная проблема MOQ описана в виде формальной нелинейной задачи на оптимизацию. Достаточно очевидно, что данная проблема является НП-трудной. Основная проблема MOQ тесно связана с https://ru.wikipedia.org/wiki/Задача_об_упаковке_в_контейнеры, которая также является НП-трудной. Таким образом, основная проблема MOQ является, по меньшей мере, такой же трудной, как и задача об упаковке в контейнеры. Несмотря на то, что проблема является НП-трудной, надо сказать, что на практике для нее можно найти очень хорошие решения.
Пусть $I$ — набор наименований, которые необходимо заказать. Пусть $q_i$ при $i \in I$ — количество единиц наименования $i$, которое необходимо заказать.
Мы получим несколько функций.
- Пусть $r_i(q)$ — рентабельность при хранении $q$ единиц наименования $i$.
- Пусть $c_i(q)$ — расходы на приобретение $q$ единиц наименования $i$.
- Пусть $t_i(q)$ — цель при хранении $q$ единиц наименования $i$.
Пусть $C$ — максимальные расходы на закупку. Тогда наилучший заказ на закупку $\textbf_C=(q_i)_i$ будет выглядеть следующим образом: $$\textbf_C = \underset \left\ < \sum_i r_i(q_i) \text< with $m$ satisfied >\forall m\in M \right\>$$ Данный заказ является "лучшим" в том смысле, что он позволяет получить максимальную прибыль для указанного бюджета. Решение $\textbf_C$ не является единственно возможным, однако проблема MOQ слишком сложна, чтобы сразу же высчитать точные значения. Для простоты будем считать, что данное решение является единственным.
Пусть $T$ — минимальная цель, тогда $\textbf^T$ будет выражено с помощью $$C^T = \underset \left\< \left(\sum_ t_i(q_i) \right) \geq T \right\>$$ and $$\mathbf^T = \textbf_$$ Решение $\mathbf^T$ основывается на $\textbf_C$, а значит, это наименьшее оптимальное (с точки зрения бюджета) решение, дающее максимальный экономический эффект и обеспечивающее достижение цели.