Aunque la programación lineal de enteros mixtos (MILP) es NP-complete, hay instancias solucionables (no triviales) de programación lineal de enteros mixtos.
NP-complete significa que la programación lineal de enteros mixtos es:
a) solucionable en tiempo polinómico con una máquina de Turing no determinista (la parte NP)
b) tiempo polinómico reducible a 3-SAT (la parte completa; para el resto de la discusión, esta parte realmente no importa)
O(2n)n
Esa afirmación no significa que las instancias "pequeñas" sean intratables. Desafortunadamente, no puedo hacer una declaración precisa de lo que significa pequeño para una instancia de MILP. Resuelvo problemas que tienen 3.000 o más variables de decisión binarias de forma rutinaria. Dependiendo de la formulación del problema, los problemas podrían tomar menos de .01 segundos (que es el caso de problemas relativamente poco restringidos) o más de una hora (que es el caso de problemas donde hay muchas restricciones activas), porque los problemas parecen tener una estructura favorable Puedo decir que los solucionadores de LP de última generación pueden resolver LP con varios millones de variables de decisión continua, y que sin una estructura especial, es muy poco probable que una instancia de problema con alrededor de 1,000 a 10,
Si cree que tiene una instancia solucionable de MILP, querrá usar un algoritmo de bifurcación y bifurcación o bifurcación. Las mejores implementaciones son CPLEX y Gurobi . Ambos son productos comerciales que tienen licencia académica gratuita si cavas lo suficiente. Si realmente necesita un solucionador de código abierto, los proyectos en la comunidad COIN-OR son más apropiados, aunque los paquetes fuente pueden ser complicados a veces. Los proyectos más relevantes serían el solucionador de bifurcación y corte CBC , el solucionador SYMPHONY , el solucionador de precio de bifurcación BCP y el solucionador de bifurcación y corte ABACUS . Todos estos proyectos requerirán múltiples paquetes de COIN-OR, debido a su estructura modular.
Si desea la opción de probar varios solucionadores, su mejor opción es utilizar la interfaz Open Solver de COIN-OR . Tenga en cuenta que algunas partes de esta interfaz solo le permitirán establecer opciones básicas de solucionador, y que para configurar opciones avanzadas para solucionadores, debe consultar las listas de correo de COIN-OR para obtener más detalles. Los solucionadores MILP comerciales son MUCHO (a veces un orden de magnitud o más) más rápidos que los solucionadores de código abierto. Otra opción para la creación de prototipos es el uso de un lenguaje de modelado algebraico como GAMS o AMPL . Ambos paquetes de software son comerciales, pero tienen versiones de prueba que pueden usarse en casos pequeños de problemas. Para casos de problemas más grandes, puede enviar archivos GAMS o AMPL aServidor NEOS a resolver; Este servidor está disponible para el público.
Si tiene una instancia suficientemente grande de MILP, ninguno de estos solucionadores funcionará bien. Puede relajar las variables enteras en variables continuas, resolver el problema y luego redondear a la colección más cercana de variables enteras que sea una solución factible de su instancia de problema. Una solución óptima de la relajación LP de su MILP le dará un límite inferior en el valor óptimo de la función objetivo de su MILP (suponiendo una minimización, por supuesto), y una solución factible de su MILP le dará un límite superior en el objetivo óptimo valor de la función de su MILP.
Si es realmente afortunado y su matriz de restricción es totalmente inimodular , puede usar un solucionador de LP para generar soluciones enteras para su MILP, y puede resolver su problema de manera eficiente a pesar de su gran tamaño. Otras clases de problemas tienen algoritmos de aproximación rápida, como problemas de mochila y problemas de corte de stock . También existen algoritmos de descomposición MILP especializados para problemas que tienen una estructura especial, aunque no estoy familiarizado con los detalles, ya que esos temas son algo especializados y están fuera del alcance de mi tesis.
No conozco un esquema de aproximación de tiempo completamente polinomial (FPTAS) específicamente para MILP, aunque existe un FPTAS de una clase de problema que incluye MILP (consulte este documento) Mi recomendación sería utilizar uno de los solucionadores de programación lineal de enteros mixtos anteriores junto con un límite de tiempo y tolerancias apropiadas en las brechas de optimización. Hacerlo le daría la mejor solución posible a su MILP dentro del límite de tiempo, y si el solucionador finaliza con éxito antes del límite de tiempo, la solución factible sería óptima dentro de las tolerancias de brecha de optimización que establezca. Este curso de acción aún le daría límites en la calidad de la solución, porque su solución factible sería un límite superior, y el solucionador podría darle un límite inferior apropiado. No se garantizaría que el límite esté dentro de una solución óptima de cierto factor, pero, de nuevo, cualquier FPTAS se volverá más costoso a medida que la aproximación sea mejor.
Lo más importante que puede hacer antes de conformarse con una formulación MILP es elegir la formulación más fuerte que pueda encontrar; Puede encontrar consejos sobre cómo elegir formulaciones fuertes en Introducción a la optimización lineal de Bertsimas y Tsitsiklis. La idea principal es elegir una formulación cuyas restricciones definan un politopo que esté lo más cerca posible del casco convexo de la formulación (también vea estas notas del curso ). Elegir una formulación fuerte puede marcar una gran diferencia en el tiempo que lleva resolver un problema.