【发布时间】:2016-12-06 14:44:59
【问题描述】:
我有一个想要求解的线性整数程序。我安装了求解器 glpk(感谢this answer)和 pyomo。我写了这样的代码:
from pyomo.environ import *
from pyomo.opt import SolverFactory
a = 370
b = 420
c = 2
model = ConcreteModel()
model.x = Var([1,2], domain=NonNegativeIntegers)
model.Objective = Objective(expr = a * model.x[1] + b * model.x[2], sense=minimize)
model.Constraint1 = Constraint(expr = model.x[1] + model.x[2] == c)
# ... more constraints
opt = SolverFactory('glpk')
results = opt.solve(model)
这会生成文件results.yaml 的解决方案。
我有很多问题想使用相同的模型解决,但使用不同的a、b 和c 值。我想为a、b和c分配不同的值,求解模型,获得model.x[1]和model.x[2]的解,并列出a、b、@987654337 @、model.x[1] 和 model.x[2]。我阅读了documentation,但示例仅将解决方案写入文件,例如results.yaml。
有什么方法可以从代码中获取解决方案值?
谢谢,
【问题讨论】:
-
暂时不要使用这个库。你不能只访问model.x.value吗?还有model.Objective.value。
-
@sascha,谢谢。我试过
for i in model.x: print(model.x[i].value),它成功了。 -
@sascha,如果你能告诉我为什么我不应该使用这个库,那就太好了。你的意思是WinGLPK,对吧?
-
我不建议不要使用它。我讨厌这个界面,但是 pyomo 超级强大。没有太多的选择。 [cvxpy](www.cvxpy.org),如果你坚持凸编程(它通过内部推理构建可证明的凸程序是有代价的;它也更基于矩阵/数学运算;它支持许多不错的函数像规范一样的盒子)。还有pulp。我认为这个只做 MIP。它比 pyomo 更基于数组但更容易。 @ken_a
-
好的,谢谢。我尝试了其他人,但在很多情况下我什至无法安装它们。 Pyomo/WinGLPK 是迄今为止我唯一可以安装并完成工作的库。现在,我坚持下去。
标签: python optimization mathematical-optimization linear-programming pyomo