2012-05-22 59 views
24

Necesito hacer un modelo de programación lineal. Estas son las desigualdades que estoy usando (por ejemplo):programación lineal en python?

6x + 4y <= 24 
x + 2y <= 6 
-x + y <= 1 
y <= 2 

necesito para encontrar el área descrita por estas desigualdades, y la sombra en un gráfico, así como realizar un seguimiento de los vértices de las líneas de delimitación de esta área, y dibuje la línea límite en un color diferente. Vea el gráfico a continuación para ver un ejemplo de lo que estoy buscando.

image of the points of intersection.

Estoy usando Python 3.2, numpy y matplotlib. ¿Hay mejores módulos para programación lineal en Python?

+1

El primer paso convierte el sistema de desigualdades en forma de matriz. –

+1

@izomorphius de acuerdo con la wikipedia, la programación lineal es la optimización matemática: http://en.wikipedia.org/wiki/Linear_programming – XORcist

+0

@ möter estuvo de acuerdo -iniciando mi comentario. El error es mío, no el Op. –

Respuesta

40

ACTUALIZACIÓN: La respuesta ha quedado obsoleta en los últimos 4 años, aquí hay una actualización. Usted tiene muchas opciones:

  • Si no tiene que hacerlo Python, entonces es mucho más fácil de hacer esto en un langage modelado, ver Any good tools to solve integer programs on linux?

  • personalmente use Gurobi estos días a través de su API de Python. Es un producto comercial de código cerrado pero gratuito para investigación académica.

  • SciPy ofrece programación lineal: scipy.optimize.linprog. (He nunca trató de éste.)

  • Con PuLP puede crear MPS y LP files y luego a resolver con GLPK, MONEDA CLP/CBC, CPLEX, o XPRESS a través de su interfaz de línea de comandos . Este enfoque tiene sus ventajas y desventajas .

  • Aparentemente, CVXOPT ofrece un Python interface to GLPK, lo hice no lo sé. He estado usando GLPK durante 8 años y puedo recomendar altamente GLPK. ¡El examples and tutorial of CVXOPT parece realmente agradable!

  • Puede encontrar otras posibilidades en el Wikilibro bajo GLPK/Python. Tenga en cuenta que muchos de estos no son necesariamente resticted a GLPK.

+4

+1 para "utilizar la herramienta adecuada". – djechlin

+0

usa PuLP, es una impresionante interfaz de Python para GLPK, CPLEX o Gurobi –

+2

Los votos bajos anónimos no ayudan a nadie. ¿Qué está mal con la respuesta? – Ali

17

Recomendaría el paquete cvxopt para resolver problemas de optimización convexa en Python. Un breve ejemplo con código Python para un programa lineal se encuentra en la documentación de cvxopt .

3

La única vez que se usa un gráfico para resolver un programa lineal es para un problema de tarea. En todos los demás casos, los problemas de programación lineal se resuelven mediante álgebra lineal matricial.

En cuanto a Python, si bien hay algunas bibliotecas de Python puro, la mayoría de las personas usa una biblioteca nativa con enlaces de Python. Existe una amplia variedad de librerías comerciales y comerciales para programación lineal. Para obtener una lista detallada, consulte Linear Programming en Wikipedia o Linear Programming Software Survey en OR/MS Today.

Descargo de responsabilidad: Actualmente trabajo para Gurobi Optimization y anteriormente trabajé para ILOG, que proporcionó CPLEX.

+6

Entre la tarea y el trabajo también hay pasión por el aprendizaje: creo que la primera frase que escribió está fuera de lugar ... – siemanko

+0

¿Cuál es el más rápido para los problemas de programación lineal? – Royi

0

Recomendaría usar el paquete PuLP python. Tiene una interfaz agradable y puedes usar diferentes tipos de algoritmos para resolver LP.

0

lpsolve es lo más fácil para mí. No es necesario instalar un solucionador por separado. Viene con el paquete.

2

Para resolver el problema de programación lineal, puede usar el módulo scipy.optimize.linprog en SciPy, que usa el algoritmo Simplex.

0

Las otras respuestas han hecho un buen trabajo proporcionando una lista de solucionadores. Sin embargo, solo PuLP ha sido mencionado como una biblioteca de Python para la formulación de modelos LP.

Otra gran opción es Pyomo. Al igual que PuLP, puede enviar el problema a cualquier solucionador y volver a leer la solución en Python. También puede manipular los parámetros del solucionador. Un compañero de clase y yo comparamos el rendimiento de PuLP y Pyomo en 2015 y encontramos que Pyomo podía generar archivos .LP por el mismo problema varias veces más rápido que PuLP.

Cuestiones relacionadas