这是一个比较有意思的github,包含了一些简单的demo:https://github.com/oyamad/mdp,可以简单浏览下面的内容再看这些例子,可能更利于理解

Study notes of Markov desicion process

马尔可夫性质(Markov properity)

马尔可夫的性质如下图所示

马尔可夫的性质表示下一刻的状态只与当前时刻有关,其他的历史信息可以丢弃不用。
对于马尔可夫状态SSS和下一个状态s′s^{\prime}s′,两者之间的状态概率转移矩阵定义为:
Pss′=P[St+1=s′∣St=s]\mathcal{P}_{s s^{\prime}}=\mathbb{P}\left[S_{t+1}=s^{\prime} \mid S_{t}=s\right] Pss′​=P[St+1​=s′∣St​=s]
状态转移矩阵P\mathcal{P}P定义了从所有状态sss到所有下一刻状态s′s^{\prime}s′的转移概率
toP=from [P11…P1n⋮Pn1…Pnn]to \\ \mathcal{P}=\text { from }\left[\begin{array}{ccc} \mathcal{P}_{11} & \ldots & \mathcal{P}_{1 n} \\ \vdots & & \\ \mathcal{P}_{n 1} & \ldots & \mathcal{P}_{n n} \end{array}\right] toP= from ⎣⎢⎡​P11​⋮Pn1​​……​P1n​Pnn​​⎦⎥⎤​
上面式矩阵的每一行的概率之和为1。


马尔可夫过程(Markov Process)

马尔可夫过程定义如下

马尔可夫过程或者说马尔可夫链是一个<S,P><\mathcal{S}, \mathcal{P}><S,P>的一个元组,其中S\mathcal{S}S是一个有限的状态集合,P\mathcal{P}P是一个状态转移矩阵,这些都是已知的(虽然我们都不知道怎么已知),如下面这个Student Markov Chain

我们可以根据这个马尔可夫链进行episode(幕)


马尔可夫奖励过程(Markov Reward Process)

马尔可夫奖励过程定义如下

在马尔可夫过程的基础上引入奖励函数R\mathcal{R}R和折扣因子(discount factor) γ\mathcal{\gamma}γ,因此马尔可夫奖励过程是<S,P,R,γ><\mathcal{S}, \mathcal{P},\mathcal{R}, \mathcal{\gamma}><S,P,R,γ>的一个元组。
因此重新构造Student MRP


回报Return

回报是马尔可夫奖励过程重要的一个组成部分,其定义如下

GtG_{t}Gt​定义了一个episodes所产生的折扣回报。其中随着时间的推移,奖励会按一定的折扣衰减,因此γ\gammaγ决定了未来对结果影响的重要性。例如象棋更注重最后的“将军”的结果,而跑酷游戏更注重此刻不撞墙死亡。
Why discount?

在相继的时间步中回报是项目相关的,这对于强化学习的理论和算法都是很重要的
Gt≐Rt+1+γRt+2+γ2Rt+3+γ3Rt+4+⋯=Rt+1+γ(Rt+2+γRt+3+γ2Rt+4+⋯)=Rt+1+γGt+1\begin{aligned} G_{t} & \doteq R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\gamma^{3} R_{t+4}+\cdots \\ &=R_{t+1}+\gamma\left(R_{t+2}+\gamma R_{t+3}+\gamma^{2} R_{t+4}+\cdots\right) \\ &=R_{t+1}+\gamma G_{t+1} \end{aligned}Gt​​≐Rt+1​+γRt+2​+γ2Rt+3​+γ3Rt+4​+⋯=Rt+1​+γ(Rt+2​+γRt+3​+γ2Rt+4​+⋯)=Rt+1​+γGt+1​​


值函数(Value Function)

值函数的定义如下:

简单来说,值函数是状态的函数,用来评估当前智能体在给定状态下有多好,“有多好”则用未来预期的受益来定义,也就是回报的期望值。


贝尔曼方程(Bellman Equation for MRPs)


贝尔曼方程最重要的性质就是递归

上图为回溯图(backup diagram)中状态和状态之间存在奖励,通过转移矩阵可以更新当前状态的值函数。
e.g. Bellman Equation for Student MRP

Bellman Equation in Matrix Form

当状态空间较小时,可以使用矩阵运算来求解值函数


可以看出其计算复杂度为O(n3)O\left(n^{3}\right)O(n3),当状态空间增大时,其计算量会成倍增加,因此当状态空间太大时,普遍使用的是迭代的方法去求解。


马尔可夫决策过程

马尔可夫决策过程的定义如下

马尔可夫决策过程是一个伴随着决策的马尔可夫奖励过程,他所处环境中的所有状态都是满足马尔可夫性质。此外,它增加了一个有限的动作集合A\mathcal{A}A组成一个元组。此外,状态转移矩阵P\mathcal{P}P和回报函数R\mathcal{R}R的条件概率变成了动作aaa已知的情况。
e.g. Student MDP

策略(Policies)

策略的定义如下

Ps,s′π\mathcal{P}_{s, s^{\prime}}^{\pi}Ps,s′π​其实是一个联合概率,表示在执行策略π的情况下,状态从s转移到s’的概率

值函数(Value Function)


贝尔曼方程(Bellman Expection Equation)




合并二者


当我们处于class3时,我们做出一些选择,是去还是不去pub,在做出选择后的事情就是接下来将会发生什么。也就是说要看两步,第一步是执行动作的那步去往的地方,这里获得的是奖励,第二步是在动作执行后所在状态下需要计算未来的走势(所有转移概率乘以值函数的和),而这两步都是基于策略π\piπ产生的动作,因此需要乘以策略π\piπ的概率。
同样的,贝尔曼方程也有矩阵形式

最优值函数方程






从上面的方程我们可以知道,最优状态动作值函数q∗(s,a)由两部分组成,一部分是即时奖励,另一部分是所有能够到达状态s’的最优状态值函数按状态转移概率求和。


贝尔曼最优方程求解

参考资料:
David Silver强化学习公开课

Markov决策过程学习笔记和一些Markov代码实现的记录相关推荐

  1. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  2. Windows保护模式学习笔记(二)—— 代码跨段跳转

    Windows保护模式学习笔记(二)-- 代码跨段跳转 要点回顾 代码跨段跳转 执行流程 1)段选择子拆分 2)查表得到段描述符 3)权限检查 4)加载段描述符 5)代码执行 6)总结 一致代码段(共 ...

  3. JavaWeb黑马旅游网-学习笔记10【项目代码】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  4. 点云学习笔记11——VoxelNet算法+代码运行

    点云学习笔记11--VoxelNet算法+代码运行 一.算法分析 摘要 介绍 相关工作 1.2. 贡献 2.VoxelNet 2.1.特征学习网络 2.1.1 特征学习网络 二.代码复现 2.1.环境 ...

  5. Lasso线性回归学习笔记(公式与代码实现)

    目录 Lasso线性回归学习笔记(公式与代码实现) 1 为什么要在线性回归中引入正则化项(简介) 2 常见正则化项 3 损失函数图像与正则化之后的图像 3.1损失函数图像 3.2 加了 L~1~ 正则 ...

  6. Unity学习笔记--赛车的控制代码

    Unity学习笔记–赛车的控制代码 using System.Collections; using System.Collections.Generic; using UnityEngine;publ ...

  7. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  8. David Silver强化学习笔记-Lecture 2: Markov Decision Processes

    Lecture 2: Markov Decision Processes(马尔科夫决策过程) 一.Marokov Process (一)Introduction Introduction to MDP ...

  9. python基础代码事例-学习笔记:python3,代码。小例子习作(2017)

    http://www.cnblogs.com/qq21270/p/7634025.html 学习笔记:python3,一些基本语句(一些基础语法的代码,被挪到这里了) 日期和时间操作 http://b ...

最新文章

  1. 通讯速率_什么是通讯?
  2. 如何重新创建mysql数据库_重新创建数据库与数据表《 MySQL 基础 》
  3. 爬虫,如何防止被ban之策略大集合
  4. hdfs 数据迁移_基于JindoFS+OSS构建高效数据湖
  5. [改善Java代码] 推荐使用序列化实现对象的拷贝
  6. centos在文本中搜索字符串_linux(centos8):用grep命令查找文件内容
  7. DefenseCode ThunderScan 静态代码审计工具
  8. Spring Bean垃圾回收
  9. 国内外学术期刊的一些基本常识情况--A类B类--核心期刊普刊--分区等
  10. Niushop 商品分类、规格和类型之间的关系
  11. 电子邮件注册帐号大全_电子邮件
  12. 谁的盛世————读《饥饿的盛世》有感
  13. html50页面显示在线人数,50个网页常用小代码
  14. 决策规划算法相关知识之 POMDP模型
  15. Java服务器页面:JSP
  16. Rimworld Mod制作教程1 认识Mod结构
  17. Could not find a suitable set of interfaces for VIPs.
  18. 在VMware中安装虚拟机Windows server 2008
  19. OpenStack-T版——Nova计算服务
  20. 【C++】Visual Studio教程(十三) -默认键盘快捷方式

热门文章

  1. java多线程和锁,自用,长文
  2. opencv_模板匹配
  3. alitum designer 快速制作元器件封装
  4. Excel把符合条件的数据全部提取出来
  5. Layui动态渲染下拉框
  6. 介绍Java -D 命令行参数
  7. 1823. 找出游戏的获胜者
  8. Linux中正则表达式与文件格式化处理命令(awk/grep/sed)
  9. 10个小技巧,让你的谱面更专业
  10. sequoia,一个非常通用的数据库集群解决方案