programación lineal en python?

Necesito hacer un modelo de programación lineal. Aquí están las desigualdades que estoy usando (por ejemplo):

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

Necesito encontrar el área descrita por estas desigualdades y sombrearla en un gráfico, así como llevar un registro de los vértices de las líneas delimitadoras de esta área y dibujar la línea delimitadora en un color diferente. Vea el gráfico a continuación para ver un ejemplo de lo que estoy buscando.

imagen de los puntos de intersección.

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

preguntado el 22 de mayo de 12 a las 08:05

Paso uno convertir el sistema de desigualdades en forma de matriz. -

@izomorphius según wikipedia, la programación lineal es optimización matemática: en.wikipedia.org/wiki/Linear_programming -

@möter estuvo de acuerdo, eliminando mi comentario. El error es mío, no del Op.

Tu tercera ecuación, -x + x <= 1 es un no-op, ya que se simplifica a 0 <= 1, lo cual es cierto para todo x e y. -

@ user24562 ¿Podría explicar también el proceso que ha utilizado para su código predeterminado? (usando numpy y matplotlib) -

7 Respuestas

ACTUALIZACIÓN: La respuesta se ha vuelto algo obsoleta en los últimos 4 años, aquí hay una actualización. Tienes muchas opciones:

  • Si no que hazlo Python, entonces es mucho más fácil hacerlo en un lenguaje de modelado, consulte nuestra página, ¿Alguna buena herramienta para resolver programas enteros en Linux?

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

  • Con Pulpa puedes crear MPS y archivos LP y luego resuélvalos con GLPK, COIN CLP/CBC, CPLEX o XPRESS a través de su interfaz de línea de comandos. Este enfoque tiene sus ventajas y desventajas.

  • La OR-Herramientas de Google es un paquete de software de código abierto para la optimización, ajustado para abordar los problemas más difíciles del mundo en enrutamiento de vehículos, flujos, programación entera y lineal, y programación de restricciones.

  • piomo es un lenguaje de modelado de optimización de código abierto basado en Python con un conjunto diverso de capacidades de optimización.

  • SciPy ofrece programación lineal: scipy.optimizar.linprog. (Nunca he probado este.)

  • Al parecer, CVXOPT ofrece una Interfaz de Python para GLPK, No sabía eso. he estado usando GLPK desde hace 8 años y puedo recomendar GLPK. El ejemplos y tutorial de CVXOPT parece muy agradable!

  • Puede encontrar otras posibilidades en Wikibook bajo GLPK/Python. Tenga en cuenta que muchos de estos no están necesariamente restringidos a GLPK.

respondido 24 nov., 20:07

use PuLP, es una increíble interfaz de python para GLPK, CPLEX o Gurobi - Tom Larkworthy

Los votos negativos anónimos no ayudan a nadie. ¿Qué tiene de malo la respuesta? - Ali

Versión 1.1 de PuLP enlaces a una página de inicio en jeannot.org que mi Sophos bloquea con "Sitio web de alto riesgo bloqueado, el acceso ha sido bloqueado porque se ha encontrado la amenaza C2/Generic-A en este sitio web". de Sophos página dice que es "Malware de comando y control". ¿Alguien ha usado PuLP? ¿Cuál es su opinión sobre esto? - miguelmorin

@mmorin Gracias, acepté tu edición. Es bueno ver que la gente encuentra útil esta respuesta. - Ali

Creo que PuLP debería estar en la parte superior de esta lista, seguido de Google ortools y Pyomo. Evgeny

recomiendo 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 aquí.

Respondido 17 Oct 19, 09:10

Las otras respuestas han hecho un buen trabajo proporcionando una lista de solucionadores. Sin embargo, solo PuLP se ha mencionado como una biblioteca de Python para formular modelos de LP.

Otra gran opción es piomo. 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 descubrimos que Pyomo podía generar archivos .LP para el mismo problema varias veces más rápido que PuLP.

Respondido 25 Jul 17, 21:07

La única vez que se usa una gráfica 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 usan una biblioteca nativa con enlaces de Python. Existe una amplia variedad de bibliotecas comerciales y gratuitas para la programación lineal. Para obtener una lista detallada, consulte Programación lineal en Wikipedia o el Encuesta de software de programación lineal en OR/MS hoy.

Descargo de responsabilidad: actualmente trabajo para Gurobi Optimization y anteriormente trabajé para ILOG, que proporcionaba CPLEX.

contestado el 23 de mayo de 12 a las 03:05

Entre la tarea y el trabajo también está la pasión por aprender - Creo que la primera frase que escribiste está fuera de lugar... - Siemanko

¿Cuál es el más rápido para problemas de programación lineal? - Rey

Para resolver el problema de programación lineal, puede utilizar el scipy.optimizar.linprog módulo en SciPy, que utiliza el algoritmo Simplex.

Respondido 02 Oct 15, 07:10

Recomendaría usar el Pulpa paquete pitón. Tiene una interfaz agradable y puedes usar diferentes tipos de algoritmos para resolver LP.

Respondido el 27 de Septiembre de 14 a las 19:09

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

respondido 02 nov., 14:18

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.