Markus Leopoldseder (Director de Conocimiento - Práctica Global de Manufactura y Gestión de la Cadena de Suministro en McKinsey) planteó dos preguntas relevantes sobre la aplicabilidad de la Programación Diferenciable (DP, por sus siglas en inglés) para fines de cadena de suministro. En esta publicación bastante técnica, intentaremos proporcionar algunas ideas sobre cómo se manejan respectivamente las restricciones de los enteros y la incertidumbre en DP. Esto es solo un primer vistazo al enfoque de Lokad. Planeamos publicar en una fecha posterior recetas extendidas en docs.lokad.com.

¿Cómo se aplica DP a las variables enteras? De hecho, si la función objetivo toma enteros como entradas, es posible que no sea diferenciable.

Desde una perspectiva de cadena de suministro, la mayoría de las decisiones son discretas: no podemos pedir 4.2 unidades de un producto, solo puede ser 4 o 5. Por lo tanto, buscamos, tanto desde una perspectiva de aprendizaje como de optimización, métodos que funcionen bien con enteros. Como señaló agudamente nuestro lector, los parámetros en DP son números, y esos parámetros no pueden estar restringidos a enteros, porque esta perspectiva no es compatible con el descenso de gradiente estocástico que se encuentra en el núcleo de DP.

Hay varias formas de obtener decisiones discretas y sus correspondientes funciones objetivo discretas a través de DP, que van desde enfoques ingenuos pero directos, hasta enfoques complicados pero sin igual en cuanto a optimización numérica.

Enteros e incertidumbre en la programación diferenciable

El enfoque más sencillo consiste en interpolar la función objetivo durante el entrenamiento y redondear los resultados durante la evaluación. Por ejemplo, si buscamos una cantidad de pedido de compra, que se espera que sea un número entero, la función objetivo se puede extender a números arbitrarios mediante interpolación. Esto funciona bien cuando se consideran sistemas que, aunque son discretos, exhiben comportamientos bastante lineales. Sin embargo, cuando se enfrenta a una no linealidad fuerte como una restricción de cantidad mínima de pedido (MOQ, por sus siglas en inglés), esto no funciona tan bien.

Para lidiar con estas situaciones, la función objetivo se puede reemplazar por una función sustituta, una función que aproxima la función objetivo original, pero de manera suave y diferenciable. Por ejemplo, la función escalón típicamente asociada al costo de penalización de una restricción de MOQ se puede reemplazar por una función sigmoide. Época tras época, la función sustituta se deforma progresivamente para acercarse numéricamente a la función objetivo original.

Desde una perspectiva de cadena de suministro, en nuestra experiencia, las funciones sustitutas funcionan sorprendentemente bien. De hecho, las situaciones en las que no es posible iterar suavemente hacia buenas soluciones son raras. Los problemas de cadena de suministro no son acertijos criptográficos donde cambiar un solo bit de una solución desvía por completo la solución. Por ejemplo, si hacer un pedido de compra de 490 unidades es rentable mientras hay un MOQ de 500, es muy probable que el pedido de compra de 500 unidades también sea rentable.

Luego, existen enfoques más sofisticados inspirados en los autoencoders variacionales: las salidas fraccionarias de una capa (como en las “capas de deep learning”) se convierten en un desvío entero aleatorio obtenido de una distribución arbitraria, por ejemplo, una distribución de Poisson. A través de este mecanismo, el programa, aunque opera solo con parámetros fraccionarios, produce salidas enteras que luego se pueden inyectar en las funciones objetivo. El descenso de gradiente estocástico repite el proceso un gran número de veces, al estilo de Monte Carlo, asegurando que las “leyes” que rigen la generación de desvíos enteros aleatorios estén correctamente ajustadas.

Finalmente, los enfoques más complejos, como AlphaZero, se basan en la introducción de una lista compleja de capas (por ejemplo, una red computacional “profunda”) que termina típicamente con una capa similar a Softmax para generar decisiones discretas. Estos enfoques ofrecen resultados de vanguardia en problemas de optimización altamente no lineales, como lo demuestra la victoria de AlphaGo (posteriormente redefinido como AlphaZero) sobre Lee Sedol. DP también puede aprovechar estos métodos, simplemente ajustando la profundidad y la complejidad de la red para mantener bajo control la carga computacional. Afortunadamente, en la práctica, si bien resolver un problema de MOQ es relativamente difícil, está lejos de ser tan difícil como vencer a un campeón mundial en Go en lo que respecta a problemas de optimización, y las redes “superficiales” (según los estándares de deep learning) ya logran mucho.

Ofrecer formas más directas y prácticas de lidiar con situaciones discretas, como las que se encuentran comúnmente en situaciones de cadena de suministro, fue una de las principales razones que nos llevó en Lokad a desarrollar nuestra propia pila de software de DP en lugar de adaptar un marco existente; precisamente para tener más margen de maniobra para introducir construcciones especiales diseñadas para adaptarse a esas situaciones.

Algunas de esas construcciones no son más que una biblioteca “estándar” de funciones escritas a través del propio lenguaje de DP, como una forma de mitigar tareas repetitivas y evitar clases de errores. Sin embargo, algunas de esas construcciones son más sutiles y se entrelazan con el descenso de gradiente estocástico para ofrecer capacidades especializadas que no podrían haberse implementado a través de una diferenciación automática “pura”.

¿Cómo lidiar con la incertidumbre con DP? De hecho, DP puede optimizar cualquier función objetivo compleja ajustando parámetros mediante un descenso de gradiente estocástico que optimiza una red neuronal, que no es más que una función especial también. ¿Cómo se consideran las distribuciones de probabilidad?

El enfoque dominante que adoptamos para lidiar con la incertidumbre en DP consiste en generar “trayectorias” - generando series de tiempo que reflejan flujos de eventos futuros - a partir de distribuciones de probabilidad subyacentes, y luego permitir que la función objetivo opere siguiendo un patrón de Monte Carlo. Este enfoque ofrece la posibilidad de modelar interacciones discretas complejas dentro de un sistema, como la consecuencia de cascadas de BOMs (listas de materiales), incluso si las distribuciones de probabilidad, utilizadas como entradas, solo estuvieran disponibles para la demanda futura de productos terminados.

Este enfoque no es novedoso. Los autoencoders variacionales, aunque diseñados desde una perspectiva bastante diferente, emplean una estrategia similar, tomando la parametrización de una distribución (una Gaussiana para VAE) como entrada y produciendo desvíos como salidas. Como se discutió anteriormente cuando ya mencionamos los autoencoders variacionales, a menudo estamos utilizando distribuciones de conteo que producen desvíos enteros, en lugar de distribuciones continuas como las Gaussiana.

Este enfoque generativo, donde las distribuciones se convierten en observaciones (es decir, trayectorias), también se puede internalizar por completo dentro del proceso de DP. En lugar de tomar distribuciones de probabilidad como entradas y optimizar decisiones a partir de ellas, las propias distribuciones se pueden aprender mientras se realiza la optimización al mismo tiempo. Por ejemplo, la previsión de la demanda se puede realizar conjuntamente con la optimización de precios, ya que la estrategia de precios tiene un fuerte impacto en la demanda, los dos aspectos no se pueden analizar realmente de forma aislada.

La parte generativa de la receta mencionada anteriormente ya se encuentra en las redes generativas adversarias que han tenido un gran éxito en la generación de imágenes fotorrealistas. Al considerar series de tiempo, las LSTM y GRU (una versión más simple y moderna de la LSTM) ofrecen formas de generar series de tiempo complejas que no podrían haber sido modeladas explícitamente a través de distribuciones de probabilidad.

DP ofrece más flexibilidad para aprovechar esas capacidades desde una perspectiva de la cadena de suministro, al tratar con objetos más heterogéneos (grafos, series de tiempo, datos relacionales) en comparación con los escenarios generalmente considerados desde una perspectiva de deep learning. Una vez más, la mayor parte de los esfuerzos de ingeniería de Lokad se han concentrado en la perspectiva de la cadena de suministro, para asegurarse de que las herramientas estuvieran alineadas con los requisitos específicos que surgen al optimizar stocks, precios, compras, producciones, surtidos, etc., en lugar de centrarse en imágenes, voces y procesamiento de lenguaje natural.