梯度法求解优化问题
通常优化问题非常复杂,难以求解出解析解,但在实际应用过程中, 解能满足一定精度,满足工程要求即可。
优化方程的形式和求解方法众多,本文将以梯度法求解静态无约束目标函数,如式(1)所示,并通过一些实例更好地理解这个方法。
J
=
ϕ
[
x
(
t
f
)
,
t
f
]
+
∫
t
0
t
f
L
[
x
(
t
)
,
u
(
t
)
,
t
]
d
t
x
˙
(
t
)
=
f
[
x
(
t
)
,
u
(
t
)
,
t
]
x
(
t
0
)
=
x
0
(1)
\begin{array}{l} J= \phi [x(t_f), t_f] + \int _{t_0} ^ {t_f} L[x(t), u(t), t]dt \\ \dot x (t) = f[x(t), u(t), t] \\ x(t_0) = x_0 \end{array} \tag1
J=ϕ[x(tf),tf]+∫t0tfL[x(t),u(t),t]dtx˙(t)=f[x(t),u(t),t]x(t0)=x0(1)
式(1)的哈密顿函数为:
H
=
L
[
x
(
t
)
,
u
(
t
)
,
t
]
+
λ
(
t
)
f
[
x
(
t
)
,
u
(
t
)
,
t
]
H = L[x(t), u(t), t] + \lambda (t) f[x(t), u(t), t]
H=L[x(t),u(t),t]+λ(t)f[x(t),u(t),t]
正则方程为:
x
˙
=
∂
H
∂
λ
λ
˙
=
−
∂
H
∂
x
\dot x = \frac{\partial H}{\partial \lambda} \\ \dot \lambda = - \frac{\partial H}{\partial x}
x˙=∂λ∂Hλ˙=−∂x∂H
解的必要条件为:
∂
H
∂
u
=
0
\frac {\partial H}{\partial u} = 0
∂u∂H=0
横截条件为:
λ
(
t
f
)
=
∂
ϕ
[
x
(
t
f
0
,
t
f
]
∂
x
(
t
f
)
\lambda (t_f) = \frac{\partial \phi [x(t_f0, t_f]}{\partial x(t_f)}
λ(tf)=∂x(tf)∂ϕ[x(tf0,tf]
梯度下降法
梯度下降法的基本步骤如下:
- 选定初始控制 u 0 ( t ) u^0(t) u0(t), 凭经验给定,选取时应根据 u ( t ) u(t) u(t)的物理意义选择合适的 u 0 ( t ) u^0(t) u0(t),允许误差 ϵ > 0 \epsilon > 0 ϵ>0;
- 将 u 0 ( t ) u^0(t) u0(t)待人状态方程中,以 x ( t 0 ) x(t_0) x(t0)为初值,得到与 u 0 ( t ) u^0(t) u0(t)对应的状态轨迹线 x 0 ( t ) x_0(t) x0(t);
- 计算性能指标 J [ u 0 ( t ) ] J[u_0(t)] J[u0(t)];
- 将 x 0 ( t ) x^0(t) x0(t)待人正则方程中,得到对应的 l a m b d a 0 ( t ) lambda ^0 (t) lambda0(t);
- 计算性能指标在 u 0 u^0 u0处的梯度 ▽ J [ u 0 ( t ) ] = g 0 = ∂ H ∂ u \bigtriangledown J[u^0(t)] = g^0 = \frac{\partial H}{\partial u} ▽J[u0(t)]=g0=∂u∂H;
- 确定搜索步长,由一维搜索法确定。 J [ u 0 − α g 0 ] = min α > 0 J [ u 0 − α g 0 ] J[u^0 - \alpha g^0] = \min \limits_{\alpha > 0} J[u^0 - \alpha g^0] J[u0−αg0]=α>0minJ[u0−αg0] ;
- 修正控制向量: u 1 ( t ) = u 0 ( t ) − α g 0 u ^ 1 (t) = u ^0(t) - \alpha g^0 u1(t)=u0(t)−αg0
- 以 u 1 u ^ 1 u1代替 u 0 u^0 u0,重复步骤2、3、4、5、6、7,直到满足终止条件;
实例
已知系统状态方程为:
x
˙
(
t
)
=
−
x
2
(
t
)
+
u
(
t
)
\dot x(t) = -x^2(t)+u(t)
x˙(t)=−x2(t)+u(t),初始状态为:
x
(
0
)
=
10
x(0) = 10
x(0)=10,性能指标:
J
=
0.5
∫
0
1
[
x
2
(
t
)
+
u
2
(
t
)
]
d
t
J=0.5 \int _0 ^1 [x^2(t) + u^2(t)]dt
J=0.5∫01[x2(t)+u2(t)]dt,用梯度法求使性能指标达到最小的
u
∗
(
t
)
u^*(t)
u∗(t)。
解:
- 选定初始控制 u 0 = 0 u^0 = 0 u0=0;
- 将 u 0 ( t ) = 0 u^0(t)=0 u0(t)=0代入状态方程,且初始状态 x ( 0 ) = 10 x(0) = 10 x(0)=10,求解微分方程得: x 0 ( t ) = 10 10 t + 1 x^0(t)= \frac{10}{10t+1} x0(t)=10t+110;
- 将 x 0 ( t ) x^0(t) x0(t)代入正则方程中,且由横截条件可知得: λ 0 ( t ) = 0.5 [ 1 − ( 1 + 10 t ) 2 121 ] \lambda ^0(t)=0.5[1-\frac{(1+10t)^2}{121}] λ0(t)=0.5[1−121(1+10t)2];
- 计算性能指标在 u 0 u^0 u0处的梯度: g 0 = ∂ H [ x 0 ( t ) , u 0 ( t ) , λ 0 ( t ) , t ] ∂ u = λ 0 ( t ) ; g^0 = \frac{\partial H[x^0(t),u^0(t),\lambda ^0(t),t]}{\partial u} = \lambda ^0(t); g0=∂u∂H[x0(t),u0(t),λ0(t),t]=λ0(t);
- 设步长为 α \alpha α,计算 u 0 ( t ) = u 0 ( t ) − α g 0 u^0(t)=u^0(t)-\alpha g^0 u0(t)=u0(t)−αg0;
- 检查是否满足求解要求,否则,返回步骤2;
注意事项
- 梯度法无法区分局部极小和全局极小;
- 无法直接处理不等式约束;
- 在接近最优解时,迭代收敛非常慢;
声明
本文的内容参考陈建忠老师的视频课程,非常感谢陈老师讲解工程技术问题。