2015-04-25 3 views
3

J'ai installé différents solveurs linéaires et modules pour Python au cours des dernières heures avec diverses erreurs d'installation et d'exécution. Voici un résumé de ce que je l'ai fait jusqu'à présent:Optimisation linéaire de la pâte/Optimisation linéaire avec Python

  • J'ai installé Pulp w/pip installer la pâte

Bien qu'il soit dit d'inclure un optimiseur de COIN, qui ne se sont pas à la Cas. J'ai couru l'un des exemples:

import pulp 
# Create problem instance 
giapetto = pulp.LpProblem("Giapetto's Workshop", pulp.LpMaximize) 

# Define Variables with lower bounds of zero 
x1 = pulp.LpVariable("Soldiers",0) 
x2 = pulp.LpVariable("Trains",0) 

# Add Objective 
giapetto += 3*x1 + 2*x2, "Profit" 

# Add Constraints 
giapetto += 2*x1 + x2 <= 100,"Finishing Labor" 
giapetto += x1 + x2 <= 80, "Carpentry Labor" 
giapetto += x1 <= 40, "Soldier Demand" 
giapetto += x1 + x2 == 20, "Minimum Production" 

giapetto.solve() 
#giapetto.solve(GLPK()) 

print pulp.LpStatus[giapetto.status] 
print pulp.LpSenses[giapetto.sense], giapetto.objective.name, "=", pulp.value(giapetto.objective) 

..included dans la documentation de Pulp, et a reçu cette erreur:

AttributeError: objet 'NoneType' n'a pas d'attribut 'actualSolve'

J'ai aussi essayé après l'importation GLPK (infusion installation glpk, qui a pris> 30mins bc d'une dépendance gcc manquante), et a obtenu l'erreur:

NameError: nom 'GLPK' n'est pas défini

Cependant, quand je simulé la ligne de commande en ipython, j'ai pu obtenir GLPK à exécuter:

%%script glpsol -m /dev/stdin -o /dev/stdout --out output 

# declare problem variables 
var x; 
var y; 
var z; 

# list all equations 
eqn1 : 3*x + 2*y + z = 12; 
eqn2 : 2.1*x + y = -3; 
eqn3 : y - z = 4; 

# solve 
solve; 

# display results 
display x, y, z; 

end; 

print output 

[Out:] 
GLPSOL: GLPK LP/MIP Solver, v4.52 
Parameter(s) specified in the command line: 
-m /dev/stdin -o /dev/stdout 
Reading model section from /dev/stdin... 
18 lines were read 
Generating eqn1... 
Generating eqn2... 
Generating eqn3... 
Model has been successfully generated 

Alors, ma question est double:

  1. Comment puis-je obtenir GLPK (ou tout solveur) à exécuter avec le premier exemple de code (sans l'utilisation de la ligne de commande)?
  2. Existe-t-il un solveur plus compatible avec Python, ou plus facile à utiliser, que je peux utiliser dans la liste ci-dessous?

* Solver pulp.solvers.GLPK_CMD passed. 
 
Solver pulp.solvers.PULP_CBC_CMD unavailable 
 
Solver pulp.solvers.CPLEX_DLL unavailable 
 
Solver pulp.solvers.CPLEX_CMD unavailable 
 
Solver pulp.solvers.CPLEX_PY unavailable 
 
Solver pulp.solvers.COIN_CMD unavailable 
 
Solver pulp.solvers.COINMP_DLL unavailable 
 
Solver pulp.solvers.GLPK_CMD unavailable 
 
Solver pulp.solvers.XPRESS unavailable 
 
Solver pulp.solvers.GUROBI unavailable 
 
Solver pulp.solvers.GUROBI_CMD unavailable 
 
Solver pulp.solvers.PYGLPK unavailable 
 
Solver pulp.solvers.YAPOSIB unavailable

+0

Quel système d'exploitation utilisez-vous? – dassouki

Répondre

0

Pour moi, en utilisant ubuntu il a fonctionné parfaitement avec l'installation de simplement les pièces-ou les bibliothèques des dépôts:

sudo apt-get install coinor-cbc coinor-clp 

Gardez à l'esprit que les solveurs commerciaux sont si cher pour de bonnes raisons; mais dans de nombreux cas, le solveur m'a très bien servi.

0

Vous pouvez télécharger le (freeware) COIN-OR solveur ici: http://www.coin-or.org/download/binary/SYMPHONY/

Après l'installation que vous pouvez simplement utiliser giapetto.solve() et il devrait automatiquement détecter et utiliser le solveur COIN-OR.