1 引言
动态规划一开始我不是很理解,先看PPT上的解释:
即是一个方法,把一个复杂的问题分解成子问题,通过综合子问题的解来解决问题。我看了一个文章,说的不错,也感觉理解的差不多了,链接:https://www.sohu.com/a/153858619_466939。
动态规划问题满足两个性质:
(1)最优子结构(Optimal substructure)
(2)重叠子问题(Overlapping subproblems)
而 MDP 满足上述两个性质,贝尔曼方程进行递归分解,值函数存储并重利用子问题的解。
有两类问题,分别是预测和控制
(1)预测:输入 MDP+ 或 MRP,输出值函数。
(2)控制:输入 MDP,输出最优值函数和最优策略。
2 Policy Evaluation(策略评估)
2.1 Iterative Policy Evaluation
用来评估一个给定策略 ,使用贝尔曼期望方程迭代更新值函数v,公式如下:
3 Policy Iteration(策略迭代)
第2章讲的策略评估,但实际用的时候,策略是不可能固定的,也是在更新的,所以评估完就需要改善了。最简单的办法就是用贪心算法,即那个状态的值函数大,就100%执行对应的动作,进入这个状态。:
策略的 evaluation 和 improvement 是相互交替着进行的,如下图所示:
最终会趋近于最优的策略和值函数。
3.1 Policy Improvement
不仅可以用状态值函数,也可以用动作值函数来更新策略:
当更新停止后,状态值函数、动作值函数和策略函数均为最优。
3.2 Modified Policy Iteration
在3的基础上,加上停止条件,如值函数改变小于某个值,或者设定迭代次数。
4 Value Iteration(值迭代)
直接上公式:
我的理解其实就是进行值迭代的时候就和按照 greddy 的方法得到策略后进行策略迭代是一样的,只是策略迭代的时候策略和值都在迭代,使用的是贝尔曼期望方程,而值迭代的时候策略不迭代,始终是同样的策略,但是值迭代的时候是按照最优策略去更新的,使用的是贝尔曼最优方程。
5 Extensions to Dynamic Programming
5.1 同步 DP 算法
这里有一个总结,见下表:
5.2 异步 DP 算法
在同步更新中,需要对值函数进拷贝2次,对于所有的s。迭代的时候由如下两步组成。
5.2.1 In-Place Dynamic Programming
迭代时只有一步,只存储一份值函数,在一次迭代的过程中,值函数也是一直在更新。
5.2.2 Prioritised Sweeping
使用贝尔曼误差衡量值函数与最优的差距,每次找到贝尔曼误差最大的状态,然后更新这个状态,再计算收到影响的状态的贝尔曼误差。贝尔曼误差的定义如下:
5.2.3 Real-Time Dynamic Programming
只更新 agent 当前所处的状态,公式如下:
5.3 Full-Width and Sample Backups
5.3.1 Full-Width Backups
DP 使用 full-width backups,需要考虑所有的状态和动作,也需要知道 MDP 的 reward function 和 状态转移概率。适用于中等规模的问题(数百万状态)。
5.3.2 Sample Backups
在很多场景我们不知道状态转移概率和 reward function,可以采用抽样的方法,每次对同样的状态进行多次动作,得到多次的 reward 和 下一个状态,利用这些采样来对当前的状态进行更新。
优点:
(1)model-free:不需要实现了解 MDP。
(2)通过采样来避免了维度灾难。
(3)更新的代价是固定的,与状态的总数量无关。