动态编程(Dynamic Programming, DP)
来源:互联网 发布:安装postgis linux篇 编辑:程序博客网 时间:2024/06/15 06:29
【上一篇 有限马尔可夫决策过程(Finite Markov Decision Processes)】【下一篇 蒙特卡洛方法 (Monte Carlo Method) 】
之前介绍的知识都是基础,从这次开始才真正开始介绍增强学习的解法方法。
动态编程(Dynamic Programming, DP)这个词大家肯定都不陌生,在解决算法编程问题当中经常会用到,它的主要思想就是将一个复杂的问题分解成多个子问题,将子问题的解结合在一起就构成了原问题的解,它常常适合于解决具有如下两种属性的问题:
(1)优化的子结构:优化解常常可以分解成子问题;
(2)子问题有重叠:即子问题总是重复出现,该子问题的解可以保存下来重复利用。
而马尔可夫决策过程就完美的符合这两点特性:
(1)需要求解的 Bellman 方程提供了递归的分解形式;
(2)Value function 需要存储和重用之前的解。
因此可以说 DP 可以用于求解马尔可夫模型的优化策略,但是由于 DP 问题需要环境的动态模型,并且计算复杂度较高,因此在增强学习中的应用并不广泛,但是它的思想在理论上还是非常重要的,是以后学习的一个理论基础。DP 算法的主要思想就是利用 value function 来寻找好的策略。
这里先介绍一下后文中的符号表示(与之前的相同):
假设状态集合、行为集合和 reward 集合分别为
之前介绍过,若找到了满足 Bellman 优化方程的优化值函数
1、Policy Evaluation
在DP中,
从最后一个式子中可以看出,
当
为了从
迭代算法常用的停止准则是检测最大的状态变化量,整个过程的伪代码如下:
2、Policy Improvement
第一节中是计算每个 policy 的 value function,它的目的当然是为了找到更好的 policies,假设我们已经有了某个
通常将这种理论称为是
那么规则
回到我们之前的问题,我们如何对规则
从中可以看出,只要改善一个状态的行为就可以对规则进行改进,自然而然地肯定会想,如果把所有的状态都改成可能的最好行为,那得到的规则会很好,也就是这样的一个
其中
这种贪婪的规则依据
假设这个贪婪的规则
这个方程与 Bellman 优化方程相同,因此
3、Policy Iteration
第一节介绍的是规则评价,第二节是规则改善,这里要将前两节结合到一起,从而得到下面的过程:
其中,
4、Value Iteration
Policy iteration 的一个缺点是在每次迭代中都要进行 policy evaluation,这个过程是非常耗时的,事实上该过程是可以缩短的,并且不会影响收敛,其中一种重要的方法就是
对任意的
算法的伪代码如下:
所有的 truncated policy iteration 算法都可以视为是
5、Asynchronous Dynamic Programming 异步的动态编程
DP方法的一个主要缺点就是在于它需要遍历 MDP 过程的整个状态集合,即需要对 state set 进行 sweep,当状态集合很大时,一次 sweep 就需要耗费巨大。
Asynchronous DP 方法替代了 iterative DP 算法,不是对状态集的系统地 sweep,这些方法会以任何顺序备份状态的 values,一些状态的 values 还有可能在其他状态第一次备份之前就备份了很多次。但为了正确收敛,异步算法必须继续备份所有的 values,异步 DP 在选择状态方面提供了很大的自由度。
6、Generalized Policy Iteration
广义的 policy iteration 可以用下图来表示:
Policy iteration 其实就是由两个连续的交互过程构成的:policy evaluation 和 policy improvement,在异步 DP 方法中,这两个过程是交错的。
这里用 Generalized Policy Iteration (GPI)来代表这种一般化的思想,几乎所有的增强学习方法都可以描述为 GPI。在 GPI 中,policy evaluation 和 policy improvement 既是竞争的也是合作的。
参考文献
[1] Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto
[2] UCL Course on RL
- 动态编程(Dynamic Programming, DP)
- 动态规划、贪心、dynamic programming(DP)
- 动态规划(Dynamic Programming, DP)简介
- Dynamic Programming(DP动态规划)
- Dynamic Programming(DP)---动态规划
- 动态规划(DP dynamic programming)
- DP 动态规划Dynamic programming
- 五大常用算法 ----DP 动态规划(Dynamic Programming)
- Dynamic Programming 动态规划问题 DP
- 动态规划(Dynamic Programming)
- 动态规划(Dynamic Programming)
- 动态规划(dynamic programming)
- 动态规划(Dynamic Programming)
- 杭电DP题目(dynamic programming)
- DP (Dynamic programming)
- DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一
- Floyd-Warshall算法DP(动态规划(dynamic programming))流程详解
- 算法导论-动态规划(dynamic programming)
- jquery排序 sort()
- HDU-1532-Drainage Ditches
- git 相关记录
- poj-2236 Wireless Network (并查集)
- JVM内存模型与性能调优
- 动态编程(Dynamic Programming, DP)
- CentOS下LNMP环境搭建
- GPUImage头文件功能定义
- group by 比 distinct 快
- 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题
- runtime运行时在实际开发中的运用
- 数据类型长度范围
- ServletContext接口
- L2-015. 互评成绩