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