动态最优化问题常常被纳入最优控制的范畴,求解方法主要是变分法、动态规划方法。最近比较火的强化学习,基于的问题就是动态最优化问题。
1. 从静态最优化问题开始
在求解最优化问题时,如果使用了目标函数的导数,则称为解析法,否则称之为直接法。
首先看解析法。对于函数极值,一阶矩阵=0和二阶矩阵正定(或负定)即可。一阶矩阵=0常用牛顿迭代法去求,其核心是将曲线当做直线找0点,需要用到一阶导的导数,即二阶导;实际过程中常常用差分来代替二阶导;也可以用二分法逐步逼近一阶导函数的零点。
然后看直接法,只适用于单峰的方法。一般方式就是逐步缩小探索空间。详细可参考https://blog.csdn.net/hemeinvyiqiluoben/article/details/79830597
关于带约束的问题,有两类方法,一种是将约束加到目标函数上去进行求解,比如拉格朗日法、罚函数(内点、外点法);还有一种是在约束范围内进行逐步探索,比如求解线性规划的单纯形法,求解整数规划的分支定界、割平面法等。
动态最优化问题最常见于控制系统中,常常采用一阶微分方程组来描述系统的运动规律。这里定义一下数学符号,常用
x
x
x表示状态,
u
u
u表示控制,
J
J
J表示性能指标,是状态轨线(状态的变分)和容许轨线(控制的变分)的一个泛函。
处理动态最优化主要有两种方法,一种是动态规划方法,一种就是这里要介绍的基于变分法的最优控制理论。动态规划方法常用于离散时间问题,对于连续时间问题求解动态规划需要用到偏微分方程,因此常常改用变分法。
2 变分法:欧拉方程
一个经典的变分问题可以表示为:
min
J
[
y
]
=
∫
0
T
F
[
t
,
y
(
t
)
,
y
′
(
t
)
]
d
t
\min J[y]=\int_0^TF[t,y(t),y'(t)]dt
minJ[y]=∫0TF[t,y(t),y′(t)]dt,s.t.
y
(
0
)
=
0
y(0) = 0
y(0)=0;
y
(
T
)
=
Z
y(T)=Z
y(T)=Z。这个问题和经典积分问题的主要差别在于处理的是
J
J
J关于
y
y
y的变分,而不是
x
x
x的微分。变分问题的一个最重要结论是欧拉方程:
F
y
′
y
′
y
′
′
(
t
)
+
F
y
y
′
y
′
(
t
)
+
F
t
y
′
=
F
y
F_{y'y'}y''(t)+F_{yy'}y'(t)+F_{ty'}=F_{y}
Fy′y′y′′(t)+Fyy′y′(t)+Fty′=Fy
这么重要的公式,我们来推导一下:
令
J
[
y
∗
]
=
min
J
[
y
]
J[y^*] = \min J[y]
J[y∗]=minJ[y],扰动函数为
p
(
t
)
p(t)
p(t),扰动变量为
ϵ
\epsilon
ϵ
J
(
ϵ
)
=
∫
0
T
F
[
t
,
y
∗
+
ϵ
p
(
t
)
,
y
′
∗
(
t
)
+
ϵ
p
′
(
t
)
]
d
t
J(\epsilon)=\int_0^TF[t,y^*+\epsilon p(t),y'^*(t)+\epsilon p'(t)]dt
J(ϵ)=∫0TF[t,y∗+ϵp(t),y′∗(t)+ϵp′(t)]dt
d
J
d
ϵ
=
∫
0
T
F
y
p
(
t
)
d
t
+
∫
0
T
F
y
′
p
′
(
t
)
d
t
\frac{dJ}{d\epsilon} =\int_0^TF_yp(t)dt+\int_0^TF_{y'}p'(t)dt
dϵdJ=∫0TFyp(t)dt+∫0TFy′p′(t)dt
=
∫
0
T
F
y
p
(
t
)
d
t
+
F
y
′
p
(
t
)
∣
0
T
−
∫
0
T
p
(
t
)
d
F
y
′
d
t
d
t
=\int_0^TF_yp(t)dt+F_{y'}p(t)|^T_0-\int_0^Tp(t)\frac{dF_{y'}}{dt}dt
=∫0TFyp(t)dt+Fy′p(t)∣0T−∫0Tp(t)dtdFy′dt
=
∫
0
T
p
(
t
)
[
F
y
−
d
F
y
′
d
t
]
d
t
=\int_0^Tp(t)[F_y-\frac{dF_{y'}}{dt}]dt
=∫0Tp(t)[Fy−dtdFy′]dt
由于
p
(
t
)
p(t)
p(t)是任意扰动,因此有
F
y
−
d
F
y
′
d
t
=
0
F_y-\frac{dF_{y'}}{dt}=0
Fy−dtdFy′=0。记住后面
d
F
y
′
d
t
\frac{dF_{y'}}{dt}
dtdFy′求导需要用全导数公式,展开为3项偏导数的和。
作为推广的欧拉-泊松方程:
F
y
−
d
F
y
′
d
t
+
.
.
.
+
(
−
1
)
n
d
n
(
F
y
(
n
)
)
d
t
n
=
0
F_y-\frac{dF_{y'}}{dt}+...+(-1)^n\frac{d^n(F_{y^{(n)}})}{dt^n}=0
Fy−dtdFy′+...+(−1)ndtndn(Fy(n))=0
下面举个例子:
J
[
y
]
=
∫
0
2
(
12
t
y
+
y
′
2
)
d
t
J[y]=\int^2_0(12ty+y'^2)dt
J[y]=∫02(12ty+y′2)dt
边界条件为
y
(
0
)
=
0
,
y
(
2
)
=
8
y(0)=0,y(2)=8
y(0)=0,y(2)=8。
求解:
F
=
12
t
y
+
y
′
2
F=12ty+y'^2
F=12ty+y′2,
F
y
=
12
t
F_y=12t
Fy=12t,
F
y
′
=
2
y
′
F_{y'}=2y'
Fy′=2y′
d
F
y
′
d
t
=
∂
F
y
′
∂
t
+
∂
F
y
′
∂
y
∂
y
∂
t
+
∂
F
y
′
∂
y
′
∂
y
′
∂
t
=
0
+
0
∗
y
′
+
2
∗
y
′
′
(
t
)
=
12
t
\frac{dF_{y'}}{dt}=\frac{\partial F_{y'}}{\partial t}+\frac{\partial F_{y'}}{\partial y}\frac{\partial y}{\partial t}+\frac{\partial F_{y'}}{\partial y'}\frac{\partial y'}{\partial t}=0+0*y'+2*y''(t)=12t
dtdFy′=∂t∂Fy′+∂y∂Fy′∂t∂y+∂y′∂Fy′∂t∂y′=0+0∗y′+2∗y′′(t)=12t
即
y
′
′
(
t
)
=
6
t
y''(t)=6t
y′′(t)=6t,
y
(
t
)
=
t
3
+
c
1
t
+
c
2
y(t)=t^3+c_1t+c_2
y(t)=t3+c1t+c2,加上边界条件,得到
y
(
t
)
=
t
3
y(t)=t^3
y(t)=t3
3. 最优控制:最大值原理
在最优控制理论中,我们将
y
y
y用
x
x
x代替,
y
′
y'
y′用
u
u
u代替,
x
x
x和
u
u
u之间的关系用一个微分式表达
d
x
/
d
t
=
f
[
t
,
x
(
t
)
,
u
(
t
)
]
dx/dt=f[t,x(t),u(t)]
dx/dt=f[t,x(t),u(t)],可以看做是状态转移方程。这样,我们的关注点从最优状态轨线变为了最优控制轨线。问题变为:
max
J
=
∫
0
T
F
(
t
,
y
,
u
)
d
t
\max J=\int^T_0F(t,y,u)dt
maxJ=∫0TF(t,y,u)dt
y
′
=
f
(
t
,
y
,
u
)
y'=f(t,y,u)
y′=f(t,y,u)(相当于状态转移方程)
y
(
0
)
=
A
y(0)=A
y(0)=A(可有可无,终点的状态也是可有可无)
定义汉密尔顿函数
H
(
t
,
y
,
u
,
λ
)
=
F
(
t
,
y
,
u
)
+
λ
(
t
)
f
(
t
,
y
,
u
)
H(t,y,u,\lambda)=F(t,y,u)+\lambda(t)f(t,y,u)
H(t,y,u,λ)=F(t,y,u)+λ(t)f(t,y,u),其中
λ
\lambda
λ称为共积函数。这个表达式和静态最优化问题中的拉格朗日函数非常像。最优控制理论中的最重要结论称为最大值原理(状态转移方程类似于等式约束条件,而最大值原理相当于静态最优化问题中的KKT条件):
H
(
t
,
y
,
u
∗
,
λ
)
≥
H
(
t
,
y
,
u
,
λ
)
H(t,y,u^*,\lambda)\ge H(t,y,u,\lambda)
H(t,y,u∗,λ)≥H(t,y,u,λ)(相当于定常方程,注意H一阶的时候极值在端点取到)
y
′
=
∂
H
∂
λ
y'=\frac{\partial H}{\partial \lambda}
y′=∂λ∂H (
y
y
y运动方程,相当于原始可行)
λ
′
=
−
∂
H
∂
y
\lambda'=-\frac{\partial H}{\partial y}
λ′=−∂y∂H (
λ
\lambda
λ运动方程,相当于对偶可行)
λ
(
T
)
=
0
\lambda(T)=0
λ(T)=0(T固定时的横截条件)
如果是一个水平终结线(
y
T
y_T
yT固定),那么横截条件变为
H
T
=
0
H_T=0
HT=0
如果是一个截断水平终结线(
y
T
y_T
yT固定,
T
≤
T
max
T\le T_{\max}
T≤Tmax),那么横截条件变为
H
T
≥
0
H_T\ge 0
HT≥0,
H
T
(
T
−
T
max
)
=
0
H_T(T-T_{\max})=0
HT(T−Tmax)=0(类似于互补剩余)
最大值原理的证明非常复杂,这里仅仅表述一下它的直观意义:
将状态转移方程添加到目标函数中,得到
V
=
∫
0
T
F
d
t
+
∫
0
T
λ
[
f
−
y
′
]
d
t
=
∫
0
T
(
H
+
y
λ
′
)
d
t
−
(
λ
y
)
∣
0
T
V=\int^T_0Fdt+\int^T_0\lambda[f-y'] dt=\int^T_0(H+y\lambda')dt-(\lambda y)|^T_0
V=∫0TFdt+∫0Tλ[f−y′]dt=∫0T(H+yλ′)dt−(λy)∣0T
V对
u
u
u求偏导可以得到定常方程。
V对
y
y
y求偏导可以得到对偶可行方程。
V对
y
T
y_T
yT或是
T
T
T求偏导可以得到横截条件。
下面举个例子:
max
J
[
y
,
u
]
=
∫
0
2
−
(
1
+
u
2
)
1
/
2
d
t
\max J[y,u]=\int^2_0-(1+u^2)^{1/2}dt
maxJ[y,u]=∫02−(1+u2)1/2dt
y
′
=
u
y'=u
y′=u
边界条件为
y
(
0
)
=
A
y(0)=A
y(0)=A。
求解:
H
=
−
(
1
+
u
2
)
1
/
2
+
λ
u
H=-(1+u^2)^{1/2}+\lambda u
H=−(1+u2)1/2+λu
∂
2
H
∂
u
2
=
−
(
1
+
u
2
)
−
3
/
2
<
0
\frac{\partial^2 H}{\partial u^2}=-(1+u^2)^{-3/2}<0
∂u2∂2H=−(1+u2)−3/2<0,因此可以求最大化问题。
∂
H
∂
u
=
0
\frac{\partial H}{\partial u}=0
∂u∂H=0得到
u
=
λ
(
1
−
λ
2
)
−
1
/
2
u={\lambda}(1-\lambda^2)^{-1/2}
u=λ(1−λ2)−1/2
λ
′
=
−
∂
H
∂
y
=
0
\lambda'=-\frac{\partial H}{\partial y}=0
λ′=−∂y∂H=0和
λ
(
T
)
=
0
\lambda(T)=0
λ(T)=0,得到
λ
\lambda
λ,
u
u
u都是常数0,
y
y
y等于常数
A
A
A。
即什么控制都不做,路径
y
y
y一直保持初始状态不变。