强化学习:动态规划(DP)

强化学习:动态规划(DP)


为什么可以使用动态规划解MDP问题?

动态规划能够解决的问题通常含有两个性质:
1) 拥有最优子结构:最优解可以分解为多个子问题。
2)含有重复子问题:子问题重复了很多次,其解可以存储下来重复利用。

马尔科夫决策过程满足上述两个性质:
1)贝尔曼方程给出了递归分解;
2)价值函数可以被存储及重复利用。

MDP使用DP时,需要知道全部的知识,也就是说模型 <S,A,P,R,γ> < S , A , P , R , γ > 是已知的。如果求解最优策略 π π ∗ 和最优价值函数 v v ∗ ,则是控制问题;如果策略 π π 也已知求解最优值函数 v v ∗ 则是预测问题。

策略迭代

策略评估

评估给定的策略 π π

在一个MDP <S,A,P,R,γ> < S , A , P , R , γ > 问题中,当策略 π π 是已知的时候,我们有:

vπ(s)=aAπ(a|s)(Ras+γsSPassvπ(s)) v π ( s ) = ∑ a ∈ A π ( a | s ) ( R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) )

在上述方程中, Pass,γ,Ras,π(a|s) P s s ′ a , γ , R s a , π ( a | s ) 均是已知的,需要求解的是 vπ(s) v π ( s ) 。对于每一个状态 s s ,我们均可以得到一个这样的方程。因此,我们就可以获得 n n 个(状态的个数)方程构成的线性方程组。当问题规模较小时,可以使用闭式解直接求得价值函数的值;当问题规模较大时,需要使用迭代的方法来求得解。此处使用高斯-赛德尔迭代算法来进行求解。

vk+1(s)=aAπ(a|s)(Ras+γsSPassvk(s))vk+1=Rπ+γPπvk v k + 1 ( s ) = ∑ a ∈ A π ( a | s ) ( R s a + γ ∑ s ′ ∈ S P s s ′ a v k ( s ′ ) ) v k + 1 = R π + γ P π v k

————————————————–伪——码————————————————————

v(1) = 0;
while 1
    for 1 : n
      v(k+1) = f(v(k));
    endfor
    if |v(k+1) - v(k)| < err
        break;
    endif
endwhile     

————————————————–伪——码————————————————————

策略改进

求解最优策略
已知当前策略的价值函数时,如何改进策略从而获得最优策略。可以使用贪婪策略获取一个比当前策略要好的策略:

πl+1(s)=argmaxaA  qπl(s,a) π l + 1 ( s ) = arg ⁡ max a ∈ A     q π l ( s , a )

针对每一个状态,求取全部可能的策略所对应的行为价值函数值,取其最大值所对应的策略为新确定的“策略”中的一部分。

策略迭代算法

策略迭代算法包括策略评估和策略改进两个步骤。在策略评估中,给定策略,通过数值迭代算法不断计算该策略下每个状态的值函数,利用该值函数和贪婪策略得到新的策略。如此循环下去,最终得到最优策略。这是一个策略收敛的过程。

————————————————–伪——码————————————————————

v(1) = 0; 
pi(1) = random();
Repeat l = 0,1,...
    寻找当前策略下最好的V(l);
    贪婪地更新策略 pi(l+1)
until pi(l+1) = pi(l)

————————————————–伪——码————————————————————

价值迭代算法

在策略评估过程中,并不需要等到策略评估收敛之后才能进行策略改进。如果在进行一次评估之后就进行策略改善,则称为值函数迭代算法。值函数迭代是动态规划算法最一般的计算框架。
最优性原理

任何最优的策略都可以被分解为两部分:
一次最优的行为 A A ∗ ;
后续状态 S S ‘ 的一个最优策略。

v(s)=maxaARas+γsSPassv(s) v ∗ ( s ) = max a ∈ A R s a + γ ∑ s ′ ∈ S P s s ′ a v ∗ ( s ′ )

vk+1(s)=maxaA(Ras+γsSPassvk(s))vk+1=maxaARa+γPavk v k + 1 ( s ) = max a ∈ A ( R s a + γ ∑ s ′ ∈ S P s s ′ a v k ( s ′ ) ) v k + 1 = max a ∈ A R a + γ P a v k

————————————————–伪——码————————————————————

v(1) = 0; 
pi(1) = random();
Repeat l = 0,1,...
     for every s do
       值函数迭代公式;    
until v(l+1) = v(l)

————————————————–伪——码————————————————————
需要注意的是在每次迭代过程,需要对状态空间进行一次扫描,同时在每个状态对动作空间进行扫描以便得到贪婪的策略。

References

[1] 动态规划
[2] 强化学习入门 第二讲 基于模型的动态规划方法

你可能感兴趣的:(机器学习)