Pyomo / IPOPT:检索计算变量

时间:2018-08-03 20:57:29

标签: python pyomo ipopt

我想知道什么是Pyomo式的方法来检索解值(特别是仅用于求解器计算的变量)。

在我的情况下,变量“ x”由三组索引,因此其键为3元组,例如x [CC,N5R_0,ntg]。在求解之前,变量“ x”具有7626个元素。 求解器(IPOPT)报告说它正在解决1339个元素的问题:

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

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

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

是否有一种快速的编程方式来提取这1339个变量组件的值? (除了对IPOPT输出文件进行单独的后解析之外?)

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

谢谢

1 个答案:

答案 0 :(得分:1)

简短的答案是肯定的,每个Var组件都有一个stale标志,该标志指示变量的值是否在上次求解模型时更新。如果您在pprint上调用Var,则会看到一个“陈旧”列,其中包含变量中每个索引的值。您只能使用类似以下内容的非陈旧变量进行循环:

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