强化学习编程实践-4-基于蒙特卡洛的方法

        第3章给出了学习算法的基本思路:策略评估和策略改善。其中策略评估用到了以下的公式(4.1)

        策略改善则用了最简单的贪婪策略(4.2)

        为什么要用蒙特卡洛算法?先看公式4.1和4.2,如果状态转移概率已知,那么利用上面两式就可以得到最优策略。如果模型是未知的?式(4.1)不能再用,式(4.1)仍然可以用,因为该式与模型无关。

        如果想要利用整个框架,必须找到一种方法来替代公式(4.1)的策略评估。

---->利用本章蒙特卡洛方法和第5章的时间差分方法

4.1 蒙特卡洛算法原理

         当模型是未知的,即智能体在状态s时并不知道转移到下一个状态s'的概率。但是,智能体在状态s通过动作a与环境进行交互,环境会根据根据状态转移给出下一个时刻的状态,但环境并不会直接给出状态转移的概率。也就是说,在模型未知时,我们只能通过一系列的动作,得到一系列的状态序列。

其中为终止状态。

至此,我们已经拥有当前的策略,以及根据策略Π得到的一连串数据,缺少状态转移概率,而想要评估策略Π的值函数,该怎么做?

        既然不能使用式(4.1),那么回到值函数的定义式(4.3)

式4.3是期望的式子,其中\tau表示一次实验数据,即为

G(τ)为累积折扣回报,为产生轨迹\tau的概率分布,我们不知道值函数的概率分布,所以不能用积分公式来求值函数。但我们有数据就可以计算在策略Π的作用下,经过一次实验τ后状态St处的折扣累积回报G(τ)。

        蒙特卡洛的方法就是用策略Π做很多次实验,从而可以的带状态s_t处的很多个折扣累积回报,那么公式(4.3)的积分公式,就可以用代数平均来计算。即式(4.4)

        那有了式4.4和式4.2,就可以进行策略评估和策略改善了吗?

        还不行,因此公式4.2,我们只知道每个状态处的行为-值函数q(s,a),而不是状态值v_\pi(s)

        行为值函数的定义为式(4.5):

当模型P已知时,值函数可以由式(4.5)计算出来。但模型未知时,该怎么办?

        还是需要行为-值函数的原始定义,式(4.6):

        式(4.6)的计算用前面的蒙特卡洛进行估计。即式(4.7):

        对于无模型的强化学习算法,利用式4.7和式4.2就可以实现策略评估和策略改善。

        1.关于值函数和行为值函数

        值函数定义:

        行为值函数定义:

即在状态s_t,并采取了动作a之后折扣累积回报的期望。

        举一个简单的例子,利用策略Π产生了如下两组数据:

        那么状态值函数的计算公式为\nu (s_0)=\frac{1}{2}((r_1+\gamma r_2)+(r_2+\gamma r_T))

        行为值函数可以分为两个:q(s_0,a_1)=r_1+\gamma r_2\\ q(s_0,a_2)=r_3+\gamma r_T

        2.关于值函数的定义

        

4.2蒙特卡洛算法的代码实现

相关推荐

  1. 20. 完整蒙特卡洛强化学习算法

    2024-07-13 19:54:02       53 阅读
  2. 蒙特卡洛模拟方法 MATLAB 实现

    2024-07-13 19:54:02       47 阅读
  3. 19. 蒙特卡洛强化学习之策略控制

    2024-07-13 19:54:02       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 19:54:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 19:54:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 19:54:02       58 阅读
  4. Python语言-面向对象

    2024-07-13 19:54:02       69 阅读

热门阅读

  1. swiper结合gsap进行切换

    2024-07-13 19:54:02       19 阅读
  2. 昇思训练营打卡第二十四天(LSTM+CRF序列标注)

    2024-07-13 19:54:02       16 阅读
  3. Nginx 日志统计分析命令

    2024-07-13 19:54:02       21 阅读
  4. 天童美语:放假给孩子看什么地理纪录片

    2024-07-13 19:54:02       17 阅读
  5. Perl 语言开发(十三):网络编程

    2024-07-13 19:54:02       22 阅读
  6. 块设备驱动实现--模拟一个块设备

    2024-07-13 19:54:02       16 阅读
  7. Docker

    2024-07-13 19:54:02       15 阅读
  8. docker

    2024-07-13 19:54:02       20 阅读
  9. qint64 pendingDatagramSize() const;

    2024-07-13 19:54:02       20 阅读
  10. ThreadLocal有哪些应用场景?底层如何实现?

    2024-07-13 19:54:02       21 阅读
  11. IPython:提升Python编程效率的实用技巧与案例

    2024-07-13 19:54:02       19 阅读
  12. 赋值运算符.二

    2024-07-13 19:54:02       18 阅读