Pyomo/IPOPT: 检索计算变量

Pyomo/IPOPT: retrieving computed variables

我想知道检索解决方案值的 Pyomo-ish 方法是什么(特别是仅针对求解器计算的变量)。

在我的例子中,变量 'x' 由三个集合索引,因此它的键是三元组,例如x[CC,N5R_0,ntg]。求解前,变量'x'有7626个元素。 求解器 (IPOPT) 报告它正在求解一个包含 1339 个元素的问题:

Total number of variables............................:     1339

求解后,instance.x分量仍有7626个元素。 但是在查看结果时,我只想提取 1339 个计算变量的值。

我尝试只获取非零值,但如果初始值不全为零,那将不起作用。

是否有一种快速的程序化方法来提取这 1339 个变量分量的值? (除了单独的 post-解析 IPOPT 输出文件?)

例如,此信息是否以某种方式嵌入到 .solve() 之后的模型实例对象中?

谢谢

简短的回答是肯定的,每个 Var 组件都有一个 stale 标志,指示变量的值是否在上次求解模型时更新。如果您在 Var 上调用 pprint,您将看到一个 'Stale' 列,变量中的每个索引都具有此值。您可以使用类似以下内容的方式仅遍历非陈旧变量:

for v in m.component_data_objects(Var):
    if v.stale:
        continue
    print(str(v), ' = ', value(v))