动态规划(Dynamic Programming)是非常经典的求解最优解的算法思想,它要求问题满足最优子特性才可以使用。我们对马尔可夫问题的定义是一个五元组,在我们之前所讲的马尔可夫决策问题当中,是存在最优解的,我们要做的便是找到最优解。那么,如何使用动态规划的方法来解决马尔可夫决策问题呢?
假设上图每个节点上都有一个值,现在要求从顶点经过一条路径到达最底层的某一个节点,使得路径上值之和最大。按照动态规划的思想,我们很容易可以想到从底层开始,处于同一分支的两个节点比较,取较大的那个节点,循环这个过程,知道到达顶点。沿途取到的节点,就是路径上的点,此时,值之和最大。首先我们将所有的顶点的值,作为初始数据写入,然后把求解过程分成两个部分:
①选出当前节点的左右子树中较大的子树
②更新当前节点的值,也即 ,其中i表示层数,
表示第i个节点的右子树的值。
重复①②,最后得到顶点的值就是整个路径的值之和。这个问题对我们解决马尔可夫决策问题有什么启示?当我们给定策略时,在某一个状态下的行为就是可预见的。在马尔可夫决策问题中,从初始状态到目的状态会存在着多条路径,但是最优的路径只有一条或者几条,给定策略后,不一定走的那一条就是最优的,因此我们需要不断的更新策略,从而使得每次都能达到最优。那么在马尔可夫决策问题中,用什么来衡量一个策略的好坏呢?我们在之前已经说过状态值函数和动作值函数的概念,而状态值函数和动作值函数的计算恰好符合上述例子的形式,我们引入最优贝尔曼方程,
从上述动态规划思想解决问题的例子当中,我们可以看到过程①相当于找到最大的动作值函数,我们把它叫做策略改善(policy improvement),过程②相当于更新值函数,我们把它叫做策略评估(policy evaluation),将两者组合就形成了我们的策略迭代,在马尔可夫决策问题,通过策略的一次又一次的迭代,我们最终可以找到一个收敛的策略,就是最优的策略。
策略迭代的伪代码:
Algorithm policy iteration
input: 初始状态值,折扣因子γ,回报值R,转移概率矩阵P,初始策略Π
do:
repeat 0,1,2,...
calculate current V #policy evaluation
for every state s in path,let a which make the biggest value of q(s,a) as the next step action #Greedy
until all action has no change
ouput:最后的路径(path)