Optimización de cócteles como problema de programación entera

Fuentes: Cocktail Optimization, an Integer Programming Problem

Un programador repasa su experiencia con la resolución de problemas de programación entera, una rama de la investigación operativa dedicada a optimizar decisiones discretas, y la aplica a un caso singular: seleccionar los cócteles que pueden prepararse con un número limitado de ingredientes.

El autor, con experiencia previa en dedupe mediante algoritmos a medida de ramificación y acotación (branch-and-bound), descubrió mientras trabajaba en un proyecto de rutas de vehículos que los solvers comerciales de programación lineal entera mixta, como las Google OR Tools, superan con creces a los algoritmos artesanales. Describe estas herramientas como «maravillas técnicas» que condensan miles de horas de investigación e ingeniería.

Hace unos años, el autor ya había publicado un solver propio para el problema de maximizar el número de cócteles preparables con una bandeja de ingredientes determinada. Su código, con un presupuesto de 30 ingredientes, tardaba varios minutos en encontrar una solución óptima y, en la práctica, nunca concluía la búsqueda de mejoras. Ahora, al probar glpk.js, un solver en JavaScript, el sistema alcanza la solución óptima en milisegundos y determina que con 30 ingredientes pueden elaborarse 29 cócteles, generando además la lista de compra correspondiente.

La entrada ilustra cómo los solvers genéricos de programación entera han alcanzado un nivel de madurez que hace innecesario, en la mayoría de los casos, implementar algoritmos de optimización a medida, incluso en problemas con restricciones complejas.