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

Posted

技术标签:

【中文标题】如何在pyomo中访问目标函数值?【英文标题】:How to access objective function value in pyomo? 【发布时间】:2020-07-01 01:05:10 【问题描述】:

我正在尝试从我的 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】:

你是如何导入 Pyomo 的?如果您使用from pyomo.environ import *,则将包含价值函数。如果您要单独导入您正在使用的每个东西,那么您只需要确保导入 value 函数:from pyomo.environ import value

【讨论】:

非常感谢!我忘记从“pyomo.environ”导入“值”,因为我试图使整个模型文件成为用户定义的函数,需要显式声明所有导入的项目。顺便说一句,如果我想从 pyomo.environ 导入函数文件中的所有内容,显然我不能使用*,除了显式导入我正在使用的所有内容之外,还有其他导入方式吗? 您可以执行以下操作:import pyomo.environ as pe,然后将 pe. 预先附加到您从 pyomo.environ 使用的所有内容中,即 pe.Constraintpe.value

以上是关于如何在pyomo中访问目标函数值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pyomo 中编写分段线性目标函数

如何在 Pyomo 中声明目标函数和约束(抽象模型)

多目标优化示例 Pyomo

如何在 Windows 机器上本地安装 CBC for Pyomo?

如何在类中使用 Pyomo 装饰器

如何在 Google Colab 中使用 Pyomo 解决抽象模型