El problema del despacho de inventario

El problema del despacho de inventario











Inicio » Recursos » Aquí Por Joannès Vermorel, noviembre de 2016

El despacho de inventario hace referencia a un problema de la cadena de suministro que implica el equilibrio de las cantidades de inventario originales entre varias ubicaciones. La división de inventario debe respetar la cantidad de stock inicialmente disponible en cada ubicación, y dar cuenta de los costos de transporte que implica el despacho mismo. El solver de despacho es un solver numérico que es esencialmente similar al solver de MOQ, pero que está pensado para trabajar con el problema de despacho.

Resumen del problema de despacho

La noción de despacho de inventario hace referencia un problema de la cadena de suministro cuantitativa en el que las existencias de productos tienen que equilibrarse entre ubicaciones. A cada par de producto+ubicación se lo denomina SKU (Unidad de mantenimiento de existencias).

Existen incentivos económicos para la decisión de mantener una cierta cantidad de stock por cada SKU, que se modelan como recompensas económicas. Agregar más stock a una ubicación puede generar una recompensa positiva si hay demanda del stock en esa ubicación específica, pero también puede generar una recompensa negativa si solo infla los costos de almacenamiento sin mejorar sustancialmente el servicio.

De modo similar, también es necesario considerar los costos de transporte. Estos costos generalmente representan la inversión que debe hacerse para transportar inventario de una ubicación a otra. Estos costos pueden tener un componente lineal —en el que los costos de transporte aumentan de modo lineal con las cantidades de productos transportados—, pero también puede tener un componente no lineal, con costos fijos cada vez que se considera una operación de transporte.

Por último, debido a limitaciones de transporte, puede que no todos los pares de ubicaciones sean elegibles para el transporte. Cuando un inventario puede equilibrarse entre un par de SKU compatibles o, dicho de otro modo, dos SKU que almacenan el mismo producto, nos referimos a este par como un arco (edge) de transporte.

El objetivo final es maximizar las recompensas económicas asociadas con las nuevas posiciones de stock obtenidas del transporte de los productos a las diferentes ubicaciones, al tiempo que se minimizan los costos de transporte asociados.

Definición formal del problema de despacho

Hagamos las siguientes suposiciones: supongamos que $i$ y $j$ son las ubicaciones, y que $k$ son los productos. $T_{ijk}$ es una cantidad entera no negativa transportada desde $i$ hasta $j$ del producto $k$. $U_{ijk}$ es el costo de transporte por unidad. $G$ es una partición de un triplo $(i,j,k)$ y $V_g$ con $g \in G$ que es el costo umbral de transporte asociado con el subconjunto $g$. $R_{ik}: \mathbb{Z}\to\mathbb{R}$ es la función de recompensa asociada con las variaciones de stock en la ubicación $i$ para el producto $k$. $Q_{ik}$ es la cantidad de stock máxima del producto $k$ que puede transportarse de la ubicación $i$. Y supongamos que $H$ es la función escalón de Heaviside.

Estamos buscando la solución de transporte $T_{ijk}$ que maximiza: $$\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) $$ respetando al mismo tiempo las siguientes limitaciones: $$ \forall i, \forall j, \forall k, T_{ijk} \geq 0 \\ \forall i, \forall k, \sum_j T_{ijk} \leq Q_{ik} $$ Aquí, la recompensa $R$ generalmente representa la parte positiva de la ecuación, mientras que los costos $U$ y $V$ representan la parte negativa.

En general, encontrar el nivel óptimo de transporte es un problema numérico complejo, pero, de todos modos, es posible encontrar soluciones aproximadas con un solver específico.

La sintaxis de Envision para el solver de despacho

Lokad proporciona un componente específico para la resolución numérica del problema de despacho, llamado solver de despacho. En esta sección, presentamos la sintaxis de Envision asociada con este solver. La función solve.dispatch() aprovecha los argumentos con nombre:
T.Q = solve.dispatch(
  sku: S.Product, S.Location
  reward: S.Reward
  stockAvailable: S.Available
  stockEligible: S.Eligible // opcional
  edge: T.Product, T.Source, T.Destination
  unitCost: T.UnitCost // opcional
  groupId: T.Group // opcional
  groupCost: T.GroupCost) // opcional
La tabla S está pensada para ser una representación de todas las SKU, es decir, de todos los pares producto+ubicación. La tabla T está pensada para ser un gráfico de transporte, que representa todos los arcos en los podrá tener lugar el transporte. Las cantidades devueltas —T.Q— representan las cantidades transportadas optimizadas.

Los argumentos son los siguientes:

  • sku (texto, texto) : el producto y la ubicación de la SKU, implícitamente asociados con el argumento edge, todas las posibles transferencias.
  • reward (distribución): la distribución de recompensas asociada con la posición de stock final para el artículo en una determinada ubicación.
  • stockAvailable (número): representa el punto de inicio para el cálculo de la recompensa para cada SKU, antes de que tenga lugar cualquier transferencia de inventario.
  • stockEligible (número): representa la cantidad máxima de stock que puede tomarse de una SKU. Cuando se omite, todo el argumento stockAvailable es considerado elegible. En la práctica, el inventario que está en tránsito se contará como parte del stockAvailable (stock disponible). Sin embargo, este inventario no puede contarse como elegible para una (re)transferencia inmediata.
  • edge (texto, texto, texto): la lista de todos los arcos de transferencia aceptables. Si en esta tabla no hubiera aun arco, no será posible transportar ninguna cantidad a lo largo de este arco.
  • unitCost (número): un costo de transporte lineal por unidad al transportar cantidades a lo largo del arco. Cuando este costo se omite, se supone que es cero.
  • groupId (texto) y groupCost (número): un costo de transporte no lineal que se vuelve efectivo alguno de los arcos que pertenece al grupo es diferente de cero. De lo contrario, el costo de transporte se mantiene en cero. Cuando este costo se omite, se supone que es cero.

El solver de despacho hace uso del álgebra de distribuciones disponible en Envision para representar las recompensas económicas. Estas distribuciones habitualmente se generan con anticipación aprovechando la función de recompensa por existencias.

De acuerdo con los resultados de transporte calculados por el solver de despacho, se simplifica el cálculo de las variaciones de stock resultantes para cada SKU con:
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

Referencias

El problema de la cadena de suministro presentado aquí puede verse como un híbrido entre el problema de transporte clásico (Wikipedia) y el problema de despacho económico clásico (Wikipedia). El problema de transporte se concentra en los costos de transporte generados por los productos en movimiento entre ubicaciones. El problema de despacho económico se concentra en las recompensas que dependen de las cantidades recibidas por diferentes ubicaciones. Además, el problema de despacho presente también puede verse como un caso especial del problema de asignación de recursos.