梯度法求解优化问题

梯度法求解优化问题

通常优化问题非常复杂,难以求解出解析解,但在实际应用过程中, 解能满足一定精度,满足工程要求即可。
优化方程的形式和求解方法众多,本文将以梯度法求解静态无约束目标函数,如式(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λ˙=xH
解的必要条件为:
∂ H ∂ u = 0 \frac {\partial H}{\partial u} = 0 uH=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]

梯度下降法

梯度下降法的基本步骤如下:

  1. 选定初始控制 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
  2. 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);
  3. 计算性能指标 J [ u 0 ( t ) ] J[u_0(t)] J[u0(t)]
  4. x 0 ( t ) x^0(t) x0(t)待人正则方程中,得到对应的 l a m b d a 0 ( t ) lambda ^0 (t) lambda0(t);
  5. 计算性能指标在 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=uH
  6. 确定搜索步长,由一维搜索法确定。 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]
  7. 修正控制向量: u 1 ( t ) = u 0 ( t ) − α g 0 u ^ 1 (t) = u ^0(t) - \alpha g^0 u1(t)=u0(t)αg0
  8. 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.501[x2(t)+u2(t)]dt,用梯度法求使性能指标达到最小的 u ∗ ( t ) u^*(t) u(t)
解:

  1. 选定初始控制 u 0 = 0 u^0 = 0 u0=0
  2. 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
  3. 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[1121(1+10t)2]
  4. 计算性能指标在 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=uH[x0(t),u0(t),λ0(t),t]=λ0(t);
  5. 设步长为 α \alpha α,计算 u 0 ( t ) = u 0 ( t ) − α g 0 u^0(t)=u^0(t)-\alpha g^0 u0(t)=u0(t)αg0
  6. 检查是否满足求解要求,否则,返回步骤2;

注意事项

  1. 梯度法无法区分局部极小和全局极小;
  2. 无法直接处理不等式约束;
  3. 在接近最优解时,迭代收敛非常慢;

声明

本文的内容参考陈建忠老师的视频课程,非常感谢陈老师讲解工程技术问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值