Resolviendo el problema general de las MOQ (Cantidades de orden mínimas)

Notebook-as-a-book illustration







Por Joannès Vermorel, enero de 2016

Las cantidades de orden mínimas (MOQ, por sus siglas en inglés), son una forma extendida de limitación de pedido en la cadena de suministro. Una limitación de MOQ indica que el proveedor no aceptará un pedido de compra por debajo de un umbral determinado, que generalmente se expresa en unidades o en dólares. Es frecuente que coexistan varias limitaciones de MOQ con las que es preciso cumplir contemporáneamente. El problema general de las MOQ consiste en calcular los pedidos de compra (casi) óptimos que satisfagan todas las limitaciones de MOQ al tiempo que se maximizan los rendimientos económicos asociados con las unidades compradas.

El problema general de las MOQ se formaliza como un problema de optimización no lineal complejo. Este problema se califica como complejo porque puede probarse que el cálculo de la solución óptima generalmente escapa al alcance computacional. No obstante, a pesar de que generalmente no es posible obtener soluciones óptimas, sí es posible obtener soluciones casi óptimas a través de algoritmos avanzados de resolución de limitación no lineales. A continuación presentamos, en especial, moqsolv, el solver numérico avanzando proporcionado por Lokad para abordar el problema general de las MOQ.

Limitaciones de MOQ típicas

Las limitaciones de MOQ pueden adoptar muchas formas. Entre las más frecuentes en las cadenas de suministrom se encuentran:

  • una cantidad mínima expresada en unidades por SKU, que generalmente refleja artículos que son demasiado económicos para venderse por separado;
  • una cantidad mínima expresada en dólares para el pedido de compra en conjunto, que a menudo se encuentra cuando el proveedor no cobra el envío;
  • una cantidad mínima expresada en unidades por categoría de artículos, que se encuentra a menudo en productos que se fabrican a pedido en lotes de producción de una determinada dimensión mínima.

Gestionar una limitación a la vez no resulta complicado en la práctica, pero cuando son varias las MOQ que deben tenerse en cuenta al mismo tiempo, componer un pedido de compra que cumpla con todas esas limitaciones es mucho más complicado.

Conceptos de MOQ

Antes de entrar en el problema de la optimización numérica, veremos los conceptos más importantes en el problema general de MOQ. Contamos con los siguientes puntos:

  • Los artículos que representan lo que puede comprarse realmente. Las cantidades de artículo generalmente son números enteros, aunque aquí no es obligatorio que lo sean.
  • Las cantidades pedidas de cada artículo (posiblemente cero) que representan una solución potencial al problema de MOQ.
  • Las recompensas asociadas a cada unidad adicional de cada artículo. Básicamente, lo que se obtiene a través de la función stockrwd (recompensa por existencias), aunque el uso de esta función no es obligatorio;
  • Los costes asociados a las unidades por comprar. El objetivo es maximizar la recompensa por una determinada cantidad de presupuesto expresada en costes. Generalmente, se espera que los costes sean fijos por unidad, pero aquí no es lo que se supone; por lo tanto, pueden tenerse en cuenta descuentos.
  • Los objetivos, que representan un modo de especificar un criterio de detención que pueden no ser los costes reales. Este punto es un poco sutil y lo abordaremos en más detalles más adelante.

El criterio de detención canónico durante la compra de acuerdo con una lista de prioridad de compra es definir un presupuesto máximo: se compran unidades de acuerdo con el orden de ROI decreciente hasta que se utiliza todo el presupuesto de compra. Sin embargo, un límite máximo de presupuesto dice poco sobre el rendimiento de inventario absoluto que puede obtenerse. Así, si bien el objetivo sigue siendo la optimización del ROI independientemente del criterio de detención que se aplique, sigue reslutando práctico poder considerar criterios alternativos, como una tasa de llenado total objetivo.

El concepto de objetivo se introduce como un mecanismo genérico para definir criterios de detención alternativos cuando se trabaja con una política de pedido priorizado. Para simplificar, el objetivo pasa a ser encontrar los pedidos de compra que proporcionan el ROI más alto para la menor inversión al tiempo que se cumple con el objetivo. A continuación, proporcionamos una definición más precisa de este proceso de optimización.

Ej.: Franco, el encargado de la cadena de suministro, pone un objetivo al 90 % de la tasa de llenado. La resolución del problema de MOQ consiste en calcular el pedido más pequeño —en costes— al tiempo que se maximizan las recompensas que proporcionan una tasa de llenado del 90 %. Este pedido NO es el menor pedido posible para lograr el 90 % de tasa de llenado, ya que eso sería una priorización de tasa de llenado pura. En cambio, se trata del pedido más pequeño que, si bien prioriza las recompensas, es lo suficientemente grande como para proprocionar una tasa de llenado del 90 %. Una priorización de tasa de llenado pura hubiera sido un error, porque, a diferencia de la recompensa por existencias, no tiene en cuenta el costo asociado a la generación de inventario muerto.

Definición formal del problema general de MOQ

Esta sección presenta el problema general de MOQ como un problema de optimización formal no lineal. Es bastante directo demostrar que este problema es NP-complejo. De hecho, el problema general de MOQ es una prolongación del problema de bin-packing, que ya es un problema NP-complejo. Por lo tanto, el problema general de las MOQ es al menos tan difícil como un problema de bin-packing. Sin embargo, a pesar de ser un problema NP-complejo, es preciso señalar que se pueden calcular muy buenas soluciones en la práctica.

Supongamos que $I$ es el conjunto de artículos que se planea pedir. $q_i$ con $i \in I$ sería la cantidad por pedir del artículo $i$.

Luego, definimos una serie de funciones.

  • $r_i(q)$ sería la recompensa cuando se almacenan $q$ unidades del artículo $i$.
  • $c_i(q)$ sería el costo de comprar $q$ unidades del artículo $i$.
  • $t_i(q)$ sería el objetivo cuando se almacenan $q$ unidades del artículo $i$.

La función de recompensa puede devolver valores positivos o negativos; sin embargo, tanto las funciones de costo como las de objetivo son estrictamente positivas: $$\forall i, \forall q, c_i(q) > 0 \text{ and } t_i(q) >0$$ $M$ sería el conjunto de limitaciones de MOQ. Para cada $m \in M$, tenemos $I_m$, la lista de los artículos que pertenece a la limitación $m$, y $Q_m$, la cantidad mínima que debería alcanzarse para cumplir con la limitación. $m_i(q)$ sería la función que define la contribución del artículo $i$ a la limitación de las MOQ $m$ cuando se compran $q$ unidades. Se cumpliría con la limitación $m$ si: $$\forall i \in I_m, q_i = 0 \text{ or } \sum_{i \in I_m}m_i(q_i) \geq Q_m$$ Así, es posible cumplir con las limitaciones de MOQ de dos maneras: alcanzando el umbral de MOQ, o manteniendo en cero las cantidades de todos los artífculos.

Luego, supongamos que $C$ es el costo máximo que puede pagarse por el pedido de compra. Definimos $\textbf{q}_C=(q_i)_i$, el mejor pedido de compra, como: $$\textbf{q}_C = \max_\textbf{q} \{ \sum_i c_i(q_i) \text{ with $m$ satisfied } \forall m\in M \}$$ El pedido de compra es el mejor en el sentido de que maximiza la recompensa para un determinado presupuesto. La solución $\textbf{q}_C$ no es la única; sin embargo, esta consideración es más bien teórica, porque el problema de las MOQ es demasiado complejo para una solución exacta. Para simplificar, procedemos como si la solución a continuación fuera única.

Por último, supongamos que $T$ es un mínimo objetivo, y definimos $\textbf{q}^T$ con $$C^T = \min_C \{ \left(\sum_{q_i \in \textbf{q}_C} t_i(q_i) \right) \geq T \}$$ y $$\mathbf{q}^T = \textbf{q}_{C^T}$$ La solución $\mathbf{q}^T$ se apoya sobre $\textbf{q}_C$, es decir, es la solución de maximización de ROI óptima más pequeña (en términos de presupuesto) que es lo suficientemente buena como para alcanzar el objetivo.