GEKKO MPC实时测量求解疑问及代码咨询
实时MPC实现相关疑问解答
问题1:预测时域与变量初始化
不需要缩短预测时域。MPC的核心是滚动优化:每次新测量到来时,用当前真实测量值更新优化问题的初始状态,保持原预测时域长度重新求解,只执行求解得到的第一个控制动作,剩余预测序列直接丢弃。
MV和CV无需每次重新初始化,而是基于更新后的初始状态,在固定长度的预测时域上重新生成变量序列。缩短时域会丢失长期约束的优化能力,反而导致控制性能下降。
问题2:下一步执行输入/状态值的收集
两种写法的正确性取决于你的MPC框架变量定义:
- 若
n_fans.NEWVAL这类属性代表本轮优化后得到的第一个待执行控制量(即当前步要输出的MV值),写法一是正确的——这完全符合实时MPC"只执行每轮优化的第一个控制动作"的逻辑。 - 若
n_fans[step]是预测时域内第step步的MV预测值,写法二仅在step=0(当前步)时有效,但后续步骤不应采用这种方式,因为每轮优化后只取第一个控制量执行,下一轮会基于新测量重新求解完整的预测序列。
工程实践中,写法一更贴合实时MPC的执行流程。
问题3:新预测状态的写法
如果topoil.VALUE[step]是MPC模型输出的第step步状态预测值,这个写法本身是正确的,但要注意使用场景:
- 若你是在记录每轮优化的预测状态序列,这么写没问题;
- 若你是用这个值来更新下一轮优化的初始状态,就错了——下一轮的初始状态必须用真实的实时测量值,而非模型的预测值,否则会引入模型误差累积,导致控制偏移。
内容的提问来源于stack exchange,提问作者info2metlab
相关产品推荐
相关产品推荐

