简介
高斯伪谱法可以做为一种简化求解连续目标函数优化问题的方法,通过将连续优化问题变成离散优化问题,不仅有较高的求解精度,而且计算量较少。
预备知识
优化问题的目标函数
优化问题的目标函数通常都包含评价函数、约束方程、起始和终端条件等,如式(1)所示。
J = ∫ t 0 t f g [ x ( t ) , u ( t ) , t ] d t x ( t 0 ) = x 0 x ( t f ) = x f x ˙ ( t ) = f [ x ( t ) , u ( t ) , t ] (1) \begin{array}{l} J= \int _{t_0}^{t_f} g[x(t),u(t),t]dt \\ x(t_0) = x_0 \\ x(t_f) = x_{f} \\ \dot x(t) = f[x(t),u(t),t] \end{array} \tag1 J=∫t0tfg[x(t),u(t),t]dtx(t0)=x0x(tf)=xfx˙(t)=f[x(t),u(t),t](1)
高斯勒让德求积公式
通常连续型目标函数含有积分项,通过使用高斯求积公式可以将积分项变成离散的形式,降低求解难度。高斯求积公式如式(2)所示。
∫
−
1
1
f
(
x
)
d
x
≈
∑
n
=
0
n
w
n
f
(
x
n
)
(2)
\int _{-1} ^1 f(x)dx \approx \sum _{n=0} ^n w_nf(x_n) \tag{2}
∫−11f(x)dx≈n=0∑nwnf(xn)(2)
式(2)的推导过程这里不介绍,其中,参数
w
n
w_n
wn和
x
n
x_n
xn的值可以通过查表的方式获得,如下表。
由于基本的高斯勒让德公式的积分上下限为[-1,1],需要通过换元法将任意区间的积分转换为[-1,1],如式(3)所示。
∫
a
b
f
(
x
)
d
x
=
b
−
a
2
∫
−
1
1
F
(
t
)
d
t
x
=
b
−
a
2
t
+
b
+
a
2
(3)
\int _{a} ^b f(x)dx = \frac{b-a}{2} \int _{-1} ^1 F(t)dt \\ x=\frac{b-a}{2}t+\frac{b+a}{2} \tag{3}
∫abf(x)dx=2b−a∫−11F(t)dtx=2b−at+2b+a(3)
拉格朗日插值多项式
使用拉格朗日插值多项式的最终目的是处理目标函数当中的状态约束,包括起始、中间、终端状态约束等。拉格朗日插值多项式如式(4)所示。
f
(
x
)
=
∑
k
=
0
N
f
(
x
k
)
L
k
(
x
)
L
k
(
x
)
=
∏
j
=
0
,
j
≠
k
N
x
−
x
j
x
k
−
x
j
(4)
f(x)=\sum _{k=0} ^Nf(x_k)L_k(x) \\ L_k(x) = \prod _{j=0,j \neq k} ^N \frac{x-x_j}{x_k-x_j} \tag{4}
f(x)=k=0∑Nf(xk)Lk(x)Lk(x)=j=0,j=k∏Nxk−xjx−xj(4)
操作过程
处理评价函数
通过高斯勒让德求积公式(3)将目标函数中的评价函数转变为如式(5)所示。
J
=
t
f
−
t
0
2
∫
−
1
1
G
[
X
(
τ
)
,
U
(
τ
)
,
τ
]
d
τ
≈
t
f
−
t
0
2
∑
i
=
0
n
w
i
G
[
X
(
τ
i
)
,
U
(
τ
i
)
,
τ
i
]
(5)
J=\frac{t_f-t_0}{2} \int _{-1} ^1 G[X(\tau), U(\tau), \tau] d \tau \approx \frac{t_f-t_0}{2} \sum _{i=0} ^n w_i G[X(\tau _i), U(\tau _i), \tau _i] \tag5
J=2tf−t0∫−11G[X(τ),U(τ),τ]dτ≈2tf−t0i=0∑nwiG[X(τi),U(τi),τi](5)
处理约束条件
硬约束条件包括终端约束和状态方程约束。结合拉格朗日插值多项式状态方程约束如式(6)所示。
d
X
(
τ
)
d
τ
≈
∑
i
=
0
N
X
(
τ
)
d
L
i
(
τ
)
d
τ
=
∑
i
=
0
N
D
k
i
Q
(
τ
i
)
=
t
f
−
t
0
2
F
[
X
(
τ
)
,
U
(
τ
)
,
τ
]
(6)
\frac{dX(\tau)}{d\tau} \approx \sum _{i=0} ^N X(\tau) \frac{dL _i(\tau)}{d \tau} = \sum _{i=0} ^ N D_{ki}Q(\tau _ i) =\frac{t_f - t_0}{2} F[X(\tau),U(\tau), \tau] \tag6
dτdX(τ)≈i=0∑NX(τ)dτdLi(τ)=i=0∑NDkiQ(τi)=2tf−t0F[X(τ),U(τ),τ](6)
式(6)中,矩阵
D
D
D是可以通过离线方式获得的,
D
=
[
D
k
i
]
=
∑
i
=
0
N
∑
j
=
0
,
j
≠
i
N
(
τ
k
−
τ
j
)
∑
j
=
0
,
j
≠
i
N
(
τ
i
−
τ
j
)
D=[D_{ki}] = \sum _{i=0} ^N \frac{\sum _{j=0, j \neq i} ^N (\tau _k - \tau _j)}{\sum _{j=0, j \neq i} ^N (\tau _i - \tau _j)}
D=[Dki]=∑i=0N∑j=0,j=iN(τi−τj)∑j=0,j=iN(τk−τj) 。
结合高斯勒让德求积公式,终端约束可以写成如式(7)所示。
X
(
τ
f
)
=
X
(
τ
0
)
+
∫
−
1
1
F
[
X
(
τ
)
,
U
(
τ
)
,
τ
]
d
τ
≈
X
(
τ
0
)
+
t
f
−
t
0
2
∑
i
=
0
N
w
i
F
[
X
(
τ
i
)
,
U
(
τ
i
)
,
τ
i
]
(7)
X(\tau _f) = X(\tau _0) + \int _{-1} ^1 F[X(\tau),U(\tau), \tau] d\tau \approx X(\tau _0) + \frac{t_f - t_0}{2} \sum _{i=0} ^N w_i F[X(\tau _i),U(\tau _i), \tau _i] \tag7
X(τf)=X(τ0)+∫−11F[X(τ),U(τ),τ]dτ≈X(τ0)+2tf−t0i=0∑NwiF[X(τi),U(τi),τi](7)
求解
由上述可知,高斯伪谱法将连续型优化问题转变为多变量离散优化问题(通常为非线性问题),只需要将
[
U
(
τ
1
)
,
U
(
τ
2
)
,
.
.
.
,
U
(
τ
n
)
]
[U(\tau _1), U(\tau _2), ..., U(\tau _n)]
[U(τ1),U(τ2),...,U(τn)] 做为求解变量,使用现有的求解器(如casadi、ipopt、nlopt等)求解即可。
注意事项
- 采用更高阶数的高斯勒让德公式,可以使求解精度更高,但计算量越大;
- 高斯伪谱法只是转化问题,并没有求解问题,同时也不能保证转化问题的凸凹性;