在 Anaconda GUI 上使用 Pyomo、GLPK 和 Spyder——这可能吗?如果是这样,为什么这对我不起作用?
Using Pyomo, GLPK, with Spyder on Anaconda GUI- is this possible? if so, why isn't this working for me?
我对编程和优化领域还很陌生。我想知道是否可以使用 Anaconda GUI 在 Spyder 上使用 Pyomo 和 Glpk 求解器?
这是我在 MacBook 上使用终端 window 下载 Pyomo 和 Glpk 的方式:
conda 安装-c conda-forge pyomo
conda 安装-c conda-forge glpk
我想用Spyder重新创建一个简单的优化仓库问题,但是我运行
在 Spyder 的控制台上进入此错误:
runfile('/Users/.../Spyder Tutorials and Examples /ch3_concrete_ex.py', wdir='/Users/.../Spyder Tutorials and Examples ')
runfile('/Users/.../Spyder Tutorials and Examples /ch3_concrete_ex.py', wdir='/Users/.../Spyder Tutorials and Examples ')
File "/Users/a.../Spyder Tutorials and Examples /ch3_concrete_ex.py", line 46
pyomo solve --solver=glpk ch3_concrete_ex.py
^
SyntaxError: invalid syntax
我的猜测是我需要在 Spyder 的环境中添加 Glpk 和 Pyomo?有人可以吗
提供一些指导?我不应该为此使用 Anaconda 吗?
下面是我的代码的副本:
from pyomo.environ import *
model=ConcreteModel(name="(WL)")
N=['Harlingen', 'Memphis']
M=['NYC','LA', "Chicago", 'Houston']
d={('Harlingen', 'NYC'):1956,\
('Harlingen', 'LA'):1606,\
('Harlingen', 'Chicago'): 1410,\
('Harlingen', 'Houston'):330,\
('Memphis', 'NYC'):1096,\
('Memphis', 'LA'):1792,\
('Memphis', 'Chicago'): 1410,\
('Memphis', 'Houston'): 330}
P=2
model.x = Var(N,M, bounds=(0,1))
model.y = Var(N, within=Binary)
def obj_rule(model):
return sum(d[n,m]*model.x[n,m] for n in N for m in M)
model.obj=Objective(rule=obj_rule)
def one_per_cust_rule (model,m):
return sum(model.x[n,m] for n in N)==1
model.one_per_cust_rule= Constraint(M,rule=one_per_cust_rule)
def warehouse_active_rule(model,n,m):
return model.x[n,m] <= model.y[n]
model.warehouse_active_rule= Constraint(N,M, rule=warehouse_active_rule)
def num_warehouses_rule(model):
return sum(model.y[n] for n in N) <=P
model.num_warehouses= Constraint(rule=num_warehouses_rule)
pyomo solve --solver=glpk ch3_concrete_ex.py
如有任何提示,我们将不胜感激!
您遇到问题是因为您试图在程序中执行终端命令。让我解释一下……有几种方法可以调用 pyomo 来求解模型。如果安装正确,Pyomo 有一个命令行界面,您可以使用命令 pyomo
调用该界面。所以这个命令:
pyomo solve --solver=glpk ch3_concrete_ex.py
是您在终端提示符下写的东西,不是在您的程序中。
我发现调用程序语法中的所有求解器内容要容易得多,而只是 运行 文件就像任何其他 python 程序一样。用以下语法替换上面的行:
solver = SolverFactory('glpk')
solution = solver.solve(model)
display(model)
然后 运行 您的程序与任何其他 python 程序一样来自 spyder 或仅来自终端:
% : python ch_3_concrete_ex.py
我刚刚做了 works/solves 很好。
不过令我惊讶的是 glpk 是 conda-installable。我记得安装它并且在 mac 上是一个很大的痛苦。他们一定已经清理了安装过程。如果您正在学习学术课程并将进行大量优化,那么 Gurobi 很棒并且拥有 free/cheap 许可证。
我对编程和优化领域还很陌生。我想知道是否可以使用 Anaconda GUI 在 Spyder 上使用 Pyomo 和 Glpk 求解器?
这是我在 MacBook 上使用终端 window 下载 Pyomo 和 Glpk 的方式: conda 安装-c conda-forge pyomo conda 安装-c conda-forge glpk
我想用Spyder重新创建一个简单的优化仓库问题,但是我运行 在 Spyder 的控制台上进入此错误:
runfile('/Users/.../Spyder Tutorials and Examples /ch3_concrete_ex.py', wdir='/Users/.../Spyder Tutorials and Examples ')
runfile('/Users/.../Spyder Tutorials and Examples /ch3_concrete_ex.py', wdir='/Users/.../Spyder Tutorials and Examples ')
File "/Users/a.../Spyder Tutorials and Examples /ch3_concrete_ex.py", line 46
pyomo solve --solver=glpk ch3_concrete_ex.py
^
SyntaxError: invalid syntax
我的猜测是我需要在 Spyder 的环境中添加 Glpk 和 Pyomo?有人可以吗 提供一些指导?我不应该为此使用 Anaconda 吗?
下面是我的代码的副本:
from pyomo.environ import *
model=ConcreteModel(name="(WL)")
N=['Harlingen', 'Memphis']
M=['NYC','LA', "Chicago", 'Houston']
d={('Harlingen', 'NYC'):1956,\
('Harlingen', 'LA'):1606,\
('Harlingen', 'Chicago'): 1410,\
('Harlingen', 'Houston'):330,\
('Memphis', 'NYC'):1096,\
('Memphis', 'LA'):1792,\
('Memphis', 'Chicago'): 1410,\
('Memphis', 'Houston'): 330}
P=2
model.x = Var(N,M, bounds=(0,1))
model.y = Var(N, within=Binary)
def obj_rule(model):
return sum(d[n,m]*model.x[n,m] for n in N for m in M)
model.obj=Objective(rule=obj_rule)
def one_per_cust_rule (model,m):
return sum(model.x[n,m] for n in N)==1
model.one_per_cust_rule= Constraint(M,rule=one_per_cust_rule)
def warehouse_active_rule(model,n,m):
return model.x[n,m] <= model.y[n]
model.warehouse_active_rule= Constraint(N,M, rule=warehouse_active_rule)
def num_warehouses_rule(model):
return sum(model.y[n] for n in N) <=P
model.num_warehouses= Constraint(rule=num_warehouses_rule)
pyomo solve --solver=glpk ch3_concrete_ex.py
如有任何提示,我们将不胜感激!
您遇到问题是因为您试图在程序中执行终端命令。让我解释一下……有几种方法可以调用 pyomo 来求解模型。如果安装正确,Pyomo 有一个命令行界面,您可以使用命令 pyomo
调用该界面。所以这个命令:
pyomo solve --solver=glpk ch3_concrete_ex.py
是您在终端提示符下写的东西,不是在您的程序中。
我发现调用程序语法中的所有求解器内容要容易得多,而只是 运行 文件就像任何其他 python 程序一样。用以下语法替换上面的行:
solver = SolverFactory('glpk')
solution = solver.solve(model)
display(model)
然后 运行 您的程序与任何其他 python 程序一样来自 spyder 或仅来自终端:
% : python ch_3_concrete_ex.py
我刚刚做了 works/solves 很好。
不过令我惊讶的是 glpk 是 conda-installable。我记得安装它并且在 mac 上是一个很大的痛苦。他们一定已经清理了安装过程。如果您正在学习学术课程并将进行大量优化,那么 Gurobi 很棒并且拥有 free/cheap 许可证。