上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值。(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的增强学习)。

那么如何求解最优策略呢?基本的解法有三种:

动态规划法(dynamic programming methods)

蒙特卡罗方法(Monte Carlo methods)

时间差分法(temporal difference)。

动态规划法是其中最基本的算法,也是理解后续算法的基础,因此本文先介绍动态规划法求解MDP。本文假设拥有MDP模型M=(S, A, Psa, R)的完整知识。

1. 贝尔曼方程(Bellman Equation)

上一篇我们得到了Vπ和Qπ的表达式,并且写成了如下的形式

在动态规划中,上面两个式子称为贝尔曼方程,它表明了当前状态的值函数与下个状态的值函数的关系。

优化目标π*可以表示为:

分别记最优策略π*对应的状态值函数和行为值函数为V*(s)和Q*(s, a),由它们的定义容易知道,V*(s)和Q*(s, a)存在如下关系:

状态值函数和行为值函数分别满足如下贝尔曼最优性方程(Bellman optimality equation):

有了贝尔曼方程和贝尔曼最优性方程后,我们就可以用动态规划来求解MDP了。

2. 策略估计(Policy Evaluation)

首先,对于任意的策略π,我们如何计算其状态值函数Vπ(s)?这个问题被称作策略估计,

前面讲到对于确定性策略,值函数

现在扩展到更一般的情况,如果在某策略π下,π(s)对应的动作a有多种可能,每种可能记为π(a|s),则状态值函数定义如下:

一般采用迭代的方法更新状态值函数,首先将所有Vπ(s)的初值赋为0(其他状态也可以赋为任意值,不过吸收态必须赋0值),然后采用如下式子更新所有状态s的值函数(第k+1次迭代):

对于Vπ(s),有两种更新方法,

第一种:将第k次迭代的各状态值函数[Vk(s1),Vk(s2),Vk(s3)..]保存在一个数组中,第k+1次的Vπ(s)采用第k次的Vπ(s')来计算,并将结果保存在第二个数组中。

第二种:即仅用一个数组保存各状态值函数,每当得到一个新值,就将旧的值覆盖,形如[Vk+1(s1),Vk+1(s2),Vk(s3)..],第k+1次迭代的Vπ(s)可能用到第k+1次迭代得到的Vπ(s')。

通常情况下,我们采用第二种方法更新数据,因为它及时利用了新值,能更快的收敛。整个策略估计算法如下图所示:

3. 策略改进(Policy Improvement)

上一节中进行策略估计的目的,是为了寻找更好的策略,这个过程叫做策略改进(Policy Improvement)。

假设我们有一个策略π,并且确定了它的所有状态的值函数Vπ(s)。对于某状态s,有动作a0=π(s)。 那么如果我们在状态s下不采用动作a0,而采用其他动作a≠π(s)是否会更好呢?要判断好坏就需要我们计算行为值函数Qπ(s,a),公式我们前面已经说过:

评判标准是:Qπ(s,a)是否大于Vπ(s)。如果Qπ(s,a)> Vπ(s),那么至少说明新策略【仅在状态s下采用动作a,其他状态下遵循策略π】比旧策略【所有状态下都遵循策略π】整体上要更好。

策略改进定理(policy improvement theorem):π和π'是两个确定的策略,如果对所有状态s∈S有Qπ(s,π'(s))≥Vπ(s),那么策略π'必然比策略π更好,或者至少一样好。其中的不等式等价于Vπ'(s)≥Vπ(s)。

有了在某状态s上改进策略的方法和策略改进定理,我们可以遍历所有状态和所有可能的动作a,并采用贪心策略来获得新策略π'。即对所有的s∈S, 采用下式更新策略:

这种采用关于值函数的贪心策略获得新策略,改进旧策略的过程,称为策略改进(Policy Improvement)

最后大家可能会疑惑,贪心策略能否收敛到最优策略,这里我们假设策略改进过程已经收敛,即对所有的s,Vπ'(s)等于Vπ(s)。那么根据上面的策略更新的式子,可以知道对于所有的s∈S下式成立:

可是这个式子正好就是我们在1中所说的Bellman optimality equation,所以π和π'都必然是最优策略!神奇吧!

4. 策略迭代(Policy Iteration)

策略迭代算法就是上面两节内容的组合。假设我们有一个策略π,那么我们可以用policy evaluation获得它的值函数Vπ(s),然后根据policy improvement得到更好的策略π',接着再计算Vπ'(s),再获得更好的策略π'',整个过程顺序进行如下图所示:

完整的算法如下图所示:

5. 值迭代(Value Iteration)

从上面我们可以看到,策略迭代算法包含了一个策略估计的过程,而策略估计则需要扫描(sweep)所有的状态若干次,其中巨大的计算量直接影响了策略迭代算法的效率。我们必须要获得精确的Vπ值吗?事实上不必,有几种方法可以在保证算法收敛的情况下,缩短策略估计的过程。

值迭代(Value Iteration)就是其中非常重要的一种。它的每次迭代只扫描(sweep)了每个状态一次。值迭代的每次迭代对所有的s∈S按照下列公式更新:

即在值迭代的第k+1次迭代时,直接将能获得的最大的Vπ(s)值赋给Vk+1。值迭代算法直接用可能转到的下一步s'的V(s')来更新当前的V(s),算法甚至都不需要存储策略π。而实际上这种更新方式同时却改变了策略πk和V(s)的估值Vk(s)。 直到算法结束后,我们再通过V值来获得最优的π。

此外,值迭代还可以理解成是采用迭代的方式逼近1中所示的贝尔曼最优方程。

值迭代完整的算法如图所示:

由上面的算法可知,值迭代的最后一步,我们才根据V*(s),获得最优策略π*。

一般来说值迭代和策略迭代都需要经过无数轮迭代才能精确的收敛到V*和π*, 而实践中,我们往往设定一个阈值来作为中止条件,即当Vπ(s)值改变很小时,我们就近似的认为获得了最优策略。在折扣回报的有限MDP(discounted finite MDPs)中,进过有限次迭代,两种算法都能收敛到最优策略π*。

至此我们了解了马尔可夫决策过程的动态规划解法,动态规划的优点在于它有很好的数学上的解释,但是动态要求一个完全已知的环境模型,这在现实中是很难做到的。另外,当状态数量较大的时候,动态规划法的效率也将是一个问题。下一篇介绍蒙特卡罗方法,它的优点在于不需要完整的环境模型。

PS: 如果什么没讲清楚的地方,欢迎提出,我会补充说明...

参考资料:

[1] R.Sutton et al. Reinforcement learning: An introduction , 1998

[2] 徐昕,增强学习及其在移动机器人导航与控制中的应用研究[D],2002

MDP动态规划解法(三)相关推荐

  1. 背包问题动态规划解法

    一:题目: 背包问题 问题:两个数组 一个重量数组W 一个 价值数组 V 一个背包 bag  ,返回不超过背包容量返回最大价值 二:暴力解法 思路:暴力遍历,思路就是递归的时候 按 选或者不选 当前 ...

  2. 5. 最长回文子串——暴力法---动态规划解法---扩展中心法

    暴力法 动态规划解法 class Solution {public String longestPalindrome(String s) {if (s == null) return null;cha ...

  3. leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)

    题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...

  4. 买卖股票类问题动态规划解法(Leetcode题解-Python语言)

    在 Leetcode 中,关于买卖股票的问题共有6道,而这些题目是可以用相同的思维进行求解的,强烈推荐这篇总结,写得非常到位. 股票类问题的动态规划分三步走,1.首先明确方程的含义, T[i][k][ ...

  5. leetcode 53. 最大子序和 动态规划解法、贪心法以及二分法

    题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子 ...

  6. matlab多种分配方案_基于MATLAB的水资源优化分配问题动态规划解法

    基于 MATLAB 的水资源优化分配问题动态规划解法 摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了 动态规划方法分析.针对具体问题采用逆序解法的表格法进行了计 算,然后用 matlab 编 ...

  7. CCF201612-1 中间数(解法三)(100分)(废除!!!)

    试题编号: 201612-1 试题名称: 中间数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一个整数序列a1, a2, -, an中,如果存在某个数,大于它的整数数量等 ...

  8. Python数据结构20:动态规划:找零兑换问题的动态规划解法并显示使用的硬币组合

    在我们使用递归算法时,可能会出现规模庞大的重复计算,用一个中间表记录每个计算过的最优解法,就可以避免大量的重复计算.中间结果记录可以很好解决找零兑换问题.实际上,这种方法还不能称为动态规划,而是叫做& ...

  9. python 动态规划 旅行商问题_旅行商问题动态规划解法(python版)

    2019年华为实习生第二场笔试第二题是个旅行商问题,虽然只有5个点可以import itertools产生排列遍历5!=120情况求解(当然也可以写个递归自己生成排列),还是查了下动态规划的解法. 原 ...

最新文章

  1. jquery selector 使用方法
  2. C#阻塞队列BlockingCollection
  3. Java虚拟机内存溢出
  4. HADOOP__PIG安装与配置
  5. (转)Enterprise Architect 7.0入门教程
  6. php如何用session做查询条件,php如何使用session?
  7. Cookie禁用了,Session还能用吗?
  8. OC中property的有关属性
  9. Java 日期格式工具类
  10. MySQL的select语法
  11. SVM(三),支持向量机,线性不可分和核函数
  12. html小游戏社区,h5小游戏源码(h5养成社区源码)
  13. 博士申请 | 新加坡国立大学Xinchao Wang老师招收图神经网络方向博士/博后
  14. 1、mysql创建事件
  15. Elk-Metricbeat配置Tomcat的日志分析 (Metricbeat-part3)
  16. 华为OD机试 - 勾股数元组
  17. 易语言多线程任务分配让不同的线程账号执行不同的多个任务
  18. python+selenium+pycharm自动化测试环境搭建
  19. 「CG原画插画教程」初学者如何练习人体动态结构?
  20. HBase、Phoenix

热门文章

  1. [SHOI2012]魔法树 链剖
  2. 2017.10.26 星际贸易 思考记录
  3. java 形参 实参_java 形参是父类实参是子类的问题
  4. 【英语学习】【科学】【Glencoe Science】【B】From Bacteria to Plants 目录及术语表
  5. 【英语学习】【WOTD】imbroglio 释义/词源/示例
  6. 命名参数_告别编码5分钟,命名2小时!史上最全的Java命名规范参考!
  7. redis的zset的底层实现_Redis底层数据结构之 zset
  8. java 摸拟qq消息提示_java 仿qq消息提示框
  9. python中print(chr(65))_Python语句print(chr(97))的运行结果是( )。_学小易找答案
  10. Unity3D性能优化