我想知道什么是Pyomo式的方法来检索解值(特别是仅用于求解器计算的变量)。
在我的情况下,变量“ x”由三组索引,因此其键为3元组,例如x [CC,N5R_0,ntg]。在求解之前,变量“ x”具有7626个元素。 求解器(IPOPT)报告说它正在解决1339个元素的问题:
Total number of variables............................: 1339
求解后,instance.x组件仍然具有7626个元素。 但是,在查看结果时,我只想提取1339个计算变量的值。
我尝试仅获取非零值,但是如果初始值不全为零,那将不起作用。
是否有一种快速的编程方式来提取这1339个变量组件的值? (除了对IPOPT输出文件进行单独的后解析之外?)
例如,此信息是否以某种方式嵌入到.solve()之后的模型实例对象中?
谢谢
答案 0 :(得分:1)
简短的答案是肯定的,每个Var
组件都有一个stale
标志,该标志指示变量的值是否在上次求解模型时更新。如果您在pprint
上调用Var
,则会看到一个“陈旧”列,其中包含变量中每个索引的值。您只能使用类似以下内容的非陈旧变量进行循环:
for v in m.component_data_objects(Var):
if v.stale:
continue
print(str(v), ' = ', value(v))