为什么可以使用动态规划解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 , γ > 问题中,当策略 π π 是已知的时候,我们有:
在上述方程中, Pass′,γ,Ras,π(a|s) P s s ′ a , γ , R s a , π ( a | s ) 均是已知的,需要求解的是 vπ(s) v π ( s ) 。对于每一个状态 s s ,我们均可以得到一个这样的方程。因此,我们就可以获得 n n 个(状态的个数)方程构成的线性方程组。当问题规模较小时,可以使用闭式解直接求得价值函数的值;当问题规模较大时,需要使用迭代的方法来求得解。此处使用高斯-赛德尔迭代算法来进行求解。
————————————————–伪——码————————————————————
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
————————————————–伪——码————————————————————
求解最优策略
已知当前策略的价值函数时,如何改进策略从而获得最优策略。可以使用贪婪策略获取一个比当前策略要好的策略:
针对每一个状态,求取全部可能的策略所对应的行为价值函数值,取其最大值所对应的策略为新确定的“策略”中的一部分。
策略迭代算法包括策略评估和策略改进两个步骤。在策略评估中,给定策略,通过数值迭代算法不断计算该策略下每个状态的值函数,利用该值函数和贪婪策略得到新的策略。如此循环下去,最终得到最优策略。这是一个策略收敛的过程。
————————————————–伪——码————————————————————
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)=maxa∈ARas+γ∑s′∈SPass′v∗(s′) v ∗ ( s ) = max a ∈ A R s a + γ ∑ s ′ ∈ S P s s ′ a v ∗ ( s ′ )
————————————————–伪——码————————————————————
v(1) = 0;
pi(1) = random();
Repeat l = 0,1,...
for every s do
值函数迭代公式;
until v(l+1) = v(l)
————————————————–伪——码————————————————————
需要注意的是在每次迭代过程,需要对状态空间进行一次扫描,同时在每个状态对动作空间进行扫描以便得到贪婪的策略。
[1] 动态规划
[2] 强化学习入门 第二讲 基于模型的动态规划方法