关注我们,一起学习~
导读
上一次分享了十个问题认识MDP,强化学习的目的是要找到一个策略π,使得累积回报的期望最大。这次和大家分享如何在MDP下做决策以及如何得到各个状态对应不同动作下的v值。如果想详细学习的可前往“参考”中的链接。
从上一篇文章已经得到了计算状态值函数v和动作值函数q的递推式,这里可以在看公式回顾一下,
那么可以利用动态规划来计算v,q。当计算第t次的v,q时,等式右边的v,q是第t-1次计算之后保留的v,q,而等式左边是第t次计算后保留计算结果。主要可以采用两种方式来迭代计算最优的策略和值函数。这次将以简单易懂的方式帮助大家理解两种方式,并进行了代码实现,具体可见github,点击阅读原文前往。
我们可以把策略迭代和值迭代看成是一种表格型的方法,
,即设置一个状态数和动作数构成的矩阵,
表示在第i个状态执行第j个动作可以得到的期望累积回报。每次到达一个状态后就去表格里面查询。
策略迭代的想法是分两步:
第一步:策略评估遍历每一个状态,计算该状态下根据现有策略执行不同动作的累积回报的期望,重复上述计算直到收敛,即在第t次遍历完所有状态后的值函数和第t-1次的遍历完所有的状态后的值函数没有变化或者变化小于阈值。
第二步:策略提升在得到收敛的值函数后,为每一个状态,计算该状态下最大值函数对应的动作,进行保留。
重复上述两步,直到策略提升后相比于之前的策略没有变化。
以下为策略迭代的伪代码,可以参考上述的文字描述进行理解
因为策略迭代每次都需要等到每个状态对应的值函数收敛后,再进行策略的更新与提升,但有时候即使状态对应的值函数没有收敛,也可以进行策略的改善。
值迭代就是从这个想法出发提出的方法,他与策略迭代不同的是策略迭代每次都需要等到值函数收敛后在进行策略提升,值迭代是在计算该状态下不同动作的值函数后,寻找最大的值函数对应的动作,进行保留,当不同状态的值函数收敛后,保留最终留下来的动作就是最优策略。
本文对应的方法已经上传到了github上面,并对代码进行了注释,希望对大家理解策略迭代和值迭代有帮助。https://github.com/dqdallen/RLstudy,可直接点击阅读原文前往,如果有帮助的话,可以给个star哦。可以运行代码中的policy_iter()函数和value_iter()函数。
可以发现这里涉及到的两个方法都是针对转移概率P已知的情况,转移概率P已知,这样我们才能计算出期望,我们称这类方法是模型已知的方法model based。但是现实生活中还存在许多模型未知的情况,即状态转移概率P未知,只能通过环境的反馈来估计得到,这就是model free方法,这类方法我们将在下期介绍。
参考
https://zhuanlan.zhihu.com/p/25580624
https://www.bilibili.com/video/BV15a4y1j7vg?p=3