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))
我想知道检索解决方案值的 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))