提示:转载请注明出处,若文章无意侵犯到您的合法权益,请及时与作者联系。

基础阶段(四)——MDP的动态规划算法

前言

一、什么是动态规划?

二、策略评估和策略改进

1.策略评估(Policy Evaluation)

2.策略改进(Policy Improvement)

三、策略迭代和值迭代

1.策略迭代(Policy Iteration)

2.值迭代(Value Iteration)

总结

参考博客


前言

在之前的学习中我们已经得到了引入了价值函数,认识了贝尔曼方程,现在我们将要开始讨论如何使用优化算法来将找到最优策略。本文将要介绍的是基于模型的动态规划(DP)算法,该算法是MDP求解的最简单的一种算法,是我们继续学习更复杂算法的基础,所以我们有必要好好学习下它。


一、什么是动态规划?

动态规划(Dynamic Programming)是算法领域一种非常常见和经典的算法,简称DP,它常用来解决“多阶段决策问题”。首先我们从名字入手,“动态”的意思就是变化的状态,即将如何决策这样的抽象问题定义为一个个的数据状态,这些状态是会随着问题的规模变化而变化的;“规划”在这里更加接近的意思是表格,就是把变化的状态放到一起形成一个表格,随着问题的推进,表格会不断的更新,即动态规划使用表格来存储中间结果。

动态规划的核心思想就是利用各个阶段的递推关系,逐个确定每个阶段的最优决策,并最终得到原问题的最优决策。

使用动态规划解决问题需要具备两个条件:

  1. 一个复杂问题的最优解由数个小问题的最优解构成,可以通过寻找子问题的最优解来得到复杂问题的最优解;
  2. 子问题在复杂问题内重复出现,使得子问题的解可以被存储起来重复利用。

而我们通过将强化学习问题归纳为MDP问题,就具备了以上两个属性:

  1. Bellman方程把问题递归为求解子问题;
  2. 价值函数就相当于存储了一些可以复用子问题的解。

不过使用动态规划来解决MDP是建立在我们知道MDP环境的模型的基础上,即在已知状态行为空间、状态转换的概率矩阵和奖励等,所以它这是一种基于模型的优化算法,在实际的强化学习问题中并不常见,不过依旧具有学习的必要性。

二、策略评估和策略改进

之前我们已经得到了价值函数的写法,这表明者我们实际已经掌握了进行策略评估的方法,即给定一个策略,我们可以知道它在任意一个状态的好坏程度。

1.策略评估(Policy Evaluation)

策略评估就是评估一个策略的好坏,在已知MDP模型的情况下,我们可以通过计算任意一个策略的状态值函数,这也叫做预测(Prediction):

从上述这个式子可以看出,当前状态的价值依赖于下一个状态的价值,那么如何计算它呢?

这里我们可以使用高斯-赛德尔迭代算法来求解,简单来说就是反向迭代应用贝尔曼期望方程:

先在初始时刻k使用随机策略给所有状态的价值一个默认初始值,然后在下一时刻k+1通过下面的式子进行迭代求解,可以证明,只要迭代的次数足够多,最终一定可以得到一个收敛的解。

需要指出的是,这种反向迭代是一种同步反向迭代,简单来说就是第k+1次的s的价值全部由第k次的下一所有状态来计算。

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

与之相对应的就是异步反向迭代,即在第k次迭代使用当次迭代的状态价值来更新状态价值。

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

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

2.策略改进(Policy Improvement)

我们已经知道如何评价一个策略的好坏,那接下就可以根据策略的好坏来选择一个最好的策略。

这其实就是策略改进,如何做到策略改进呢?

每到一个状态,我们就想想需不需要改变一下策略,这样可能会使回报更大,其实就是选择一个,然后在遵循策略,我们可以使用动作价值函数来求:

然后我们选择贪婪的方式来提升我们的策略,即选择使用那个能使动作值函数最大的动作:

可以证明,进行策略改进以后,状态价值函数对应的价值也会变大。

三、策略迭代和值迭代

1.策略迭代(Policy Iteration)

说完了策略评估和策略提升,策略迭代就简单了,就是反复使用策略评估和策略提升,最后会收敛到最优策略。

其通用的算法流程如下:

2.值迭代(Value Iteration)

策略迭代有一个缺点,就是在得到最优策略前进行的每一步迭代都分为两个独立的步骤,一是策略评估,二是进行策略改进。当状态空间很大的时候策略评估的步骤将会非常耗费时间,而每次想要进行策略改进都必须要等策略评估结束才能进行。

所以我们提出了一种值迭代的方式,简单说就是直接将贝尔曼最优化方程拿来迭代计算的,这一点是不同于策略迭代的。

贝尔曼最优化方程如下:

我们先来看一下值迭代的算法流程。

我们继续看下策略迭代和值迭代的区别:

  • 在策略迭代中

    • 第一步 策略评估:一直迭代至收敛,获得准确的V(s)
    • 第二步 策略改进:根据准确的V(s),求解最好的Action
  • 在值迭代中
    • 第一步 策略评估:迭代只做一步,获得不太准确的V(s)
    • 第二步 策略改建:根据不太准确的V(s),求解最好的Action

值迭代可以看做是一种简化的策略迭代,这两种迭代方式都是属于Model-based的强化学习方法,即假设我们知道Agent采取动作后带来的Reward和新状态等,这种方式的特点就是不需要直接的参与强化学习任务,根据状态转移矩阵等信息就可以计算出最优策略,这种方式只适合于标准的已知模型的有限MDP问题。

两者如何选择呢?

一般来说,策略迭代的收敛速度更快一些,在状态空间较小时,最好选用策略迭代方法;当状态空间较大时,值迭代的计算量更小一些。


总结

本文主要讲解了基于模型的有限MDP问题的策略迭代方法,它运用的就是动态规划的算法思想,下一步我们打算参考几篇博客的实践代码来更加深入的总结有限MDP问题的策略迭代方法。

参考博客:

增强学习(三)----- MDP的动态规划解法

强化学习基础篇: 策略迭代 (Policy Iteration)

基础阶段(四)——MDP的动态规划算法相关推荐

  1. 算法基础(四)| 前缀和算法及模板详解

    ⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果.本专栏面向算法零基础但有一定的C++基础的学习者.若C+ ...

  2. 程序员的算法课(5)-动态规划算法

    前言 众所周知,递归算法时间复杂度很高为(2^n),而动态规划算法也能够解决此类问题,动态规划的算法的时间复杂度为(n^2).动态规划算法是以空间置换时间的解决方式. 一.什么是动态规划 动态规划(D ...

  3. 基础阶段(三)MDP核心——贝尔曼方程

    提示:转载请注明出处,若本文无疑侵犯到您的合法权益,请及时与作者联系. 基础阶段(三)MDP核心--贝尔曼方程 前言 一.MDP基本概念强化 1.1 状态s 1.2 动作a 1.3 状态转移概率P 1 ...

  4. 1. 通用基础算法(1.7动态规划算法/1.8模拟算法/1.9其他算法)

    7  动态规划算法 动态规划(Dynamic Programming)是求多阶段决策过程(Multistep Decision Process)最优化的一种数学方法,它将问题的整体按时间或空间的特征分 ...

  5. 数学之美系列二十四 -- 谈谈动态规划与如何设计动态规划算法

    数学之美--动态规划 今 年九月二十三日,Google.T-Mobile 和 HTC 宣布了第一款基于开源操作系统 Android 的 3G 手机,其中一个重要的功能是利用全球卫星定位系统实现全球导航 ...

  6. poj2385 基础的动态规划算法 挑战程序设计竞赛

    2018-2-5 基本的动态规划算法,不知道自己为什么WA,很是绝望,于是只是把代码贴一下? #include<iostream> #include<cstring> usin ...

  7. NOIP竞赛学习整理--动态规划算法举例P1264

    动态规划 什么是动态规划? 动态规划是解决多阶段决策最优化问题的一种思想方法.所谓"动态",指的是在问题的多阶段决策中,按某一顺序,根据每一步所选决策的不同,将随即引起状态的转移, ...

  8. 『ACM-算法-动态规划』初识DP动态规划算法

    一.多阶段决策过程的最优化问题 在现实生活中,有类活 动的过程,由于 它的特殊性,可将过程分成若干个互相阶段.在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.当阶段决策的选取不是任意确 ...

  9. 五大常用算法——动态规划算法详解及经典例题

    一.基本概念 动态规划是运筹学中用于求解决策过程中的最优化数学方法.当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法. 动态规划过程是:每次决策依赖于当前状态,又 ...

最新文章

  1. Ubuntu下如何解压缩zip,tar,tar.gz,tar.bz2文件
  2. JS_高程6.面向对象的程序设计(2)创建对象_1
  3. 参数整定临界比例度实验_控制算法手记自动整定方法初步
  4. 图像匹配与OpenCV模板匹配
  5. 负载均衡 > 用户指南 > 健康检查 > 健康检查概述
  6. 在xcode 项目 中针对 单个文件关闭或者打开ARC 开关
  7. 一个好习惯可以让自己享受一辈子
  8. mysql 标记_mysql-徽章/标记内容自用户上次看到以来已...
  9. c语言中32位整数用谁标识,int占几个字节
  10. NexT 主题自定义侧边栏图标
  11. NumPy.npy与pandas DataFrame
  12. ffmpeg 视频音频合成新视频
  13. 李煜 天涯 青砚1989
  14. 获取路由器内的ADSL上网账号和密码或者获取电脑内的ADSL上网账号和密码教程(by 星空武哥)
  15. option设置selected
  16. 魔兽世界自建服务器,魔兽世界怀旧服
  17. 浏览器野史 UserAgent列传(上)
  18. 空气源热泵控制系统解决方案
  19. Android adb 命令大全
  20. 计算机常见故障以及维修方法

热门文章

  1. 使用迅捷画图绘制流程图操作方法介绍
  2. 数据结构与算法邹永林PDF_真香系列:耗时大半个月收整全套「Java架构进阶pdf」没白费,终于可以安心备战2021了!...
  3. android开发工具箱专业版,安卓工具箱专业版下载-安卓工具箱专业版(Android Toolbox Pro) 安卓版v1.2.1-pc6手机下载...
  4. 多元函数可导为什么不一定连续
  5. 如何翻译图片上的英文?建议收藏这三个方法
  6. linux mysql 创建存储过程_linux系统下无法创建mysql存储过程问题
  7. 惠普CEO孙振耀退休感言
  8. <软件工程基础与实用教程>期末复习
  9. python mk趋势检验_求问!MK趋势检验和突变检验!
  10. Android 艺术字体设置