AMPLPY求解模型后如何更新指定参数以提升效率(无需重载整个模型)?
AMPLPY求解模型后如何更新指定参数以提升效率(无需重载整个模型)?
嘿,我刚好碰到过类似的问题!你遇到的这个报错是因为set_data默认会尝试创建新的集合/参数,而BOUNDBUS在初始化阶段已经被定义过了,所以才会抛出“set BOUNDBUS already defined”的错误。
要实现只更新BOUNDBUS对应的数据而不重载整个模型,只需要在调用set_data时加上replace=True参数即可。这个参数会告诉AMPLPY不要重新定义集合,而是直接覆盖更新已有的数据。
修改后的代码行应该是这样的:
solver.set_data( data=pd.DataFrame(self.params_dict['boundbus'], index=list(range(1, len(self.params_dict['boundbus']['boundbus_idx']) + 1))), set_name='BOUNDBUS', replace=True )
另外,你代码里设置的warm_start_init_point = yes非常关键——配合参数更新的操作,这个暖启动选项可以让求解器复用之前的解作为初始点,进一步提升计算效率,完全符合你想要优化性能的需求。
还有个小提示:如果BOUNDBUS对应的是单个参数而不是整个集合数据,你也可以直接获取参数对象来更新值,比如:
# 假设BOUNDBUS对应的参数名为boundbus_param solver.getParameter('boundbus_param').setValues(pd.Series(your_new_values, index=your_index))
不过对你的场景来说,带replace=True的set_data是最直接适配现有代码的方案。
备注:内容来源于stack exchange,提问作者Jeff Ju
相关产品推荐
相关产品推荐

