1

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

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

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

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

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

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

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

谢谢

4

1 回答 1

1

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

for v in m.component_data_objects(Var):
    if v.stale:
        continue
    print(str(v), ' = ', value(v))
于 2018-08-03T21:22:04.670 回答