TCLab多控制仿真下调整MPC参数实现指定MV输出更多动作的问题
针对你的场景可按以下优先级调整参数:
- 优先修正模型方程错误
你当前的两个温度微分方程存在逻辑问题,双输入单输出场景下两个加热器的作用应该叠加到同一个温度对象上,合并为一个方程即可:
m.Equation(tau1 * TC1.dt() + (TC1 - TC1_ss) == Kp1*(Q1d-Q1_ss) + Kp2*(Q2d-Q2_ss))
原写法给TC1的变化率增加了两个独立约束,直接限制了MV的可行输出范围,这是调COST无效的核心原因。
- 调整MV的变化惩罚DCOST
如果希望指定MV更频繁动作,降低该MV的DCOST值,同时升高另一个MV的DCOST值即可。比如希望Q2优先动作,可以设置:
Q1.DCOST = 10 # 升高Q1变化惩罚,减少Q1动作 Q2.DCOST = 0.1 # 降低Q2变化惩罚,允许Q2频繁调整
DCOST是控制器对MV单次变化的惩罚项,比静态COST对动作频率的影响更直接。
- 升高CV跟踪误差的惩罚权重
你当前使用带死区的目标函数(CV_TYPE=3),可升高WSPHI、WSPLO的值,让跟踪误差的惩罚远大于MV动作的惩罚,控制器会更愿意输出调整动作来缩小温度误差:
TC1.WSPHI = 100 TC1.WSPLO = 100
- 放宽MV的动作幅度限制
如果需要MV单次调整的幅度更大,可增大DMAX参数,比如允许Q1单次最多调整100%输出:
Q1.DMAX = 100.0
你当前只给Q1设置了DMAX=50,相当于限制了Q1每次最多变化50%的输出,可按需调整。
- 调整目标函数中MV的静态权重
如果希望指定MV的稳态输出值更高,可以给该MV设置负的COST值,控制器会主动提高该MV的输出来降低整体目标函数值:
Q2.COST = -0.3 # 控制器会优先提高Q2的输出
注意不要设置过大的负值,避免MV直接顶到上限饱和。
- 优化预测/控制时域长度
你当前预测时域为400秒,和系统时间常数160秒接近,可将预测时域延长到35倍时间常数(480800秒),给控制器足够的动作规划空间,避免短视导致的动作保守。
内容的提问来源于stack exchange,提问作者ys guo
相关产品推荐
相关产品推荐

