优化|高性能模块预测控制求解器

本文介绍的是另外一种针对模块控制MPC问题的一种高效求解方法。High-Performance Small-Scale Solvers for Linear Model Predictive Control,Gianluca Frison, Hans Henrik Brandenborg Sørensen, Bernd Dammann, John Bagterp Jørgensen [1]。本文讲了HPIPM的前身,HPMPC, 其实也就是HPIPM中牺牲鲁棒性的高速求解选项。核心是采用了动态规划法推导出riccati方程的形式,不过迭代速度比riccati更快。

首先有两个相似的工作,一个是CVXGEN[2]。核心思路是“. It employs a predictor-corrector Interior-Point (IP) method, and a sparse LDL factorization for the solution of the KKT system at each iteration of the IP method”,核心是采用LDL分解处理kkt矩阵。另一个方案是FORCES[3], 核心思路是:“It employs a predictor-corrector IP method, and a tailored solver for the KKT system, based on a block Cholesky factorization of the Schur complement of the KKT matrix.”处理kkt矩阵的思路稍有不同,采用了schur补kkt, 然后cholesky分解。这个思路其实在fast MPC里面也存在[4]。

这两者对比时,前面CVXGEN的问题在于:“The main disadvantages are that instruction cache is not exploited (since each instruction is executed only once), and that the code size grows with the cube of the matrices size, becoming quickly intractable.”问题维度上去就不行了。后者FROCES: “The main advantage of this approach is that the performance scales much better with the problem size. The main disadvantage is that a triple-loop based approach can attain only a small fraction of the peak performance of the processor.” 就还不错。

而本文中的原文描述是:

“The proposed algorithm for the solution of the KKT system of MPC problems is similar to the one presented in [5], with the difference that it moves the integration process one step further: the factorization and the backward recursion of the solution are fused. This allows us to reduce the number of function calls to linear-algebra routines to 3 in the factorization and 3 in the solution, for each iteration of the Riccati-like recursion.”

文章[5]也是一个反向riccati的方法。对比[5]来说,本文的核心优势就是将factorization和backward recursion结合在一起,后面可以看到,推导的结果类似riccati, 但没有显式算Riccati的P。然后这里也说了在他的Riccati-like recursion,能推出Riccati的结果,但是过程有点不一样。

线性MPC问题:

本文中想要解决的是经典的线性MPC问题:

其中 n ∈ { 0 , 1 , … , N − 1 } n \in \{0,1,\dots,N-1\} n{0,1,,N1}。求解MPC问题的核心思路还是动态规划,利用动态规划的思路去做推导。

在n+1步的最优stage cost为:

状态转移方程:

把状态转移方程(2)放进(1):

如果 P n + 1 \mathcal{P}_{n+1} Pn+1是个正定矩阵,那我们可以对其进行Cholesky分解,

最优的stage cost V n + 1 ∗ ( x n , u n ) V_{n+1}^*(x_n,u_n) Vn+1(xn,un)重写为:

根据动态规划的思路,我们倒退回前一个stage cost V n ( x n , u n ) V_n(x_n,u_n) Vn(xn,un),可以通过bellman公式写成:

把二次型cost中间那一项单独列出来,定义成 M n \mathcal{M}_n Mn,再来做一次Cholesky分解:

有了(5)之后,stage cost V n ( x n , u n ) V_n(x_n,u_n) Vn(xn,un)可以重新表达成如下公式:

假设 x n x_n xn已知,那么对于上述stage cost V n ( x n , u n ) V_n(x_n,u_n) Vn(xn,un)求导可以得到最优控制表达:

带回 V n ( x n , u n ) V_n(x_n,u_n) Vn(xn,un)可以得到基于状态 x n x_n xn的最优value function V n ∗ ( x n ) V_n^*(x_n) Vn(xn):

接下来还要继续根据动态规划的思路迭代stage cost V n − 1 ( x n − 1 , u n − 1 ) V_{n-1}(x_{n-1},u_{n-1}) Vn1(xn1,un1)直到 t = 0 t=0 t=0,同时可以看到在 t = N − 1 t=N-1 t=N1这里的 V n ∗ ( x n ) V_n^*(x_n) Vn(xn)在下一次迭代 V n − 1 ( x n − 1 , u n − 1 ) V_{n-1}(x_{n-1},u_{n-1}) Vn1(xn1,un1)中就可以直接使用了,非常方便,整个算法流程伪代码为:

注意到riccati就是:

看得出和上面的u控制量的表达就是一回事。但是这里的做法我们没有显式算P,因为不需要,原文说了:“However, the procedure to compute u n u_n unas in (4) is more efficient from a computational point of view. Also notice that the recursion matrix Pn of the Riccati recursion is never computed explicitly in the above solution procedure.”这个(4)就是

总结来说,对于每一个内点法循环,通过合理的前向迭代,本文将一次KKT矩阵分解和计算拆解成对于MPC问题中单个horizon问题的矩阵分解和计算(从 T T T时刻一直倒退计算得到 u N − 1 , … , u 0 u_{N-1}, \dots, u_0 uN1,,u0)。

一般线性MPC问题的求解

可以看到,如果只有系统的线性等式约束,那么只需要解一次线性方程组就可得到最优解了,解释同经典的线性约束下的QP问题,当我们引入等式约束的对偶变量 λ \lambda λ,则根据QP问题的一阶最优条件,等价于求解如下线性系统:

现在考虑具有不等式约束的MPC问题(MPC问题的不等式约束一般是每一个horizon内部的约束):

那么我们需要使用内点法不断迭代,求解KKT系统

这其实就是和只有线性等式约束MPC问题的KKT系统具有同样的结构,那就可以利用上面的动态规划思路推导的结果去求解这个方程组啦。文章结尾给出了HPMPC算法的数值计算结果,单位都是ms级别:

参考文献

[1] G. Frison, H. H. B. Sørensen, B. Dammann and J. B. Jørgensen, “High-performance small-scale solvers for linear Model Predictive Control,” 2014 European Control Conference (ECC), Strasbourg, France, 2014, pp. 128-133, doi: 10.1109/ECC.2014.6862490.

[2] https://cvxgen.com/docs/index.html

[3] Zanelli, A., Domahidi, A., Jerez, J., & Morari, M. (2017). FORCES NLP: an efficient implementation of interior-point methods for multistage nonlinear nonconvex programs. International Journal of Control, 93(1), 13–29. https://doi.org/10.1080/00207179.2017.1316017

[4] Y. Wang and S. Boyd, “Fast Model Predictive Control Using Online Optimization,” in IEEE Transactions on Control Systems Technology, vol. 18, no. 2, pp. 267-278, March 2010, doi: 10.1109/TCST.2009.2017934.

[5] G. Frison and J. B. Jørgensen, “Efficient implementation of the Riccati recursion for solving linear-quadratic control problems,” 2013 IEEE International Conference on Control Applications (CCA), Hyderabad, India, 2013, pp. 1117-1122, doi: 10.1109/CCA.2013.6662901.

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 模型预测控制(Model Predictive Control,MPC)是一种先进的控制方法,常用于永磁同步电机(Permanent Magnet Synchronous Motor,PMSM)的控制中。通过预测模型的方式,MPC可以对电机的未来状态进行预测,并根据预测结果进行控制。在Matlab中,我们可以使用csdn(中国最大的技术社区之一)提供的相关工具和资源来实现永磁同步电机的模型预测控制。 首先,我们需要建立永磁同步电机的数学模型。常见的模型有dq轴模型和abc轴模型,根据实际需求选择合适的模型。然后,我们可以利用Matlab提供的工具进行电机模型的建模和仿真。 接下来,我们可以使用MPC方法对电机进行控制。MPC方法的核心是优化问题的求解,通过优化算法求解最优控制策略。Matlab提供了许多优化算法和工具箱,如fmincon函数、optimtool等,可以帮助我们实现MPC的控制策略。 在实际应用中,我们还需要考虑电机的各种约束条件,如电流限制、电压限制等。这些约束条件可以通过对优化问题的建模来进行约束,并在求解优化问题时进行考虑。 最后,我们可以使用Matlab进行模型预测控制的仿真和实验。通过对电机的状态进行预测,并根据预测结果进行控制,可以实现对永磁同步电机的精确控制。 综上所述,通过Matlab中的模型预测控制和csdn提供的相关资源,我们可以实现永磁同步电机的精确控制,提高电机的控制效果和性能。 ### 回答2: 模型预测控制 (Model Predictive Control,MPC) 是一种常用的控制方法,可以应用于永磁同步电机的控制中。在Matlab中,可以通过使用MATLAB自带的控制工具箱或其他第三方工具箱来进行模型预测控制的实现。 首先,需要建立永磁同步电机的数学模型。这个模型可以是基于电机的物理方程推导得到的,也可以通过系统辨识来获得。在Matlab中,可以利用Simulink建立电机模型,使用State-Space模块来描述电机的状态空间方程。 然后,需要将建立的数学模型转化为离散时间的状态空间模型。利用Matlab中的函数如c2d()进行连续时间到离散时间的转换。得到离散时间的状态空间模型后,可以利用Matlab中的MPC设计工具箱来进行控制的设计。 在MPC设计中,需要确定控制预测时域、控制时域以及优化目标。预测时域决定了系统未来的响应,控制时域决定了控制的输出时刻。优化目标可以是最小化输出偏差、最小化能耗或其他用户自定义的目标函数。 设计完成后,需要将设计好的MPC控制与永磁同步电机的模型进行仿真。在Matlab中,可以利用Simulink工具进行系统级仿真。通过调整控制参数和优化目标,可以对永磁同步电机的运行状况进行评估,包括速度、位置、电流等的跟踪性能。 最后,可以将设计好的MPC控制加载到实际的永磁同步电机控制硬件中进行实时控制。Matlab提供了多种方法用于代码生成与硬件连接,使得控制可以直接应用于实际永磁同步电机的控制中。 总之,利用Matlab中的模型预测控制工具箱,可以方便地实现永磁同步电机的控制。通过建立数学模型、设计MPC控制、仿真和实时硬件连接,可以实现对永磁同步电机的精确控制和运行调试。 ### 回答3: MATLAB是一种常用的科学计算软件,用于建立数学模型、进行数据分析和可视化等。模型预测控制(Model Predictive Control,MPC)是一种现代控制方法,适用于多变量、非线性、时变的控制系统。 永磁同步电机是一种高效、响应速度快的电机类型,常用于电动汽车、工业自动化和可再生能源领域。在建立永磁同步电机的控制模型时,可以利用MATLAB进行建模和仿真。 在CSDN平台上,有很多关于模型预测控制和永磁同步电机的相关文章和教程。这些文章介绍了如何在MATLAB中建立永磁同步电机的数学模型,以及如何利用模型预测控制方法进行电机的控制。 通过利用MATLAB,我们可以根据永磁同步电机的参数和特性,建立电机的状态空间模型或者传递函数模型。然后,我们可以通过设置电机的控制目标和约束条件,利用模型预测控制方法进行电机的控制。 在模型预测控制过程中,我们可以利用已有的电机模型进行仿真,以评估不同控制策略的性能。通过优化控制信号,我们可以实现更高的转速和扭矩响应,同时满足电机的约束条件。 总之,MATLAB和模型预测控制方法为永磁同步电机的控制问题提供了强有力的工具。通过CSDN上的文章和教程,我们可以学习并应用这些方法,以提升永磁同步电机的性能和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值