19. 蒙特卡洛强化学习之策略控制

news/2024/5/18 22:17:03 标签: 强化学习, 蒙特卡洛

文章目录

1. MC学习中的策略控制是什么

根据策略评估阶段得到的策略 π \pi π下的行为值函数 Q ( s , a ) Q(s,a) Q(s,a)使用贪心算法改进策略的过程.

2. 基于贪心算法的策略改进的基本描述

  • 不考虑数值计算误差的贪心算法
    { a m a x = arg max ⁡ a ∈ A ( Q ( s , a ) ) π ( a ∣ s ) = { 1 a = a m a x 0 a ≠ a m a x s ∈ S \begin{cases} a_{max} = \argmax_{a\in A}\left(Q(s,a) \right)\\ \pi(a|s) = \begin{cases} 1\qquad a=a_{max}\\ 0\qquad a\ne a_{max} \end{cases} \end{cases}\qquad s\in S amax=argmaxaA(Q(s,a))π(as)={1a=amax0a=amaxsS
    不考虑数值计算误差的贪心算法,求得的最优行为只有1个( a m a x a_{max} amax),实际中,可能有两个不同的a的值,都使得Q(s,a)取最大值,甚至由于计算误差,原本有两个最优a,最后变成了一个,这可能会导致最优动作的选取不全面。
  • 考虑数值计算误差的贪心算法
    • 这一算法考虑了数值计算误差
    • 设定一个较小的数值计算误差阈值 ϵ > 0 \epsilon>0 ϵ>0
    • 则: a = b ⇔ ∣ a − b ∣ < ϵ a=b\Leftrightarrow |a-b|<\epsilon a=bab<ϵ
    • 则实际编程中按如下表达式更新策略
      { Q m a x ( s ) = max ⁡ a ∈ A Q ( s , a ) A m a x ( s ) = { a ∣ a ∈ A 且 Q m a x − Q ( s , a ) < ϵ } π ∗ ( a ∣ s ) = { 1 / l e n g t h ( A m a x ( s ) ) a ∈ A m a x ( s ) 0 a ∉ A m a x ( s ) s ∈ S \begin{cases} Q_{max}(s)&=\max_{a\in A} Q(s,a)\\ A_{max}(s)&=\{a|a\in A且Q_{max}-Q(s,a)<\epsilon \}\\ \pi^*(a|s)&=\begin{cases} 1/\mathrm{length}\left(A_{max}(s)\right) \quad a\in A_{max}(s)\\ 0 \qquad a\notin A_{max}(s) \end{cases} \end{cases}\qquad s\in S Qmax(s)Amax(s)π(as)=maxaAQ(s,a)={aaAQmaxQ(s,a)<ϵ}={1/length(Amax(s))aAmax(s)0a/Amax(s)sS

3.MC学习中完全使用贪心算法可行否

不可行!!!

为什么?

  • Q(s,a)是利用交互生成的完整轨迹更新自身的,理论上,只有当全部完整轨迹覆盖所有可能的状态行为对(s,a),Q(s,a)的估计值才为真实值,实际中不可能满足这一条件。
    • 例如:我们要根据12月的哪一天(相当于31个状态),从桂林市挑选性价比最高的米粉店吃米粉(相当于从行为空间中选取最优行为),理论上,我们应该每年12月份每一天,选择1个桂林米粉店吃米粉,对31天的每一天、每一个米粉店都试吃足够的次数,才能使我们对12月份的任何一天,哪家米粉店的性价比最高有尽可能接近于真实值的评估。这在实际中可行吗?
  • 既然Q(s,a)估计不是真实值,完全根据贪心算法选取的行为,就可能不是最优行为,换句话说,在某个状态s下,完全采用贪心算法就可能让我们漏掉能带来更高回报的行为,而那些行为在完全贪心算法的控制下,被选取的概率为0!
    • 例如:我记得有一套央视举办的闯关节目,这类节目通常设计了几道关卡,每当选手通过一道关卡,就能获得相应的奖金,而且越靠后的关卡,对应的奖金越高(有类似指数的关系)。这种节目的趣味性在于,当选手过了某一关卡后,面临选择:选择退出,能确保赢得过去累积获得的奖金,选择继续闯关,有可能闯关不成功而使自己空手而归,也有可能使奖金翻倍,如果是你,将如何选择?显然我们的困惑在于,没法估计我们的能力是否能应对下一关的挑战。这是一个概率问题。

4. 如何改进完全贪心算法

使用 ε − 贪心算法 ‾ \underline{\varepsilon-贪心算法} ε贪心算法

5. 何谓 ε − \varepsilon- ε贪心算法

5.1 基本思想

  • 相对于完全贪心算法,我把它称为 部分贪心算法 ‾ \underline{部分贪心算法} 部分贪心算法。完全贪心算法是完全利用过去的经验(过去经历的没有覆盖所有可能情况的完整轨迹),每次都选择自认为能带来最大累积回报的行为,这是纯经验论者的操作;而 ϵ − 贪心算法 \epsilon-贪心算法 ϵ贪心算法,即考虑过去经验(对既往经验的利用),又没有完全排除那些被纯经验论者无视的行为(对未充分了解的(状态-行为)对的探索)
  • ϵ − 贪心算法 \epsilon-贪心算法 ϵ贪心算法体现了强化学习的基本思想,即:利用与探索的平衡。在状态s下,给定 ϵ ∈ ( 0 , 1 ) \epsilon\in(0,1) ϵ(0,1),先让所有行为都有被选择的基准概率 ϵ n A \frac{\epsilon}{nA} nAϵ(nA位行为空间长度),在此基础上,把那些用完全贪心算法选取的最优行为的选取概率增加一点,使得所有行为被选取的概率总和仍然为1,显然, ϵ \epsilon ϵ大小反映了探索的比重,该值越大,则探索的比重越大,反之越小。其选择也是一种技巧,比如,考虑到随着经历的完整轨迹数的增多,经验的价值就越大,相应的 ϵ \epsilon ϵ应该逐渐减小(即越来越不需要过多地探索新情况)。

5.2 基于 ϵ − 贪心算法 \epsilon-贪心算法 ϵ贪心算法的策略控制的形式化描述

  • 输入 ϵ \epsilon ϵ,策略 π ( a ∣ s ) \pi(a|s) π(as),行为值函数 Q ( s , a ) Q(s,a) Q(s,a)
  • 输出:更新后的策略 π ( a ∣ s ) \pi(a|s) π(as)
  • 过程
    f o r s i n S : a m a x = arg max ⁡ a ∈ A ( Q ( s , a ) ) f o r a i n A : π ( a ∣ s ) = ϵ n A i f a = a m a x : π ( a ∣ s ) = π ( a ∣ s ) + ( 1 − ϵ ) \begin{align*} &for \quad s \quad in \quad S:\\ &\qquad a_{max}=\argmax_{a\in A}(Q(s,a))\\ &\qquad for \quad a \quad in \quad A:\\ &\qquad\qquad \pi(a|s)=\frac{\epsilon}{nA}\\ &\qquad\qquad if \quad a=a_{max}:\\ &\qquad\qquad\qquad \pi(a|s)=\pi(a|s)+(1-\epsilon) \end{align*} forsinS:amax=aAargmax(Q(s,a))forainA:π(as)=nAϵifa=amax:π(as)=π(as)+(1ϵ)
    注:这里采用了不考虑计算误差的贪心策略,也可以考虑使用带计算误差的贪心策略。具体请读者实践。

5.3 ϵ − 贪心法 \epsilon-贪心法 ϵ贪心法能保证策略收敛到最优否

理论上已经证明:
使用该策略可以改进任意一个给定的策略,并且在评估这个策略的同时能改进它,不断趋近最优策略

关于这个证明,有兴趣的朋友,可参考邹伟强化学习一书的第4章(P53)


http://www.niftyadmin.cn/n/5322533.html

相关文章

PHP 完整表单实例

在用户点击提交按钮后&#xff0c;为确保字段值是否输入正确&#xff0c;我们在HTML的input元素中插添加PHP脚本&#xff0c; 各字段名为: name, email, 和 website。 在备注中的 textarea 字段中&#xff0c;我们将脚本放于 <textarea> 和 </textarea> 标签之间。…

【开源】基于JAVA的康复中心管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

在 Flutter 中创建圆角图像和圆形图像有多少种方法?

使用 Container 、 ClipRRect 、 CircleAvatar 、 Card 和 PhysicalModel 实现具有视觉吸引力的图像效果。 在 Flutter 应用 UI 设计中&#xff0c;圆形图像是常见的视觉元素。本博客探讨了使用不同技术实现圆形图像效果的各种方法。无论是使用网络图像、本地文件还是资源&…

C语言文件读写细节

w 代表 write 写入 r 代表 read 读取 a 代表 append 追加 字符代表的是 读写权限 w, w, wb, wb 都会新建一个文件&#xff0c;所以文件从头开始读或写 a, a, ab, ab 都是在文件尾处写数据&#xff0c;添加数据&#xff0c;不删除原有数据 但是在读文件时&#xff0c;不是从文…

C51--摇头测距小车

摇头测距小车——舵机和超声波封装 #include "reg52.h"#include "HC04.h" #include "Delay.h" #include "sg90.h" #include "motor.h"#define MIDDLE 0 #define LEFT 1 #define RIGHT 2void main() {char dir;double di…

Linux Debian12使用VSCode和Python搭建flask开发环境

一、安装VSCode 在Linux Debian12系统上安装VSCode教程可以参考网上相关教程。 二、安装Python 打开VSCode&#xff0c;安装python和python扩展包&#xff0c;如下图所示&#xff1a; 三、创建Python虚拟环境 1.新建文件夹testFlask 2.用vscode打开文件夹testFlask&#xf…

Day25 235二叉搜索树的公共祖先 701二叉搜索树插入 450二叉搜索树删除

235 二叉搜索树的最近公共祖先 如果利用普通二叉树的方法&#xff0c;就是利用后序遍历回溯从低向上搜索&#xff0c;遇到左子树有p&#xff0c;右子树有q&#xff0c;那么当前结点就是最近公共祖先。本题是二叉搜索树&#xff0c;所以说是有序的&#xff0c;一定能够简化上面…

Web前端 ---- 【Vue3】vue3中的组件传值(props、自定义事件、全局事件总线)

目录 前言 props 自定义事件 全局事件总线 安装第三方库mitt 封装event-bus.js文件 使用全局事件总线 清除全局事件绑定 前言 本文介绍在vue3中的组件传值&#xff0c;props、自定义事件以及全局事件总线。相较于vue2中&#xff0c;略有变化。关于vue2中的组件传值看这篇…