如何在Pyomo中访问目标函数值?

4

我想要从我的Pyomo模型中输出目标值。我已经能够访问变量的值,但我无法获取目标函数的值。我的代码如下:

   instance = model.create_instance(data)

opt = SolverFactory('cplex')
results = opt.solve(instance)
instance.solutions.store_to(results)
results.write()
# instance.display()

# output the solution
var_val = []
for v in instance.component_data_objects(Var):
    var_val.append(int(v.value))

obj_val = value(instance.obj)

最后一行提供了错误信息:

    obj_val = value(instance.obj)
NameError: name 'value' is not defined

但我可以清楚地看到 result.write() 的价值:

 Message: None
  Objective:
    obj:
      Value: 104728.80233047833
  Variable:
    x[0,1]:
      Value: 1569
    x[1,0]:
      Value: 1569
    x[1,1]:
      Value: 206
    x[2,2]:
      Value: 230
    x[2,3]:
      Value: 213
    x[3,2]:
      Value: 213
1个回答

2
你是如何导入Pyomo的?如果你使用from pyomo.environ import *,那么value函数将会被包含在内。如果你逐个导入所需的内容,那么你只需要确保导入value函数:from pyomo.environ import value

非常感谢!我忘记从'pyomo.environ'导入'value',因为我试图将整个模型文件作为用户定义的函数,需要明确声明所有导入的项。顺便说一下,如果我想在函数文件中从pyomo.environ导入所有内容,而我显然不能使用*,除了明确导入我正在使用的所有内容之外,还有其他导入方式吗? - StillLearning
你可以这样做:import pyomo.environ as pe,然后在使用pyomo.environ中的所有内容之前添加pe.,例如pe.Constraintpe.value - Bethany Nicholson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接