微分动态规划 Differential Dynamic Programming DDP
注意上一讲中推导出的公式,我们发现如果只需更新Φ,则不必维护ψ的更新,即在一定程度上ψ是不需要的,所以我们在下面的讨论中不考虑ψ的影响。
使用上一讲中将非线性函数线性化的方法,并将s(t+1)表示为f(st, at),则DDP的算法表示如下:
(1)选定标称轨迹s0_, a0_, s1_, a1_, ... sT_, aT_
(2)将在标称轨迹附近的点线性化,如
s(t+1) = f(st_, at_)+(▽s f(st_, at_))^T*(st-st_)+(▽a f(st_, at_))^T*(at-at_) = Atst + Btat
我们希望有(st, at) ≈ (st_, at_)
(3)通过LQR算法获得πt
(4)使用模拟器获得新的标称轨迹,即:s0_=initial state,at_ = π(st_),st+1_ = f(st_, at_)
卡尔曼滤波 Kalman Filter
下面我们介绍卡尔曼滤波算法,这一算法属于隐马尔可夫模型HMM的一个特例,其假设我们观测到的状态并不是真正的状态,而是经过了一定的映射的,映射的结果可能会降低维数,并带来误差,其方程为yt=Cst+vt,其中vt服从均值为0、方差为Σ的高斯分布,yt即我们观察到的结果
卡尔曼滤波的思路为 P(st | y1, ..., yt) -> predict -> P(st+1 | y1, ..., yt) -> update -> P(st+1 | y1, ..., yt, yt+1)
其具体的算法过程如下:
Predict:st | y1, ..., yt ~ N(st|t, Σt|t)
then st+1 | y1, ..., yt ~ N(st+1|t, Σt+1|t)
where st+1 | t = Ast|t
Σt+1 | t = AΣt|tA^T+Σ0
Update:get st+1|y1, ..., yt+1 ~ N(st+1|t+1, Σt+1|t+1)
where st+1 | t+1 = st+1 | t + Kt+1(yt+1 - cst+1|t)
Kt+1 = Σt+1|t*c^T(c*Σt+1|tC^T+Σ0)^-1
Σt+1|t+1 = Σt+1|t - Σt+1|t*c^T*(c*Σt+1|tC^T+Σ0)^-1*c*Σt+1|t
then st+1|t+1便是对st+1最佳的估计
线性二次高斯解法 Linear Quadatic Gaussian LQD
将我们上面介绍的两个方法合二为一,可得到下列方程
(1)St+1 = ASt+Bat+wt 其中wt~N(0,Σw)
(2)yt = cSt+vt 其中vt~N(0,Σ0)
则LQD算法的过程如下:
(1)使用卡尔曼滤波估计状态
s0|0 = s0; Σ0|0=0 对于s0~N(s0|0, Σ0|0)
(2)预测st+1|t = Ast|t+Bat以及Σt+1|t=AΣt|tA^T+Σ0
(3)通过LQR计算Lt,并计算策略函数 at = Lt*st = Lt*st|t
// 这里是分割线~
// 顺便给自己的公众号打个广告,希望大家多多关注~
// 关注我的公众号可以看到很多有意思的东西哦~