web-dev-qa-db-fra.com

programmation linéaire en python?

Je dois créer 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, la tracer dans un graphique, ainsi que suivre les sommets des lignes de démarcation de cette zone et tracer la ligne de délimitation d'une couleur différente. Voir le graphique ci-dessous pour un exemple de ce que je recherche. 

image of the points of intersection.

J'utilise Python 3.2, numpy et matplotlib. Existe-t-il de meilleurs modules pour la programmation linéaire en Python?

29
user24562

Je recommanderais le paquet cvxopt pour résoudre les problèmes d'optimisation convexes en Python. Un court exemple de code Python pour un programme linéaire se trouve dans la documentation de cvxopt here .

19
silvado

Le seul moment où un graphique est utilisé pour résoudre un programme linéaire concerne un problème de devoir. Dans tous les autres cas, les problèmes de programmation linéaire sont résolus par une algèbre linéaire matricielle.

En ce qui concerne Python, bien qu'il existe des bibliothèques Python pures, la plupart des gens utilisent une bibliothèque native avec des liaisons 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 sur Wikipedia ou dans le Enquête sur les logiciels de programmation linéaire dans OR/MS aujourd'hui.

Disclaimer: Je travaille actuellement pour Gurobi Optimization et auparavant pour ILOG, qui fournissait CPLEX.

5
Greg Glockner

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

4
Cosmo Harrigan

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

Une autre bonne option est Pyomo . Comme PuLP, vous pouvez envoyer le problème à n’importe quel solutionneur et relire la solution dans Python. Vous pouvez également manipuler les paramètres du solveur. Un camarade de classe et moi avons comparé les performances de PuLP et de Pyomo en 2015 et nous avons découvert que Pyomo pouvait générer des fichiers .LP pour le même problème plusieurs fois plus rapidement que PuLP.

3
Sesquipedalism

Je recommanderais d'utiliser le paquet PuLP python. Il a une interface agréable et vous pouvez utiliser différents types d’algorithmes pour résoudre les problèmes de LP.

1
mridul

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

0
Rudraksha