当前位置: 首页 > 面试题库 >

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

欧阳声
2023-03-14
问题内容

我有一个线性整数程序要解决。我安装了求解器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,和c值却不同。我想分配到不同的值abc,解决了模型,得到的解决方案model.x[1]model.x[2],并有一上市abcmodel.x[1]model.x[2]。我阅读了文档,但示例仅将解决方案写入文件,例如results.yaml

有什么方法可以从代码访问解决方案值?

谢谢,


问题答案:

我不确定这是否是您要查找的内容,但这是在某些脚本中打印一些变量的一种方式。

from pyomo.environ import *
from pyomo.opt import SolverFactory
from pyomo.core import Var

M = AbstractModel()
opt = SolverFactory('glpk')

# Vars, Params, Objective, Constraints....

instance = M.create_instance('input.dat') # reading in a datafile
results = opt.solve(instance, tee=True)
results.write()
instance.solutions.load_from(results)

for v in instance.component_objects(Var, active=True):
    print ("Variable",v)
    varobject = getattr(instance, str(v))
    for index in varobject:
        print ("   ",index, varobject[index].value)


 类似资料: