一个简单的微分对策问题

理论知识


注:本文为《最优控制方法与Matlab实现》第八章 微分对策问题的实现。给出了文中例题的解法,以及matlab仿真代码,解题步骤和matlab均按照我习惯的方式给出。

全文的公式使用LaTex公式编辑器编辑而成。


首先对微分对策的一般形式进行介绍。

PE 是对策双方,动态系统状态方程为

\[\dot {\boldsymbol x}(t)=\boldsymbol f[\boldsymbol x(t),\boldsymbol u(t),\boldsymbol v(t),t]\]

给定初始状态为

\[\boldsymbol x(t)=\boldsymbol x_0\]

式中,$\boldsymbol x(t)$ 为 $n$ 维 $P$ 、$E$ 双方的状态变量;$\boldsymbol u(t)$ 为 $m_u$ 维 P 方控制变量,$\boldsymbol v(t)$ 为$m_v$ 维 $E$ 方控制变量,$\boldsymbol u(t)$ 和$\boldsymbol v(t)$的各分量 $u_i(t)$ 和 $v_i(t)$ 均为 $t$ 的分段连续函数, $[\boldsymbol u(t),\boldsymbol v(t)]$ 为容许控制策略或简称控制策略;$\boldsymbol f(\cdot)$为 $n$ 维连续可微的向量函数;$t \in [t_0,t_f]$ 。取性能指标为

\[J[\boldsymbol u(t),\boldsymbol v(t)]=\theta[\boldsymbol x(t_f),t_f]+\int_{t_0}^{t_f}L[\boldsymbol x(t),\boldsymbol u(t),\boldsymbol v(t),t]\mathrm{d}t\]

【纳什-庞特里亚金最大最小原理】

定义Hamilton函数如下:

\[H[\boldsymbol x(t),\boldsymbol u(t),\boldsymbol v(t),\boldsymbol \lambda(t),t]=L[\boldsymbol x(t),\boldsymbol u(t),\boldsymbol v(t),t]+\boldsymbol \lambda^{\mathrm T} \boldsymbol f[\boldsymbol x(t),\boldsymbol u(t),\boldsymbol v(t),t]\]

【定理】 若 $\boldsymbol u^(t)$ 和 $\boldsymbol v^(t)$ 是最优控制,则有:

(1)状态变量 $\boldsymbol x(t)$ 与协态变量 $\boldsymbol \lambda(t)$ 满足以下协态方程

\[\dot {\boldsymbol x}(t)=\frac{\partial H}{\partial \lambda} \\ \dot {\boldsymbol \lambda}(t)=-\frac{\partial H}{\partial \boldsymbol x}\]

(2)边界条件

\[\boldsymbol x(t_0)=\boldsymbol x_0 \\ \boldsymbol \lambda(t_f)=\frac{\partial \theta[\boldsymbol x(t_f),t_f]}{\partial \boldsymbol x(t_f)}\]

(3)对于任意 $t \in [t_0,t_f]$,Hamilton函数满足下述条件

\[H[\boldsymbol x^*(t),\boldsymbol u^*(t),\boldsymbol v^*(t),\boldsymbol \lambda^*(t),t]=\min_{\boldsymbol u}\max_{\boldsymbol v}H[\boldsymbol x^*(t),\boldsymbol u(t),\boldsymbol v(t),\boldsymbol \lambda^*(t),t]\\ =\max_{\boldsymbol v}\min_{\boldsymbol u}H[\boldsymbol x^*(t),\boldsymbol u(t),\boldsymbol v(t),\boldsymbol \lambda^*(t),t]\]

【例题1】

在追逃对局中,$y(t)$与$v(t)$分别表示追赶者与逃跑者的相对位移与速度,追赶者希望终端脱靶 $|y(t_f)|$最小,而逃跑者希望此值最大。该问题可描述为如下微分对策问题:

系统状态方程为和初值为

\[\left\{\begin{matrix} \dot y(t)=v(t) \\ \dot v(t)=a_1(t)-a_2(t) \end{matrix}\right.,\quad \left\{\begin{matrix} y(t_0)=0 \\ v(t_0)=v_0 \end{matrix}\right.\]

$t_f$ 给定,目标函数为

\[J=\frac{1}{2}y^2(t_f)\]

式中,追与逃的加速度 $a_1(t)$ 与 $a_2(t)$ 是该问题的两个控制变量,其范围为

\[|a_1(t)| \le a_{1m},\quad |a_2(t)| \le a_{2m},\quad a_{1m}>a_{2m}\ge0\]

【解】

① 构造Hamilton函数

\[H=\lambda_1v+\lambda_2(a_1-a_2)\]

则 $\lambda_1$ 和 $\lambda_2$ 满足如下协态方程

\[\left\{\begin{matrix} \dot \lambda_1(t)=-\frac{\partial H}{\partial y}=0 \\ \dot \lambda_2(t)=-\frac{\partial H}{\partial v}=-\lambda_2 \end{matrix}\right. \Rightarrow \left\{\begin{matrix} \lambda_1(t)=C_1 \\ \lambda_2(t)=-C_1t+C_2 \end{matrix}\right. \tag{1}\]

② 边界条件

可知

\[\varphi=\frac{1}{2}y^2(t_f)\]

那么边界条件为

\[\left\{\begin{matrix} y(t_0)=0 \\ v(t_0)=v_0 \end{matrix}\right.,\quad \left\{\begin{matrix} \lambda_1(t_f)=\frac{\partial \varphi}{\partial y(t_f)}=y(t_f) \\ \lambda_2(t_f)=\frac{\partial \varphi}{\partial v(t_f)}=0 \end{matrix}\right. \tag{2}\]

将式 $(2)$ 与式 $(1)$ 作对比,得到

\[C_1=y(t_f)\] \[\lambda_2(t_f)=-y(t_f)\cdot t_f+C_2=0 \\ \Rightarrow C_2=y(t_f)\cdot t_f\]

整理得到

\[\left\{\begin{matrix} \lambda_1(t)=y(t_f) \\ \lambda_2(t)=y(t_f)\cdot (t_f-t) \end{matrix}\right. \tag{3}\]

③ 极值条件

根据纳什-庞特里亚金最大最小定理,可得到控制量$a_1(t)$ 与 $a_2(t)$ 的最优轨线如下

\[\left\{\begin{matrix} a_1^*(t)=-a_{1m}\mathrm{sgn}[\lambda_2(t)] \\ a_2^*(t)=-a_{2m}\mathrm{sgn}[\lambda_2(t)] \end{matrix}\right. \tag{4}\]

将式 $(3)$ 代入式 $(4)$,则有

\[\left\{\begin{matrix} a_1^*(t)=-a_{1m}\mathrm{sgn}[y(t_f)(t_f-t)] \\ a_2^*(t)=-a_{2m}\mathrm{sgn}[y(t_f)(t_f-t)] \end{matrix}\right.\]

因为 $t_f-t>0$ 恒成立,上式可化简为

\[\left\{\begin{matrix} a_1^*(t)=-a_{1m}\mathrm{sgn}[y(t_f)] \\ a_2^*(t)=-a_{2m}\mathrm{sgn}[y(t_f)] \end{matrix}\right.\]

更清晰地,将上式改写为

\[\left\{\begin{matrix} a_1^*(t)=-a_{1m},\quad y(t_f) > 0 \\ a_1^*(t)=a_{1m},\quad y(t_f) < 0 \end{matrix}\right.,\quad \left\{\begin{matrix} a_2^*(t)=-a_{2m},\quad y(t_f) > 0 \\ a_2^*(t)=a_{2m},\quad y(t_f) < 0 \end{matrix}\right. \tag{5}\]

④ 求解结果

因为原状态方程为

\[\left\{\begin{matrix} \dot y(t)=v(t) \\ \dot v(t)=(a_{2m}-a_{1m})\mathrm{sgn}[y(t_f)] \end{matrix}\right.,\quad \left\{\begin{matrix} y(t_0)=0 \\ v(t_0)=v_0 \end{matrix}\right.\]

注意,$(a_{1m}-a_{2m})\mathrm{sgn}[y(t_f)]$视作常数。对方程求积分,得到

\[\left\{\begin{matrix} y(t)=v_0(t-t_0)+\frac{1}{2}(a_{2m}-a_{1m})\mathrm{sgn}[y(t_f)](t-t_0)^2 \\ v(t)=(a_{2m}-a_{1m})\mathrm{sgn}[y(t_f)](t-t_0) \end{matrix}\right. \tag{6}\]

疑问:我不懂为什么 $y(t)$ 中还有 $v(t-t_0)$ 这一项,难道和初值条件有关系吗?

所以,末端条件为

\[y(t_f)=v_0(t_f-t_0)+\frac{1}{2}(a_{2m}-a_{1m})\mathrm{sgn}[y(t_f)](t_f-t_0)^2\]

根据式 $(5)$ 的分段条件,有

\[y(t_f)>0时,\\ y(t_f)=v_0(t_f-t_0)+\frac{1}{2}(a_{2m}-a_{1m})\mathrm{sgn}[y(t_f)](t_f-t_0)^2>0 \\ \Rightarrow 2v_0>-(a_{2m}-a_{1m})\cdot 1 \cdot (t_f-t_0) \\ \Rightarrow 2v_0>(a_{1m}-a_{2m})\cdot 1 \cdot (t_f-t_0) \\ \Rightarrow \frac{2v_0}{(a_{1m}-a_{2m})(t_f-t_0)}>1\\\] \[y(t_f)<0时,\\ y(t_f)=v_0(t_f-t_0)+\frac{1}{2}(a_{2m}-a_{1m})\mathrm{sgn}[y(t_f)](t_f-t_0)^2<0 \\ \Rightarrow 2v_0<-(a_{2m}-a_{1m})\cdot (-1) \cdot (t_f-t_0) \\ \Rightarrow 2v_0<(a_{1m}-a_{2m})\cdot (-1) \cdot (t_f-t_0) \\ \Rightarrow \frac{2v_0}{(a_{1m}-a_{2m})(t_f-t_0)}<-1\\\]

写在一起,有

\[\left\{\begin{matrix} y(t_f)>0\Rightarrow \frac{2v_0}{(a_{1m}-a_{2m})(t_f-t_0)}>1\\ y(t_f)<0\Rightarrow \frac{2v_0}{(a_{1m}-a_{2m})(t_f-t_0)}<-1 \end{matrix}\right. \tag{7}\]

最后,最优控制为

\[\left\{\begin{matrix} a_1^*(t)=-a_{1m},\quad \frac{2v_0}{(a_{1m}-a_{2m})(t_f-t_0)}>1 \\ a_1^*(t)=a_{1m},\quad \frac{2v_0}{(a_{1m}-a_{2m})(t_f-t_0)}<-1 \end{matrix}\right.\\ \left\{\begin{matrix} a_2^*(t)=-a_{2m},\quad \frac{2v_0}{(a_{1m}-a_{2m})(t_f-t_0)}>1 \\ a_2^*(t)=a_{2m},\quad \frac{2v_0}{(a_{1m}-a_{2m})(t_f-t_0)}<-1 \end{matrix}\right. \tag{8}\]

思考

就本文最简单的微分对策问题而言,其解题步骤与最优控制类似,参考最优控制的解题方法解微分对策即可。

这里给出Matlab仿真代码:

【例题2】

现有追逃问题,题设【例题1】,其起始时刻 $t_0=0$,终端时刻 $t_f=1$,初始相对速度 $v_0=3m/s$,追赶者加速度 $|a_1(t)| \le a_{1m}=2$,逃跑者加速度 $|a_2(t)| \le a_{2m}=1.5$

clear;clc;close all;
% 题目条件
t_0 = 0; t_f = 1;
v_0 = 3;
a_1m = 2; a_2m = 1.5;

%% 01 构建Hamilton函数
syms H lambda_1 lambda_2 y v a_1 a_2
H = lambda_1*v + lambda_2*(a_1-a_2);
% 求协态方程
Dlambda_1 = -diff(H,y);
Dlambda_2 = -diff(H,v);

%% 02 边界条件
% 性能指标中的常值型性能指标项
syms varphi
varphi = 0.5*y(1)^2;

lambda_1 = diff(varphi,y);
lambda_2 = diff(varphi,v);

%% 03 极值条件
% 省略没写

%% 04 求解结果
eq_1 = strcat('Dlambda_1=',char(Dlambda_1));
eq_2 = strcat('Dlambda_2=',char(Dlambda_2));
con_1 = strcat('lambda_1(1)=',char(y(1)));
con_2 = strcat('lambda_2(1)=',char(lambda_2));
[lambda_1,lambda_2] = dsolve(eq_1,eq_2,con_1,con_2);
[v,y] = dsolve('Dy=v,Dv=(a2m-a1m)*sgnyf','y(0)=0,v(0)=3');
% 求终端时刻相对位移
t = t_f;         % 这个位置有问题,代码错误
y = simplify(y);
y = expand(y);
yf = subs(y);