本文主要基于以下参考:

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

理论部分

本部分涉及到的内容为[4]中的3.6节部分,考虑最优控制问题:

前面介绍的最优控制问题动态方程右端函数由 f 定义且整个过程中不发生变化,本节所要介绍的最优控制问题考虑右端函数变化的情况,典型的例子比如运载火箭一级分离后,动力学方程发生变化等等。

设在时间 t<t1 内:

其中 t1 由下式确定:

在时间 t>t1 内:

其中,式(3)与上节类似,本质上是一个内点约束,因此上节推导得到的必要条件在经过修改后仍然适用:

其中,

代码实现

下面对不连续水流问题进行介绍,上节介绍了水流速度建模为:

并对具体的水流形式

进行了求解,本节考虑下面这种水流问题:

即水流以 h 为分界线,两边的速度不同,这就导致了右端函数 f 的不连续性

在这个问题中,我们寻找从 x=y=0 到达x=ah,y=(1+b)h的最短时间路径。

由于求解这个问题需要用到多点边值问题,我们首先通过多点边值问题来求解前面求解过的一个问题,以便更清晰的演示采用的方法。

下面这个问题在前面第8部分介绍过:

最优控制问题(Interior point constraint problem):

满足边界约束:

内点约束:

之前我们解决这个问题时,采用的方法是解析方法,下面采用bvp来进行求解。

%% solve MBVP

solinit = bvpinit([linspace(0, 0.75) linspace(0.75,1)], [1 -1]);
%solinit.x = [linspace(0, 0.75) linspace(0.75,1)];
%solinit.y = [linspace(1,0.9) linspace(0.9,0.75);linspace(1, -0.5) linspace(1.5, 1)];
tol = 1E-6;
options = bvpset('RelTol',tol,'AbsTol',[tol tol],'Nmax', 2000);
sol = bvp4c(@MBVPOde, @MBVPbc,solinit);

time = sol.x;
state = sol.y(1,:);
costate = sol.y(2,:);
control = -0.5*costate;
%% plotting

% state

figure(1); clf
plot(time, state,'r-', 'LineWidth',2)
legend('state seg1','state seg2','Location','NorthEast')
grid on;

xlabel('Time');ylabel('States')

% costate

figure(2); clf
plot(time, costate,'r-','LineWidth',2)
hold on;
grid on;
xlabel('Time');ylabel('Costates')

% control
figure(3); clf
plot(time, control,'r-', 'LineWidth',2)
hold on;
grid on;

xlabel('Time');ylabel('Control')

function dydt=MBVPOde(t, y, k)
    % y: [x, lambda]
    u = -0.5*y(2);
    dydt = [u; -2*y(1)];

end

function res=MBVPbc(yleft, yright)
    ya = yleft(:,1);
    yb = yright(:,end);
    ymidL = yleft(:, 2);
    ymidR = yright(:,1);
    
    res = [ya(1)-1;
               yb(1)-0.75;
               ymidL(1)-0.9;
               ymidR(1)-0.9;
               ];
end

下面我们再回到问题:

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

满足约束:

其中,

因此,该系统的运动方程便被分为了两部分,以下分别进行推导,根据前面已经得到过的对一般的航体航行问题的最优必要条件如下:

根据本题目中的具体形式,我们分别推导可以得到以下式子:

上式要求 y<h 

上式要求 y>h 

可以得到:

同样应用公式

到本问题中可以得到:

由最优控制条件可得:

根据给定的相关参数 ε,a,b ,即可求解得到上述方程的解。