programmation linéaire en python?

je dois faire un modèle de programmation linéaire. Voici les inégalités que j'utilise (par exemple):

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

je dois trouver la zone décrite par ces inégalités, et l'ombrager dans un graphique, ainsi que garder la trace des sommets des lignes de limite de cette zone, et dessiner la ligne de limite dans une couleur différente. Voir le graphique ci-dessous pour un exemple de ce que je cherche.

image of the points of intersection.

J'utilise Python 3.2, numpy, et matplotlib. Être il y a de meilleurs modules pour la programmation linéaire en Python?

28
demandé sur Jason Sundram 2012-05-22 11:56:30

7 réponses

mise à jour: la réponse est devenue quelque peu périmée au cours des 4 dernières années, voici une mise à jour. Vous avez de nombreuses options:

  • Si vous n'avez pas faites-le Python alors il est beaucoup plus facile de le faire dans un langage de modélisation tout bon outil à résoudre programmes integer sur linux?

  • personnellement, j'utilise Guobi ces jours à travers son API Python. C'est un commercial, fermé-source produit, mais gratuit pour la recherche académique.

  • SciPy offre une programmation linéaire: scipy.optimiser.linprog. (J'ai jamais essayé celui-ci.)

  • pulpe vous pouvez créer MPS et fichiers LP et puis les résoudre avec GLPK, COIN CLP / CBC, CPLEX, ou XPRESS à travers leur interface de ligne de commande. Cette approche a ses avantages et inconvénient.

  • Apparemment, CVXOPT offre interface Python vers GLPK, je n'ai sais pas que. J'ai été en utilisant GLPK depuis 8 ans maintenant et je peux recommandons fortement de GLPK. exemples et tutoriel de CVXOPT semble vraiment sympa!

  • vous pouvez trouver d'autres possibilités dans le Wikibook sous GLPK / Python. Notez que la plupart de ces ne sont pas nécessairement réglementé à GLPK.

48
répondu Ali 2018-06-24 16:11:29

je recommanderais le paquet cvxopt pour résoudre les problèmes d'optimisation convex en Python. Un petit exemple avec le code Python pour un programme linéaire est dans la documentation de cvxopt ici.

18
répondu silvado 2012-05-22 09:42:35

La seule fois qu'un graphe est utilisé pour résoudre un programme linéaire est un problème. Dans tous les autres cas, les problèmes de programmation linéaire sont résolus par l'algèbre linéaire de matrice.

quant à Python, bien qu'il existe des bibliothèques pures-Python, la plupart des gens utilisent une bibliothèque native avec des fixations Python. Il existe une grande variété de bibliothèques gratuites et commerciales pour la programmation linéaire. Pour une liste détaillée, voir Programmation Linéaire dans Wikipédia ou l' Linéaire Enquête Sur Les Logiciels De Programmation en salle D'opération Aujourd'hui.

Disclaimer: je travaille actuellement pour Gurobi Optimisation et travaillé auparavant pour ILOG, qui a fourni CPLEX.

5
répondu Greg Glockner 2012-05-23 02:11:55

Pour résoudre le problème de programmation linéaire, vous pouvez utiliser le scipy.optimiser.linprog module en SciPy, qui utilise l'algorithme Simplex.

4
répondu Cosmo Harrigan 2015-10-02 06:48:40

les autres réponses ont fait du bon travail en fournissant une liste de solveurs. Cependant, seule PuLP a été mentionnée comme bibliothèque Python pour la formulation des modèles LP.

une autre bonne option est Pyomo. Comme PuLP, vous pouvez envoyer le problème à n'importe quel résolveur et lire la solution de nouveau en Python. Vous pouvez également manipuler les paramètres du solveur. Un camarade de classe et moi avons comparé la performance de PuLP et Pyomo en 2015 et nous avons trouvé Pyomo pourrait générer .Les fichiers LP pour le même problème plusieurs fois plus rapidement que la Pulpe.

2
répondu Sesquipedalism 2017-07-25 20:16:15

je recommande d'utiliser le PuLP paquet python. Il a une interface agréable et vous pouvez utiliser différents types d'algorithmes pour résoudre LP.

1
répondu mridul 2014-09-27 18:28:56

lpsolve est le plus facile pour moi. Pas besoin d'installer un solveur séparé. Il est livré avec le package.

0
répondu Rudraksha 2014-11-02 18:04:39