我有一个想要求解的线性整数程序。我安装了求解器 glpk (感谢这个答案)和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
, and c
价值观。我想分配不同的值a
, b
, and c
,求解模型,得到解model.x[1]
and model.x[2]
,并有一个列表a
, b
, c
, model.x[1]
and model.x[2]
。我读文档但示例仅将解决方案写入文件,例如results.yaml
.
有什么方法可以从代码中访问解决方案值吗?
Thanks,
以下是脚本的修改版本,说明了打印变量值的两种不同方式:(1) 通过显式引用每个变量;(2) 通过迭代模型中的所有变量。
# Pyomo v4.4.1
# Python 2.7
from pyomo.environ import *
from pyomo.opt import SolverFactory
a = 370
b = 420
c = 4
model = ConcreteModel()
model.x = Var([1,2], domain=Binary)
model.y = Var([1,2], domain=Binary)
model.Objective = Objective(expr = a * model.x[1] + b * model.x[2] + (a-b)*model.y[1] + (a+b)*model.y[2], sense=maximize)
model.Constraint1 = Constraint(expr = model.x[1] + model.x[2] + model.y[1] + model.y[2] <= c)
opt = SolverFactory('glpk')
results = opt.solve(model)
#
# Print values for each variable explicitly
#
print("Print values for each variable explicitly")
for i in model.x:
print str(model.x[i]), model.x[i].value
for i in model.y:
print str(model.y[i]), model.y[i].value
print("")
#
# Print values for all variables
#
print("Print values for all variables")
for v in model.component_data_objects(Var):
print str(v), v.value
这是生成的输出:
Print values for each variable explicitly
x[1] 1.0
x[2] 1.0
y[1] 0.0
y[2] 1.0
Print values for all variables
x[1] 1.0
x[2] 1.0
y[1] 0.0
y[2] 1.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)