gpt4 book ai didi

python - Pyomo:从 Python 代码访问解决方案

转载 作者:太空狗 更新时间:2023-10-30 01:43:25 27 4
gpt4 key购买 nike

我有一个要求解的线性整数程序。我安装了求解器 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 的解决方案。

我有许多问题想使用相同的模型解决,但使用不同的 abc 值。我想给a,b,c赋不同的值,求解模型,得到model.x[1的解]model.x[2],并有 abc 的列表>、model.x[1]model.x[2]。我读了documentation但示例仅将解决方案写入文件,例如 results.yaml

有什么方法可以从代码中获取解决方案的值吗?

谢谢,

最佳答案

这是您的脚本的修改版本,说明了打印变量值的两种不同方式:(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

关于python - Pyomo:从 Python 代码访问解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38700214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com