本文主要基于以下参考:

[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.

现实中的最优控制问题通常包括有路径约束,这类问题的最优解通常由约束段与无约束段共同组成,采用变分法(间接法)来进行求解,需要对最优解的结构进行猜测,而这些信息难以直接获得,导致间接法难以应用在复杂最优控制问题中,因此目前对最优控制问题的求解大多采用数值法(直接法)。

本节开始会同时对直接法进行介绍,以便可以对更多的最优控制问题进行求解,直接法可以主要分为:直接打靶法,直接多重打靶法,直接配点法

本节首先对上述几种方法中最简单的直接打靶法进行介绍。考虑你正在控制加农炮来击中目标,你可以控制量包括有炮口角度和发射强度,约束条件是击中目标,你实现该过程的步骤就是不断尝试各种角度和发射强度,直到命中目标,而打靶法的工作过程与此类似。

打靶法

理论部分

在本节中,考虑的最优控制问题初始状态以及初始时间都是给定的,终端状态满足约束条件。此外,为了实现直接打靶法,需要将系统从初始状态根据控制量积分获得终端状态,然后看是否满足终端约束,从而不断调整优化变量得到最优解。

在直接打靶法中,连续控制量 [公式] 采用如下的形式来进行近似:

其中, [公式] 为网格点处的控制量, [公式] 为选择的基函数,根据基函数的选择不同, [公式] 可能为分段常值函数,分段线性函数等等。

因此,直接打靶法的优化变量如下:

然而在本文的实现过程中,没有显式将终端状态作为一个变量,而是通过对系统积分获得终端状态,因此优化变量中没有包括终端状态,实际的优化变量如下:

其中,控制量由 [公式] 个网格值来表示, [公式] 表示终端状态, [公式] 表示终端时间。

通过上述控制变量的值以及所选择的基函数可以得到任意时间的控制量,从而可以将系统:

从时间 [公式] 积分到 [公式] 以得到终端状态 [公式] ,终端状态需要满足约束:

可能还包括的约束有路径约束比如说:

并使得下式最小:

算法步骤

打靶法算法

输入: Initial Guess of Control Parameters and Final Time

输出: Optimal Values of Parameters and Optimal Trajectory

while Cost is Not at a Minimum and Constraints Not Satisfied do

Integrate Trajectory from t0 to tf ;

Compute Error in Terminal Conditions;

Update Control Parameters;

end

算法实现

直接打靶法的实现思路主要按照如下步骤进行:

1. 构造优化变量初始猜测;构造优化变量上下界;

2. 编写优化指标函数根据优化变量计算式(7);

3. 编写约束函数根据优化变量计算约束式(5)以及/或者式(6);

4. 根据优化结果输出最优控制量,最优轨迹;

数值仿真

例子1:

来自于第一节求解的问题,在此重新计算:

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

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

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

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

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

例子2:

最优控制问题:

边界条件满足:

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

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

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

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

例子3:

最优控制问题:

边界条件满足:

其中, [公式] 

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

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

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

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

存在的问题

1. 优化速度慢

由于该优化过程中,需要计算目标函数梯度以及约束函数的雅可比矩阵,这些计算过程用数值差分方法来进行,但是对目标函数和约束函数的计算都需要对轨迹从 [公式]  [公式] 积分,因此数值差分过程中需要不断进行重复积分,这导致优化速度较慢,在测试部分中最大只取了 [公式] ;

2. 控制量基函数选择影响

由上述优化结果可以看出,控制量基函数的选择会影响收敛速率,且本节中求解的最优控制问题中控制量的变化大部分本身就是直线或者变化速率不大,因而可以收敛,对于复杂问题的求解还需要进一步验证。

关于这部分内容的代码上传在下面的页面: