MDP(马尔可夫决策过程)

给定当前状态ts^t\boldsymbol sts,未来t+1s^{t+1}\boldsymbol st+1s和过去t−1s^{t-1}\boldsymbol st−1s是独立的。对于MDP,行动ta^{t}\boldsymbol ata的结果t+1s^{t+1}\boldsymbol st+1s仅取决于当前状态ts^t\boldsymbol sts,而和过去没关系,这种特性有时被称为“无记忆性”。
这个过程可以概括为五个部分:

  • S\mathcal SS:状态集,S={s0,s1,⋯}\mathcal S=\{\boldsymbol s_0,\boldsymbol s_1,\cdots\}S={s0​,s1​,⋯};
  • A\mathcal AA:动作集,A={a0,a1,⋯}\mathcal A=\{\boldsymbol a_0,\boldsymbol a_1,\cdots\}A={a0​,a1​,⋯},在状态为s\boldsymbol ss时执行动作a\boldsymbol aa,a=π(s)\boldsymbol a=\pi(\boldsymbol s)a=π(s);
  • Ps,aP_{\boldsymbol s,\boldsymbol a}Ps,a​:状态转换分布,∑s′∈SPs,a(s′)=1,Ps,a(s′)≥0,s′∼Ps,a\sum_{\boldsymbol s^\prime\in \mathcal S}P_{\boldsymbol s,\boldsymbol a}(\boldsymbol s^\prime)=1\ ,\ P_{\boldsymbol s,\boldsymbol a}(\boldsymbol s^\prime)\geq0\ ,\ \boldsymbol s^\prime\sim P_{\boldsymbol s,\boldsymbol a}∑s′∈S​Ps,a​(s′)=1 , Ps,a​(s′)≥0 , s′∼Ps,a​,其描述了在状态s\boldsymbol ss下执行动作a\boldsymbol aa后进入状态s′\boldsymbol s^\primes′的概率,如果这个概率为00\frac{0}{0}00​则可以通过一个默认的概率分布估计一个值;
  • Γ\GammaΓ:Γ∈[0,1)\Gamma\in[0,1)Γ∈[0,1),控制随着时间推移,奖励会越来越少,这个值是人为设置的;
  • RRR:奖励函数,进行一系列动作aj,j=0,1,⋯\boldsymbol a_j\ ,\quad j=0,1,\cdotsaj​ ,j=0,1,⋯ 的总奖励为∑jR(sj)Γj\sum_{j}R(\boldsymbol s_j)\Gamma^j∑j​R(sj​)Γj(这个上标是乘方),这个总奖励也是随机变量;依据实际应用中的需求设置奖励函数;

MDP试图求解max⁡E[∑jR(sj)Γj]\max \mathbb E\big[\sum_{j}R(\boldsymbol s_j)\Gamma^j\big]maxE[∑j​R(sj​)Γj],即奖励最大化。

贝尔曼方程

当前状态s\boldsymbol ss的价值V(s)V(s)V(s)等于当前状态的奖励R(s)R(\boldsymbol s)R(s)和在此之后可能会获得的奖励之和(递归的,而且是无穷递归),即:
V(s)=R(s)+Γ∑s′∈SPs→s′V(s′)V(\boldsymbol s)=R(\boldsymbol s)+\Gamma \sum_{\boldsymbol s^\prime\in \mathcal S}P_{\boldsymbol s\to \boldsymbol s^\prime}V(\boldsymbol s^\prime) V(s)=R(s)+Γs′∈S∑​Ps→s′​V(s′)s\boldsymbol ss状态下的奖励最大(最优)的动作为:
a∗=π∗(s)=arg max⁡a∑s′∈SPs,a(s′)V(s′)=arg max⁡aEs′∼Ps,a[V∗(s′)]\boldsymbol a^*=\pi^*(\boldsymbol s)=\argmax_\boldsymbol a\sum_{s^\prime\in \mathcal S}P_{\boldsymbol s,\boldsymbol a}(s^\prime)V(s^\prime)=\argmax_\boldsymbol a\mathbb E_{s^\prime\sim P_{\boldsymbol s,\boldsymbol a}}\big[V^*(s^\prime)\big]a∗=π∗(s)=aargmax​s′∈S∑​Ps,a​(s′)V(s′)=aargmax​Es′∼Ps,a​​[V∗(s′)] 一般ϕ(s)\phi(s)ϕ(s)(是升维用的函数)输出s\boldsymbol ss。a∗,a∈A\boldsymbol a^*,\boldsymbol a\in \mathcal Aa∗,a∈A,a∗\boldsymbol a^*a∗是从a\boldsymbol aa值中被挑选作为输出的一个。V(s)=θ⊺ϕ(s)V(\boldsymbol s)=\boldsymbol{\theta}^\intercal\phi(\boldsymbol s)V(s)=θ⊺ϕ(s)。

拟合

训练时,先随机执行动作a\boldsymbol aa,以此获取“经验”,这些“经验”包括统计出Ps,aP_{\boldsymbol s,\boldsymbol a}Ps,a​的值等。然后从下面挑一种迭代方式进行拟合:

  • 值迭代:
    令Vs=0V_s=0Vs​=0;迭代更新Vsnew=R(s)+max⁡aΓ∑s′∈SPs,a(s′)V(s′)V_s^{new}=R(s)+\max_\boldsymbol a\Gamma\sum_{s^\prime\in \mathcal S}P_{\boldsymbol s,\boldsymbol a}(s^\prime)V(s^\prime)Vsnew​=R(s)+maxa​Γ∑s′∈S​Ps,a​(s′)V(s′)直至收敛,当收敛时将有Vs≈V∗(s)V_s\approx V^*(s)Vs​≈V∗(s)。这里把VVV当值来操作了,直接操作VVV。

    function valueIteration(A\mathcal AA, S\mathcal SS){
      var VVV = zeros(S\mathcal SS.length());  /* 初始化为0 */
      do{
        foreach(var s\boldsymbol ss in S\mathcal SS){
          VsV_\boldsymbol sVs​ = R(s)+max⁡a∈AΓ∑s′∈SPs,a(s′)Vs′\displaystyle R(s)+\max_{\boldsymbol a\in \mathcal A}\Gamma\sum_{s^\prime\in \mathcal S}P_{\boldsymbol s,\boldsymbol a}(s^\prime)\ V_{s^\prime}R(s)+a∈Amax​Γs′∈S∑​Ps,a​(s′) Vs′​;
        }
      } while (isCovergenced(VVV));
      return VVV;
    }

  • 策略迭代:
    随机化π\piπ;迭代更新π(s)=arg max⁡a∑s′∈SPs,a(s′)Vπ(s′)\pi(\boldsymbol s)=\displaystyle\argmax_\boldsymbol a\sum_{s^\prime\in \mathcal S}P_{\boldsymbol s,\boldsymbol a}(s^\prime)V^\pi(s^\prime)π(s)=aargmax​s′∈S∑​Ps,a​(s′)Vπ(s′)直至收敛(这里每一步假设π\piπ就是π∗\pi^*π∗,实际上当收敛时这个假设已经基本成立)。

    function policyIteration(A\mathcal AA, S\mathcal SS){
      var π\piπ = new π(randoms(S\mathcal SS.length()));  /* 这个π\piπ是可以执行的 */
      do{
        foreach(var s\boldsymbol ss in S\mathcal SS){
          /* 声明决策函数为π\piπ时的表达式,策略评估 */
          lambda Vπ(s)V^\pi(s)Vπ(s) = R(s)+Γ∑s′∈SPs,a(s′)Vπ(s′)\displaystyle R(s)+\Gamma\sum_{s^\prime\in \mathcal S}P_{\boldsymbol s,\boldsymbol a}(s^\prime)\ V^\pi(s^\prime)R(s)+Γs′∈S∑​Ps,a​(s′) Vπ(s′);
          /* 策略改进,哪个动作可以达到价值VVV最大,哪个就是最优策略,于是求了个期望 */
          π(s)\pi(\boldsymbol s)π(s) = arg max⁡a∈A∑s′∈SPs,a(s′)Vπ(s′)\displaystyle\argmax_{\boldsymbol a\in \mathcal A}\sum_{s^\prime\in \mathcal S}P_{\boldsymbol s,\boldsymbol a}(s^\prime)\ V^\pi(s^\prime)a∈Aargmax​s′∈S∑​Ps,a​(s′) Vπ(s′);
        }
      } while (isCovergenced(π\piπ));
      return π\piπ;
    }

可以用指定最大递归层数等方式来解决无穷递归难以实现的问题。

连续的状态

S\mathcal SS可能是无限集。对于随机mmm个状态,先计算近似值yiy_iyi​,然后用监督学习让VVV逼近yyy。Es′∼Ps,a[V∗(s)]≈V∗(E[s′])=V∗(f(s,a))\mathbb E_{\boldsymbol s^\prime\sim P_{\boldsymbol s,\boldsymbol a}}[V^*(\boldsymbol s)]\approx V^*(\mathbb E[\boldsymbol s^\prime])=V^*(f(\boldsymbol s,\boldsymbol a))Es′∼Ps,a​​[V∗(s)]≈V∗(E[s′])=V∗(f(s,a)),这里s′=f(s,a)+ε\boldsymbol s^\prime=f(\boldsymbol s,\boldsymbol a)+\varepsilons′=f(s,a)+ε,ε\varepsilonε是高斯噪声,这些噪声淹没在期望中。

function valueIteration(θ\boldsymbol\thetaθ, A\mathcal AA, S全\mathcal S_全S全​, mmm){
  var S\mathcal SS = new RandomSubSet(S全\mathcal S_全S全​);  /* 随机选取mmm个状态 */
  do{
    var y\mathcal yy = new List(mmm);
    foreach(var iii in S\mathcal SS.sample(mmm)){
      var s\boldsymbol ss = Si\mathcal S_iSi​;
      var qqq = new Q();
      foreach(var a\boldsymbol aa in A\mathcal AA){
        var S′\mathcal S^\primeS′ = filter(S\mathcal SS, Ps,aP_{\boldsymbol s,\boldsymbol a}Ps,a​);  /* ∀s′∈S′,s′∼Psi,a\forall \boldsymbol s^\prime \in \mathcal S^\prime,\boldsymbol {s}^\prime\sim P_{\boldsymbol s^i,\boldsymbol a}∀s′∈S′,s′∼Psi,a​ */
        var kkk = S′\mathcal S^\primeS′.length();
        /* 故q(a)q(\boldsymbol a)q(a)是R(s)+ΓEs′∼Ps,a[V(s′)]R(\boldsymbol s)+\Gamma\mathbb E_{\boldsymbol s^\prime\sim P_{\boldsymbol s,\boldsymbol a}}\big[V(\boldsymbol s^\prime)\big]R(s)+ΓEs′∼Ps,a​​[V(s′)]的估计 */
        q(a)q(\boldsymbol a)q(a)=R(s)+Γk∑s′∈SV(s′)\displaystyle R(\boldsymbol s)+\frac{\Gamma}{k}\sum_{\boldsymbol s^\prime \in\mathcal S}V(\boldsymbol s^\prime)R(s)+kΓ​s′∈S∑​V(s′);
      }
      /* yi\mathcal y_iyi​是R(s)+Γmax⁡a∈AEs′∼Ps,a[V(s′)]R(\boldsymbol s)+\Gamma\displaystyle\max_{\boldsymbol a\in\mathcal A}\mathbb E_{\boldsymbol s^\prime\sim P_{\boldsymbol s,\boldsymbol a}}\big[V(\boldsymbol s^\prime)\big]R(s)+Γa∈Amax​Es′∼Ps,a​​[V(s′)]的近似,最后V(s)≈yiV(\boldsymbol s)\approx \mathcal y_iV(s)≈yi​ */
      yi\mathcal y_iyi​ = max⁡a∈Aq(a)\displaystyle\max_{\boldsymbol a\in\mathcal A}q(\boldsymbol a)a∈Amax​q(a);
    }
    /* 在最初的迭代算法(在离散状态下)中,我们根据V(s):=yiV(\boldsymbol s):=\mathcal y_iV(s):=yi​更新值函数VVV。再使用监督学习(线性回归)来实现V(s)≈yiV(\boldsymbol s)\approx \mathcal y_iV(s)≈yi​。 */
    θ\boldsymbol\thetaθ = arg min⁡θ12∑i=1m(θ⊺ϕ(si)−yi)\displaystyle\argmin_{\boldsymbol\theta}\frac{1}{2}\sum_{i=1}^{m}\Big(\boldsymbol\theta^\intercal\phi(\boldsymbol s_i)-\mathcal y_i\Big)θargmin​21​i=1∑m​(θ⊺ϕ(si​)−yi​);
  } while (isCovergenced(θ\boldsymbol \thetaθ));
}

MDP的决策迭代和值迭代相关推荐

  1. 策略迭代与值迭代的区别

    策略迭代与值迭代都属于强化学习里面策略求解中的动态规划方法.其区别是什么呢? 首先看一张图片: 首先看策略迭代: 1.initialization 初始化所有状态的v(s)以及π(s)(初始化为随机策 ...

  2. 【论文知识点笔记】Binarized P-Network(强化学习+保守值迭代+二值化神经网络)

    Binarized P-Network(强化学习+保守值迭代+二值化神经网络) 一.强化学习 1. 特点 2. 介绍 3. 知识点 4. 原理 4.1. 马尔科夫决策过程(MDP) 二.保守值迭代(C ...

  3. 强化学习——值迭代和策略迭代

    [强化学习]值迭代和策略迭代 在强化学习中我们经常会遇到策略迭代与值迭代,但是很多人都搞不清楚他们两个之间的区别,他们其实都是强化学习中的动态规划方法(DP). --<Reinforcement ...

  4. 最短哈密顿路matlab,SHP-VI: 一种基于最短哈密顿通路的POMDP值迭代算法

    摘要:基于试探(trial-based)的值迭代算法是求解部分可观察Markov决策过程(partially observable Markov decision process,POMDP)模型的一 ...

  5. 《Python Cookbook 3rd》笔记(4.10):序列上索引值迭代

    序列上索引值迭代 问题 你想在迭代一个序列的同时跟踪正在被处理的元素索引. 解法 内置的 enumerate() 函数可以很好的解决这个问题: >>> my_list = ['a', ...

  6. ADP(自适应动态规划)-值迭代

        看网上ADP的代码挺少的,最近写了一个ADP值迭代的代码,分享一下,接下来也准备写Actor-Critic框架的代码. 1.ADP值迭代原理     ADP值迭代和强化学习的值迭代很类似,AD ...

  7. 【图像分割】基于迭代阙值选择、最大类间差、区域生长多种算法实现图像分割含Matlab源码

    1 简介 重点讨论了图像分割法中的阈值研究法,包括迭代阙值选择.最大类间差.区域生长进行了重点分析,用Matlab进行实现并给出了实验结果. 2 部分代码 function varargout = I ...

  8. 强化学习之值迭代求解冰冻湖

    理论回顾 [1]. Bellman方程求解 [2]. 3.12 Value Iteration - Frozen Lake Problem.ipynb [3]. 强化学习中马尔科夫决策过程和贝尔曼方程 ...

  9. python 怎么算l2范数_python之彻底搞懂迭代、可迭代、迭代器的区别(一)

    一.基本概念 迭代(Iteration)是动词,是指通过遍历获取某容器内所有元素,特指遍历获取这个动作. 可迭代 (iterable)是形容词,是指某容器可被遍历获取内部所有元素,特指容器内元素可被遍 ...

最新文章

  1. 内核通信错误处理方法
  2. 成功解决on line , but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
  3. Apollo分布式配置中心在本地的安装教程
  4. Drools 5.1.1(一)
  5. Winsock网络编程快速入门
  6. 百度地图Key的设置方法
  7. 用js和jq分别实现二级联动效果
  8. 大一java怎么学好_是否应该学习第二门语言,学那个比较合适。
  9. linux deploy下载地址,Linux部署 Linux Deploy
  10. 最强抓包神器 Fiddler 手机抓包详解
  11. m基于数字锁相环DPLL的分频器simulink仿真
  12. cadence打开license manager无法开启,显示并行配置不正确
  13. 独立IP 独立访客 PV 之间的联系与区别
  14. 态密度的Delta函数公式以及范霍夫奇点
  15. phpwind 安装教程图文说明
  16. 带目录计算机专业论文,计算机专业论文格式及目录系统
  17. 微信小程序链接生成二维码weapp-qrcode
  18. java中new一个对象时具体都发生了什么?
  19. 计算机博士5篇sci,研究员送5篇SCI论文给女博士 SCI论文到底是啥
  20. Win7桌面怎么显示我的电脑图标

热门文章

  1. c++opencvtesseract-ocr截屏处理图像 文字识别
  2. 在Windows, Mac, Linux三种系统中分别获取wifi密码的方式
  3. 【英语:基础高阶_全场景覆盖表达】K10.口语主题陈述——地点类
  4. DIY狂人自制3D打印机 可打印食物
  5. 视频剪辑:如何将竖屏视频转换为横屏视频
  6. 浏览器插件就能完成接口调试,无须下载
  7. 计算机组装及故障排除技巧,计算机组装维护与故障排除基础教程(附光盘第2版)/新起点电脑教程...
  8. 痞子衡博客园主页文章图片无法显示的解决方法
  9. 配置即代码:先有鸡还是先有蛋
  10. linux 查看日志文件最后两千行中包含 字符‘ERROR’ 的前5 和后5行