- 线性方程组的迭代解法(高斯-赛德尔迭代法)
- 基于模型的动态规划方法(策略迭代算法)
一、动态规划前置数学基础
1.雅克比(Jacobi)迭代法
不失一般性,用下述方程表示一般的线性方程组:
AX=b(2.1)
雅克比迭代法假设系数矩阵的对角元素aii=0,以此构造迭代方程:
⎩⎪⎪⎪⎨⎪⎪⎪⎧x1=a111(−a12x2−a13x3−⋯−a1nxn+b1)x2=a221(−a21x1−a23x3−⋯−a2nxn+b2)…xn=ann1(−an1x1−an3x3−⋯−an,n−1xn−1+bn)(2.2)
方程(2.2)写成矩阵的形式为
X=−D−1(L+U)X+D−1b(2.3)
其中:
D=⎣⎢⎢⎡a11a22⋱ann⎦⎥⎥⎤,L=⎣⎢⎢⎢⎢⎢⎡0a21a31⋮an10a32⋮an20an3⋱⋯0⎦⎥⎥⎥⎥⎥⎤,
U=⎣⎢⎢⎡0a22a21⋱ann⎦⎥⎥⎤
若记B=−D−1(L+U),d=D−1b,则迭代公式为
X=BX+d(2.4)
在进行迭代计算时,(2.2)式变成
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧x1(k+1)=a111(−a12x2(k)−a13x3(k)−⋯−a1nxn(k)+b1)x2(k+1)=a221(−a21x1(k)−a23x3(k)−⋯−a2nxn(k)+b2)…xn(k+1)=ann1(−an1x1(k)−an3x3(k)−⋯−an,n−1xn−1(k)+bn)(2.5)
2.高斯-赛德尔(Gauss-Seidel)迭代法
从上述雅克比迭代式中可以看出,没有立即利用已算出来的x1(k+1),x2(k+1),⋯等分量,而这些分量一般比x1(k),x2(k),⋯更为精确。
所以高斯-赛德尔迭代法对其进行了优化,对(2.5)式中第二个方程,第一行式子算出来的x1(k+1)值立马投入后续方程里,直到第n个方程。即:
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧x1(k+1)=a111(−a12x2(k)−a13x3(k)−⋯−a1nxn(k)+b1)x2(k+1)=a221(−a21x1(k+1)−a23x3(k)−⋯−a2nxn(k)+b2)…xn(k+1)=ann1(−an1x1(k+1)−an3x3(k+1)−⋯−an,n−1xn−1(k+1)+bn)(2.6)
方程(2.6)式写成矩阵形式
(D+L)X(k+1)=−UX(k)+b
写成迭代方程为:
X(k+1)=GX(k)+d1(2.7)
其中G=−(D+L)−1U,d1=(D+L)−1b
3.压缩映射证明策略评估的收敛性
略……(反正就是泛函分析数学证明收敛,也看不大懂,嗯,水了www)
可参考文章。
二、基于模型的动态规划方法(Model Based)
1、分类
在MDP框架中,根据状态转移概率P是否已知,可划分出基于模型的动态规划方法和基于无模型的强化学习方法。
两种类别都包括策略迭代算法,值迭代算法和策略搜索算法。
有模型与无模型预测和控制的方法
有模型(MDP):
预测:动态规划DP
控制:policy iteration; value iteration
无模型:
预测:MC;TD
控制:Sarsa;Q-learning
2.贝尔曼(Bellman)方程
- Return(回报)说的是把奖励进行折扣后所获得的收益,可定义为奖励的逐步叠加,如下式所示:
Gt=Rt+1+γRt+2+γ2Rt+3+…+γT−t−1RT(2.8)
- 有了return之后,即可以定义一个状态的价值了,就是state value function。对于MRP,其被定义成是return的期望:
vt(s)=E[Gt∣st=s]=E[Rt+1+γRt+2+…+γT−t−1RT∣st=s]=E[Rt+1+γGt+1∣st=s]=E[Rt+1+γv(st+1)∣st=s]=R(s)+γs′∈s∑P(s′∣s)V(s′)(2.9)
上式即贝尔曼(Bellman)方程,在马尔科夫决策过程中表述为:
vπ(s)=a∈A∑π(a∣s)(Rsa+γs′∈S∑Pss′avπ(s′))(2.10)
可以发现,状态s处的值函数vπ(s)可以利用后继状态的值函数vπ(s′)来表述,即自举算法(bootstrapping),于是乎我们可以用高斯-赛德尔迭代法来进行迭代计算,得到值函数并进行评估。
3.策略迭代算法
[1]输入:需要评估的策略π状态转移概率Pss′a和回报函数Rsa,折扣因子γ
[2]初始化值函数:v(s)=0
[3]Repeatk=0,1,…
[4]for every s do
[5]vk+1(s)=∑a∈Aπ(a∣s)(Rsa+γ∑s′∈SPss′avk(s′))
[6]end for
[7]Untilvk+1=vk(精度控制)
[8]输出:v(s)
需要注意,每次迭代都需要对状态集进行一次遍历(扫描)一遍评估每个状态的值函数。
- 策略改善算法
计算值函数的目的是利用值函数找到最优策略,可以自然的想到在已知当前策略的值函数时,在每个状态进行贪心改善当前策略,即:
πl+1(s)∈aargmaxqπl(s,a)
- 策略迭代算法
策略迭代包括评估与改善两个步骤。在策略评估中,给定策略每个状态值函数,然后改善得到新策略。如此循环下去,最终得到最优策略,这是一个策略收敛的过程。伪代码如下:
[1]输入:状态转移概率Pss′a和回报函数Rsa,折扣因子γ
[2]初始化值函数:v(s)=0,初始化策略π0
[3]Repeatl=0,1,…
[4]find vπl
[5]πl+1(s)∈aargmaxqπl(s,a)
[6]Untilπl+1=πl
[7]输出:π∗=πl
- 由上可看出,值函数往往需要多次迭代,但事实上可以不用等到策略评估算法完全收敛。特别的,如果在评估一次后立马进行策略改善,则称为值函数迭代算法
4、值函数迭代算法
详情请听下回分解……
三、总结
- 总体有了大概的轮廓,比如说根据有无model采取不同的算法来获取最优策略,以及基于策略、值、或者演员-评论家方法进行值函数的计算和优化策略。
- 看到什么最优控制问题属于是一头懵了,有关DDP方法的一堆变分推导我只能otz,下次再写吧,顺带着把python示例也码出来,还算
好理解。
- 不知道这个课咋考核啊,不会真要跑代码吧……