我想知道检索解决方案值的Pyomo式方法是什么(特别是只针对求解器计算的变量)。
在我的例子中,变量'x‘被三个集合索引,因此它的键是3元组,例如xCC,N5R_0,ntg。在求解之前,变量'x‘有7626个元素。求解器(IPOPT)报告它正在解决包含1339个元素的问题:
Total number of variables............................: 1339求解后,instance.x组件仍有7626个元素。但在查看结果时,我只想提取1339个计算变量的值。
我尝试只获取非零值,但如果初始值不全为零,则不起作用。
有没有一种快速和编程的方法来提取这1339个变量组件的值?(除了对IPOPT输出文件进行单独的后期解析?)
例如,此信息是否以某种方式嵌入到.solve()之后的模型实例对象中?
谢谢
发布于 2018-08-04 05:22:05
简而言之,答案是肯定的,每个Var组件都有一个stale标志,该标志指示在上次求解模型时是否更新了变量的值。如果你在一个Var上调用pprint,你会看到一个'Stale‘列,变量中的每个索引都有这个值。您可以使用以下命令仅遍历非陈旧的变量:
for v in m.component_data_objects(Var):
if v.stale:
continue
print(str(v), ' = ', value(v))https://stackoverflow.com/questions/51680010
复制相似问题