¿El mejor libro sobre la implementación del Método Simplex?


14

Estoy interesado en implementar SM para la tarea LP, sin embargo, he oído hablar de posibles dificultades: el libro de Cormen dice que es posible tener datos de entrada que harán que la implementación ingenua se comporte en un tiempo exponencial. También he oído que la implementación ingenua puede repetirse para algún tipo de datos.

¿Existe un libro / documento / fuente que explique los matices de la implementación práctica de SM?

Gracias por adelantado.


Respuestas:


13

Recomiendo encarecidamente el artículo de Bixby, el "padre" de CPLEX, que analiza no solo la implementación de aspectos del algoritmo simplex (revisado): Robert E. Bixby , Resolviendo programas lineales del mundo real: una década y más progreso , operaciones Research (50) 2002, 3-15 .


12

El algoritmo simplex no está en P. CLRS, por lo tanto, afirma que, aunque en la práctica funciona "bien", hay algunas entradas que hacen que el algoritmo se ejecute en tiempo exponencial. Esto está estrictamente relacionado con el algoritmo, no con su implementación: lo enfrentará independientemente de cómo implemente exactamente el algoritmo. Sin embargo, LP está en P. Esto fue probado por Khachian en 1979, sin embargo, su algoritmo elipsoide no es práctico. Hoy en día, los métodos de puntos interiores son ampliamente utilizados. El primero fue descubierto por Karmarkar en 1984.

Si está interesado en implementaciones prácticas, eche un vistazo a:

GUROBI, gratuito para uso académico, es en este momento el mejor optimizador disponible (versiones paralelas secuenciales y de memoria compartida):

http://www.gurobi.com

la biblioteca GLPK:

http://www.gnu.org/software/glpk/

Este es un proyecto de código abierto, que proporciona implementaciones para:

  • métodos primarios y dobles simples
  • método de punto interior primario-dual
  • método de ramificación y corte
  • traductor para GNU MathProg
  • interfaz de programa de aplicación (API)
  • solucionador de LP / MIP independiente

12
En efecto. Recomiendo encarecidamente NO intentar implementar simplex usted mismo, a menos que ese sea el objetivo del ejercicio. Si solo quieres usarlo, los métodos estándar son mucho mejores. Además, CPLEX es gratuito para uso académico si es apropiado para usted.
Suresh Venkat

1
¿Hay implementaciones distribuidas (como MPI) de código abierto de LP?
Tomek Tarczynski

3
@Tomek LP es P-completo y es poco probable que tenga una paralelización eficiente.
Marcus Ritt

@Tomek: Simphony proporciona una versión distribuida que actualmente se ejecuta en cualquier entorno compatible con el protocolo de paso de mensajes PVM (MPI aún no es compatible). El mismo código fuente también se puede compilar para arquitecturas de memoria compartida utilizando cualquier compilador compatible con OpenMP. Consulte branchandcut.org y el sitio web COIN-OR fuertemente relacionado: coin-or.org
Massimo Cafaro

99
CPLEX es probablemente la mejor implementación de LP actualmente disponible (es por eso que la gente paga tanto por él), pero prácticamente todas las implementaciones ampliamente utilizadas funcionarán sustancialmente mejor que cualquier cosa que usted mismo programe. Esto incluye los paquetes Mathematical, Maple y MATLAB. Existen muchas implementaciones, incluidas algunas gratuitas bastante buenas (QSopt, por ejemplo, que es gratis si no planea usarlo con fines comerciales), por lo que programarlo usted mismo solo vale la pena para la experiencia de aprendizaje.
Peter Shor

9

El libro de Programación Lineal de Vanderbei revisa muchos de los detalles de bajo nivel ... Pero como sugieren las otras respuestas / comentarios, implementar el solucionador de LP es una tarea difícil e ingrata. El solucionador estándar es probablemente el camino a seguir ... (También hay algunos solucionadores LP de código abierto ...)


6

No son solo las implementaciones ingenuas las que a veces se comportan en tiempo exponencial. De hecho, creo que todas las reglas deterministas y aleatorias conocidas tienen entradas superpolinomiales en el peor de los casos. La mayoría de las entradas conocidas que producen este comportamiento en el peor de los casos están altamente estructuradas, una pregunta relacionada:

La estructura de instancias patológicas para algoritmos simplex

Sin embargo, en la práctica SM funciona bien. Esto se ha formalizado mediante la introducción del análisis suavizado, que es básicamente el análisis del peor de los casos con entradas ligeramente perturbadas. Bajo este análisis, SM es polytime, en otras palabras, para cada entrada (incluso las patológicas) hay una ligera perturbación que permite que el algoritmo funcione bien. Esta información se ha transformado en un algoritmo aleatorio que funciona en polytime. Sin embargo, hasta donde yo entiendo, todavía hay un debate sobre si este algoritmo califica como un algoritmo simplex 'verdadero'. Tampoco sé si los paquetes estándar implementan algo similar a esto, pero debería poder encontrar alguna implementación si busca, debido a que el resultado tiene más de 5 años.


1

Puede consultar Luenberger, Ye, Programación lineal y no lineal, 3ª ed. Eso parece bastante completo, pero aún no he llegado lo suficientemente lejos como para decir si responde completamente a su pregunta.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.