Gekko搭建ARX MPC崩溃后能否加载最后一次迭代结果复用
Gekko ARX MPC 状态保存与加载解决方案
Gekko原生支持保存计算状态,你可以通过以下两种方案实现重启后直接加载历史状态,跳过初始迭代阶段:
方案1:手动保存核心状态量
ARX MPC初始阶段控制效果差的核心原因是初始状态下缺少足够的输入输出历史数据来更新偏置值、填充ARX模型的滑动计算窗口,你可以手动持久化这部分核心数据:
- 每次MPC计算完成后,将ARX模型对应的输入
u的最近N步历史值、输出y的最近N步历史值(N为你设定的ARX模型阶数na/nb的最大值)、当前的偏置bias值,用numpy或者pickle存储到本地文件。示例存储代码:np.savez('mpc_state.npz', u_hist=latest_u_history, y_hist=latest_y_history, bias=current_bias) - 重启初始化MPC模型时,先读取本地存储的状态文件,将读取到的历史值直接赋值给ARX模型的输入输出历史缓存,同时将偏置初始值设置为读取到的
bias值,不需要从零开始更新偏置。
方案2:使用Gekko自带的状态保存接口
Gekko提供了内置的全状态保存加载功能,可以直接保存所有模型变量、求解器状态、ARX内部缓存:
- 每次MPC求解完成后,设置参数
m.options.SAVE = 1,Gekko会自动将当前所有模型状态保存到工作目录下的dbs文件中 - 重启初始化模型时,在第一次求解前设置参数
m.options.LOAD = 1,Gekko会自动读取上次保存的状态文件,直接恢复到上次求解结束的所有配置,不需要重新走初始迭代调整流程
注意事项
- 加载状态前需要保证当前初始化的MPC模型结构与保存状态时的模型完全一致,包括ARX阶数、输入输出数量、约束条件、预测时域/控制时域等参数,否则会出现加载错误
- 建议每运行5-10次迭代就更新一次保存的状态文件,避免使用太久远的状态导致偏置与当前被控对象特性不匹配
内容的提问来源于stack exchange,提问作者MikkelB
相关产品推荐
相关产品推荐

