【十九】微分动态规划

来源:互联网 发布:java sort排序算法 编辑:程序博客网 时间:2024/04/25 20:54

微分动态规划 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


// 这里是分割线~

// 顺便给自己的公众号打个广告,希望大家多多关注~

// 关注我的公众号可以看到很多有意思的东西哦~


0 0
原创粉丝点击