El famoso artículo de 1983 de H. Lenstra Integer Programming With A Fixed Number Of Variables establece que los programas enteros con un número fijo de variables pueden resolverse en el tiempo polinomial en la longitud de los datos.
Lo interpreto de la siguiente manera.
- La programación de enteros en general todavía es NP completa, pero si el tamaño de mi problema típico en cuestión (por ejemplo, alrededor de 10.000 variables, un número arbitrario de restricciones) es factible en la práctica, entonces podría construir un algoritmo que escale polinomialmente en el número de restricciones, pero no en El número de variables y restricciones.
- El resultado también es aplicable para la programación binaria, ya que puedo forzar cualquier número entero a 0-1 agregando una restricción apropiada.
¿Es correcta mi interpretación?
¿Este resultado tiene alguna implicación práctica? Es decir, ¿hay una implementación disponible o se usa en solucionadores populares como CPLEX, Gurobi o Mosek?
Algunas citas del periódico:
Esta longitud puede, para nuestros propósitos, definirse como n · m · log (a + 2), donde a denota el máximo de los valores absolutos de los coeficientes de A y b. De hecho, no es probable que exista tal algoritmo polinómico, ya que el problema en cuestión es NP-completo
[...]
Se conjeturó [5], [10] que para cualquier valor fijo de n existe un algoritmo polinómico para la solución del problema de programación lineal de enteros. En el presente trabajo demostramos esta conjetura exhibiendo dicho algoritmo. El grado del polinomio por el cual se puede limitar el tiempo de ejecución de nuestro algoritmo es una función exponencial de n.
fuente
Respuestas:
El algoritmo más rápido actual es en realidad lineal en la longitud del programa lineal entero para cada valor fijo de . En su tesis doctoral, Lokshtanov (2009) resume muy bien los resultados de Lenstra (1983), Kannan (1987) y Frank y Tardos (1987) según el siguiente teorema.n
Por lo tanto, el problema es el parámetro lineal lineal parametrizado por el número de variables.
1) Sí, la programación lineal entera está "todavía" completada por NP. El tiempo de ejecución del resultado teórico anterior depende solo linealmente del número de restricciones, por lo que se ajusta muy bien en el número de restricciones. Sin embargo, no conozco ninguna implementación real de este algoritmo.
2) Sí, hacer que las variables tomen valores binarios es sencillo como lo observó.
Actualizar. La dependencia de realidad se puede mejorar en el tiempo de ejecución para la programación lineal entera. Basado en Clarkson (1995) y Eisenbrand (2003) (ver los comentarios a continuación) se puede obtener un algoritmo con tiempo de ejecución donde es el número de restricciones y es el número máximo de bits necesarios para codificar una restricción o la función objetivo.L
fuente
Aquí hay un par de puntos con respecto a las implicaciones prácticas de los resultados de tipo Lenstra, y las posibles implementaciones en CPLEX, Gurobi, etc. Uno de los pasos clave en la mayoría de tales algos para IP es ramificarse en direcciones "buenas" o "delgadas", es decir, hiperplanos a lo largo de los cuales el ancho del politopo no es demasiado grande (polinomio en variables y tamaño de datos). Pero Mahajan y Ralphs (preimpresión aquí ) mostraron que el problema de seleccionar una disyunción óptima es NP-completo. Por lo tanto, parecería difícil crear implementaciones prácticamente eficientes de esta clase de algos.
La mayoría de los algos implementados en paquetes como CPLEX podrían clasificarse como métodos de ramificación y corte. Esta familia de técnicas generalmente funciona bien en instancias de IP que son factibles, y a menudo son capaces de encontrar soluciones casi óptimas. Pero el foco de los algos tipo Lenstra está en las peores instancias de IP que no son factibles para comenzar, y el objetivo es demostrar su inviabilidad entera (y estudian la complejidad de esta tarea). AFAIK, no hay una clase de problemas con relevancia práctica que se ajuste a esta descripción. Entonces, la gente de CPLEX / Gurobi probablemente no implementaría algos tipo Lenstra en el corto plazo.
fuente