参数受限MPC与Matlab/Simulink/C++实现

写在前面

预测时域长度Np应包含对象的主要动态部分,越小越快速,不稳定,越大,实时性降低,响应越慢。

控制时域长度Nc越小越慢,鲁棒性越好,越大机动性越强,稳定性降低。

控制量变化权重rw越小闭环响应越快,越大说明控制量变化在优化函数占权重越大。


目录

1.建模

2.离散化

3.建立增广矩阵

4.预测

5.优化

5.1 定义二次型优化函数

5.2 变量含约束

5.3 优化求解

6.滚动

7.Matlab仿真

7.1仿真结果

7.1.1 仅改变Np

7.1.2 仅改变rw

7.1.3 仅改变Nc

8.Simulink仿真

8.1 仿真模型.slx文件

8.2 仿真结果

9.附不含约束和含约束的结果

10.C++实现


1.建模

控制对象为二阶惯性时滞系统,传递函数为

参数受限MPC与Matlab/Simulink/C++实现

2.离散化

采样时间间隔Δt=0.06,使用近似离散化得离散化状态空间模型

参数受限MPC与Matlab/Simulink/C++实现

参数受限MPC与Matlab/Simulink/C++实现

 

3.建立增广矩阵

参数受限MPC与Matlab/Simulink/C++实现

4.预测

预测时域长度为Np,控制时域长度为Nc

参数受限MPC与Matlab/Simulink/C++实现

参数受限MPC与Matlab/Simulink/C++实现

5.优化

5.1 定义二次型优化函数

定义设定值和预测输出之间的误差函数J(cost function)为

参数受限MPC与Matlab/Simulink/C++实现

5.2 变量含约束

参数受限MPC与Matlab/Simulink/C++实现

参数受限MPC与Matlab/Simulink/C++实现

5.3 优化求解

求解方法是使用Hildreth’s QP程序(约束梯度最小化算法,OPhild.m)。

参数受限MPC与Matlab/Simulink/C++实现

6.滚动

参数受限MPC与Matlab/Simulink/C++实现

参数受限MPC与Matlab/Simulink/C++实现

 

7.Matlab仿真

7.1仿真结果

采样时间Δt=0.06s,预测时域长度Np=100,控制时域长度为Nc=7,控制量变化权重rw=0.001,参考信号r=0.1。

参数受限MPC与Matlab/Simulink/C++实现

7.1.1 仅改变Np

Np=50,越小越快速,不稳定

参数受限MPC与Matlab/Simulink/C++实现

7.1.2 仅改变rw

rw=0.1,控制量变化减小了,但是稳定性降低了

参数受限MPC与Matlab/Simulink/C++实现

7.1.3 仅改变Nc

Nc=50,越大机动性越强,稳定性降低

8.Simulink仿真

8.1 仿真模型.slx文件

参数受限MPC与Matlab/Simulink/C++实现

8.2 仿真结果

参数受限MPC与Matlab/Simulink/C++实现

参数受限MPC与Matlab/Simulink/C++实现

9.附不含约束和含约束的结果

控制变量不含约束时

参数受限MPC与Matlab/Simulink/C++实现

 

控制变量含约束时

参数受限MPC与Matlab/Simulink/C++实现

 还有一个Np=70,Nc=2的结果

参数受限MPC与Matlab/Simulink/C++实现

10.C++实现

函数都写完了,和simulink联合通信,bug出现在Xf的最后一行并不是y...这个bug暂时不知道咋调,明天再说吧。