首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Anaconda GUI上使用Pyomo、GLPK和Spyder --这可能吗?如果是的话,为什么这对我不起作用?

在Anaconda GUI上使用Pyomo、GLPK和Spyder --这可能吗?如果是的话,为什么这对我不起作用?
EN

Stack Overflow用户
提问于 2020-08-13 17:47:33
回答 1查看 523关注 0票数 0

我对编程和优化的世界非常陌生。我想知道是否可以使用Pyomo和Glpk解决程序在Spyder上使用Anaconda?

这就是我如何使用MacBook上的终端窗口下载Pyomo和Glpk的:conda安装-c conda- conda安装-c conda-forge glpk

我想使用Spyder重新创建一个简单的优化仓库问题,但是我在Spyder上的控制台上遇到了这个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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来做这个吗?

下面的是我的代码的一个副本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 

任何提示都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-13 20:16:45

您遇到了问题,因为您试图在程序中执行终端命令。让我解释一下..。有几种方法可以调用pyomo来求解模型。如果安装得当,Pyomo有一个命令行接口,您可以使用命令pyomo调用该接口。所以这个命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pyomo solve --solver=glpk ch3_concrete_ex.py 

是你会从终端提示符写的东西,而不是在你的程序里面。

我发现调用程序语法中的所有解决程序内容并像任何其他python程序一样运行文件要容易得多。用以下语法替换上面的行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
solver = SolverFactory('glpk')
solution = solver.solve(model)
display(model)

然后像任何其他python程序一样从spyder内部或仅从终端运行您的程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% : python ch_3_concrete_ex.py

我刚做了,效果/解决得很好。

然而,我感到惊讶的是,glpk是conda可安装的。我记得我安装它,这是一个巨大的痛苦的mac。他们一定是清理了安装过程。如果你是在一个学术项目,并将做很多优化,Gurobi是伟大的,并有一个免费/便宜的许可证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63405393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文