2015-04-25 3 views
3

Я устанавливал различные линейные решатели и модули для Python в течение последних нескольких часов с различными ошибками установки и времени выполнения. Вот краткое описание того, что я сделал до сих пор:Целевая линейная оптимизация/линейная оптимизация с помощью Python

  • Я установил Pulp ж/PIP установки Целлюлозно

Хотя говорят, включает монетку оптимизатор, что не получится быть дело. Я побежал один из примеров:

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 в документации Pulp, и получил эту ошибку:

AttributeError: объект 'NoneType' не имеет атрибута 'actualSolve'

Я также попробовал его после импорта GLPK (brew install glpk, который взял> 30 минут bc отсутствующей зависимости gcc) и получил ошибку:

NameError: имя 'GLPK' не определено

Однако, когда я моделируется командной строки в IPython, я смог GLPK бежать:

%%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 

Итак, мой вопрос имеет два аспекта:

  1. Как я могу получить GLPK (или любой решатель) для запуска с первым примером кода (без использования командной строки)?
  2. Есть ли решатель, который более совместим с Python или проще в использовании, что я могу использовать inline из списка ниже?

* 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

В какой ОС вы работаете? – dassouki

ответ

0

Для меня, используя убунту он работал совершенным с простой установкой монетными или библиотек из репозиториев:

sudo apt-get install coinor-cbc coinor-clp 

Имейте в виду, что коммерческие решатели так дорогой по уважительным причинам; но во многих случаях решатель монет служил мне очень хорошо.

0

Вы можете скачать (бесплатно) Монетные ИЛИ решатель здесь: http://www.coin-or.org/download/binary/SYMPHONY/

После установки, что вы можете просто использовать giapetto.solve(), и он должен автоматически обнаруживать и использовать COIN-OR решатель.

Смежные вопросы