最优控制问题数值方法-直接法/打靶法 (2)

本文主要基于以下参考:

[1] John T. Betts. Survey of Numerical Methods for Trajectory Optimization.

[2] Anil V. Rao. A Survey of Numerical Methods For Optimal Control.

[3] John T. Betts. Practical Methods for Optimal Control and Estimation Using Nonlinear Programming 2nd.

[4] A E. Bryson. Applied Optimal Control.

[5] KIRK. Optimal Control Theory: An Introduction.

[6] Matthew Kelly. An Introduction to Trajectory Optimization: How to Do Your Own Direct Collocation.

更新

  • 更新了积分公式,不再使用ode45,而使用固定步长的rk4,代码来自于MatthewPeterKelly
  • 因此求解速度得到了大幅度的提高,也可以使用更多的离散点数目了

本节主要介绍对直接打靶法程序的后续改进,然后采用该程序对前面已经介绍的最优控制问题继续进行求解,并给出相应的求解结果,使读者对直接打靶法的求解效果有比较直观的感受。

第一部分

直接打靶法程序的改进

1. 控制量现在可以多于1个了;

2. 现在包括了路径约束

3. 现在插值方式可以选择interp1插值任意一种

4. 现在包括了所有已经实现的例子代码。

路径约束的实现

路径约束

本质上应该在整个时间区间内都满足,但是直接法由于是在离散点上对控制进行近似,因此很难实现在整个区间上满足路径约束,可以通过增加离散点的数目来对路径约束实现更好的满足。

因此,本实现仅要求离散点处的路径约束必须满足。

总结

1. 直接打靶法的求解速度仍然较慢,且依赖于选择的插值方式;

2. 直接打靶法在优化过程中需要通过差分求导数,而所使用函数ode45是基于自适应误差控制的积分器,因此会导致导数计算产生噪声,这部分内容在[3] 3.8节进行了解释;

3. 进一步在[3] 3.9.3节对各种微分方式进行了介绍;

4. 直接打靶法在没有路径约束,系统状态量较多,控制量较少,且控制量形式可提前知道的情况下求解速度还是比较快的。


第二部分

例子1

最优控制问题:

边界条件:

其中 [公式] 为重力参数, [公式] 为推力模值, [公式] 为初始的质量, [公式] 为燃料消耗速率,这些参数给定如下:

以下求解过程中,网格点数目均选择为10个。

1.1 控制量插值方式选择为linear

状态量-插值linear
控制量-插值linear

1.2 控制量插值方式选择为spline

状态量-插值spline
控制量-插值spline

例子2 (含有路径约束的问题)

最优控制问题(Bryson’s maximum range problem):

满足路径约束:

边界约束

其中 [公式] 

2.1 控制量插值方式选择为linear

状态量-插值linear
控制量-插值linear

2.2 控制量插值方式选择为spline

状态量-插值spline
控制量-插值spline

2.3 控制量插值方式选择为makima

状态-插值makima
控制-插值makima

例子3

重新对问题进行表达,一般性的问题:

满足约束:

下面在给定具体数值的基础上对其进行计算,考虑某种特殊情况:

其中, [公式] 为船本身速度, [公式] ,进一步给出 [公式]  [公式] 

3.1 控制量插值方式选择为linear

状态(x vs y)-插值linear
控制量-插值linear

3.2 控制量插值方式选择为spline

状态(x vs y)-插值spline
控制量-插值spline

例子4

重新对上述问题进行整理叙述:

满足约束:

其中,

4.1 控制量插值方式选择为linear

状态(x vs y)-插值linear
控制量-插值linear

4.2 控制量插值方式选择为spline

状态(x vs y)-插值spline
控制量-插值spline