MPC算法

MPC算法 MPC最优化控制和基本概念研究动机(Motivation)在约束条件下达到最优的系统表现。单输入单输出模型代价函数Cost Function前一项q越小说明误差越小效果越好。后一项越小说明控制输入量越小系统能耗也越小最终要确定调节参数qr的值使得代价函数 J 最小。q和r更像一种权重。多输入多输出模型上述图片公式中公式解释x这是描述系统内部“状态”的一组核心变量比如位置、速度、温度、压力等。x是一个向量。u控制输入。这是我们可以操纵的变量比如电机的电压、阀门的开度、推力的大小。u也是一个向量。A矩阵系统矩阵。它描述了系统状态 x自身如何随时间演化内部动态。B矩阵输入矩阵。它描述了控制输入 u如何影响系统状态 x的变化率。物理意义这个方程告诉我们系统状态的变化率dx/dt由两部分组成一部分是系统当前状态Ax决定的“惯性”另一部分是我们的控制输入Bu产生的“外力”。y系统输出。这是我们实际能测量或关心的量通常由状态变量线性组合而成。它可能等于全部状态也可能只是其中一部分。C矩阵输出矩阵。它将系统的内部状态 x映射为我们能观测到的输出 y。MPC模型预测的步骤通过模型来预测系统在某一未来时间段的表现来进行优化控制常用离散型状态空间表达式MPC的三个步骤常用的优化策略二次规划(QP问题)的一般形式二次规划的求解器现在有比较成熟的库/包matlab和python等我们做的主要是将我们的模型建立并且转换成二次规划的一般形式然后用库函数求解。MPC代价函数推导对于一个系统的状态方程MPC示例代码(matlab实现)MPC_Matrices.mfunction[E,H]MPC_Matrices(A,B,Q,R,F,N)nsize(A,1);psize(B,2);M[eye(n);zeros(N*n,n)];Czeros((N1)*n,N*p);tmpeye(n);fori1:N rowsi*n(1:n);C(rows,:)[tmp*B,C(rows-n,1:end-p)];tmpA*tmp;M(rows,:)tmp;endQ_barkron(eye(N),Q);Q_barblkdiag(Q_bar,F);R_barkron(eye(N),R);GM*Q_bar*M;% G: n x nEM*Q_bar*C;% E: n x NPHC*Q_bar*CR_bar;% H: NP x NP%H (H H) / 2;endPrediction.mfunctionu_kPrediction(x_k,E,H,N,p)U_kzeros(N*p,1);% Solve the quadratic programming problemU_kquadprog(2*H,2*E*x_k);% Extract the control action for the first stepu_kU_k(1:p,1);% 取第一个结果endMPC_Test.mfunctionu_kPrediction(x_k,E,H,N,p)U_kzeros(N*p,1);U_kquadprog(2*H,2*E*x_k);u_kU_k(1:p,1);% 取第一个结果end