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

文章目录

  • 1. 回顾
  • 2. 约定
  • 3. MC强化学习环境对象的表示
  • 4.MC强化学习算法的表示
  • 5. MC方法的进一步分类

1. 回顾

第16篇给出了强化学习算法框架,随后的第17、18篇给出了该框架下如何进行策略评估以估计出Q ( s , a ) (s,a) (s,a),第19篇给出了该框架下如何进行策略控制以改进 π ( a ∣ s ) \pi(a|s) π(as),至此就可以给出MC强化学习算法的更具体的完整描述。

2. 约定

  • 为方便描述该算法,我将尽量借用python的一些语法,重在简洁,增强可读性,不拘泥于语法细节正确与否;
  • 尽量用面向对象描述,个人认为,面向对象更适宜强化学习编程;

3. MC强化学习环境对象的表示

为了描述MC强化学习所处的环境,定义一个名为Env的类,这个类包含了reset方法和step方法,分别用来返回初始状态和返回当前状态下,执行一个行为后智能体获得的立即回报和转移后的状态。下面是这个类的框架代码:

class Env:def __init__(self,nS:int,nA:int):'''初始化args:ns: 状态空间长度nA:行为空间长度'''self.nS = nSself.nA = nArandom.random.seed(0) # 初始化随机数发生器self.current_state = 0def reset(self)->Tuple[int,bool]'''重置环境的当前状态为随机状态return:状态索引号,是否为终止状态'''...self.current_state = [0,nS-1]上的一个随机整数return random.randomint(0,self.nS)def step(self,k:int)->Tuple[float,int,bool]:'''在当前状态下,执行行为空间中索引号为k的行为(有的资料称为动作),返回立即回报(有的资料称为即时奖励)、下一个状态索引号、下一个状态是否为终止状态,该方法执行后,环境的当前状态变为下一个状态索引号args:k :当前状态下执行的行为的索引号(索引号从0开始编号)return:本次行为的立即回报,下一状态索引号'''pass

上面的代码是无模型强化学习的环境的一般框架表示,这个设计其实和gymnasium扩展库的核心抽象类Env类似(它考虑更全面,比如定义了抽象方法render,用来实现基于pygame扩展库的界面的更新,可视化智能体与环境的交互过程,这个原则上我们也能够设计出来,单需要相当大的精力去做这件事,至少我没有这个精力)。因此,在无模型强化学习中,完全可以从gymnasium.Env派生出实际的具体环境类(有兴趣,可参考本专栏中的第14篇)。之所以要在这里单独设计,是希望从宏观上把握强化学习算法的一般编程架构。

4.MC强化学习算法的表示

在MC强化学习算法,是一个智能体,用类描述如下:

class Agent:def __init__(self,env:Env,pi:NDArray,epsilon:float=0.5,mcSample:NDArray=None):'''env:该智能体交互的环境pi:智能体所采取的策略初始策略,二维数组epsilon:贪婪系数,(0,1)上的数mcSample:MC轨迹采样策略,为None时将使用和pi同样的策略。'''self.env = Envself.pi = piself.epsilon = epsilonself.q = 维度为(nS,nA)的零矩阵  # q[i,j]对应Q(s_i,s_j),i,j从0开始if not mcSample:self.sample_policy = mcSampleelseself.sample_policy = pi...def train(self)->NDArray:'''采样获得完整轨迹,并训练获得优化后的策略'''while True:episode = self.get_episode() # 获取一条完整轨迹使用增量式策略评估算法根据episode估计行为值函数,用估计结果直接更新self.qpi_old = self.pi根据self.q,使用\epsilon-贪婪法求更新策略piif self.pi-pi_old<阈值:break    return self.pidef get_episode(self):...

5. MC方法的进一步分类

你可能已经注意到,获得完整轨迹时所使用的策略(采样策略)与要评估改进的策略可能一样,也可能不一样,这就把MC方法进一步分为两类:

  • on-policy MC(在线MC强化学习算法): 轨迹采样策略与待评估策略是同一策略
  • off-policy MC(离线MC强化学习算法):轨迹采样策略与待评估策略不是同一策略

这两大类算法各有什么优劣,下一篇再讨论。晚安。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java的四种访问权限修饰符

提示&#xff1a;对访问权限修饰符理解&#xff0c;最好的方法就是写代码进行测试。 Java的四种访问权限修饰符 一、四种访问权限1.对于类来说2.对于类成员来说 二、关于继承的一些规则三、总结 一、四种访问权限 Java 借助 private、protected、public与默认修饰符来控制类和…

【已解决】C语言实现多线程的同步与异步

说真的写了这篇博文时&#xff0c;才知道c语言本身不支持多线程&#xff0c;而是一些windowsapi让c语言拥有多线程的能力&#xff0c;那下面内容就以打开对话框为例&#xff0c;展现如何实现多线程的同步与异步。 文章目录 问题起源c语言多线程同步方案c语言多线程异步方案总结…

Typora使用及Markdow学习笔记1

编程如画&#xff0c;我是panda&#xff01; 最近有在学习Markdown&#xff0c;所以这次分享一下我的Markdown学习笔记 目录 前言 一、标题 二、段落 1.换行 2.分割线 三、文字显示 1.字体 2.上下标 四、列表 1.无序列表 2.有序列表 3.任务列表 五、区块 六、代…

【Linux运维】LVM和RAID学习及实践

LVM和RAID学习及实践 背景LVM简介新加硬盘的操作RAID-磁盘阵列应用场景RAID0RAID1其他结构RAID制作RAID 小结 背景 某台服务器的磁盘管理需要自己动手处理&#xff0c;找了一些资料也踩了一些坑&#xff0c;在这里记录一下&#xff0c;先介绍一下LVM和RAID这两个东西。在计算机…

【天龙八部】攻略day6

关键字&#xff1a; 灵武、寻宝要求、雁门 1】灵武选择 西凉枫林&#xff0c;锦带&#xff0c;短匕 白溪湖&#xff0c;明镜&#xff0c;双刺 竹海&#xff0c;玉钩&#xff0c;锁甲 2】楼兰寻宝需求 等级80级&#xff0c;40级前6本心法 3】雁门奖励 简单35*4元佑碎金 普…

慕尼黑工业大学最新提出!单目实时密集建图的混合隐式场方法

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 我们提出了一种新颖的方法&#xff0c;它将基于深度学习的密集SLAM与神经隐式场相结合&#xff0c;实时生成密集地图&#xff0c;而无需像以前的方法那样依赖RGB-…

数据库练习题

素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varchar(10) NO…

java大学生宿舍共享厨房系统宿舍自习室宿舍洗衣房系统源码包含技术文档

主要功能&#xff1a;学生可注册登录&#xff0c;预约自己宿舍楼栋的共享厨房和评价&#xff0c;也可以使用该楼栋的洗衣房&#xff0c;查看洗衣机吹风机的使用情况和报修&#xff0c;还可以进入该楼栋自习室打卡和评价。管理员可管理所有的学生和宿管&#xff0c;分配宿舍&…

10年果粉拯救老掉牙Mac心得(没错我是标题党)

连续两周了&#xff0c;当我不能用Mac,或者说当我闲置了近10年隔三差五的用Mac时&#xff0c;成功发现我的AppleID已经无法登录了。事情是这样的&#xff0c;当我踌躇满志地准备改一篇稿子&#xff08;潜在的稿费啊亲&#xff01;&#xff09;时&#xff0c;发现Pages竟然没有W…

2024秋招,建信金融科技非功能测试工程师

前言 今天回顾一下&#xff0c;23年10月参加的一场‘技术面试’ 部门&#xff1a;广州事业群 时间线&#xff1a; 10月12日专业笔试 10月16日性格测评 10月27日技术一面&#xff08;两男一女&#xff09; 平台&#xff1a;腾讯会议 过程 自我介绍挂科&#xff1f;怎么…

用Kimi chat识别并整理图片里面的文字

Kimi chat是有OCR功能的&#xff0c;可以识别图片中的文字。 下面这张图片是一本书的注释&#xff0c;里面提到有不少图书&#xff0c;利用Kimi chat就可以轻松完成提取其中图书书名的任务。 先拿一张图片来做实验。Kimichat的回复&#xff1a; 在您提供的文件内容中&#xf…

LLM大模型显存计算

一、目录 模型参数单位内存计算案例显卡算力推理显存计算训练显存计算huggface 官网计算 模型推理/训练 需要的显存大模型输入长度与显存的关系大模型推理 多线程与显存的关系 参考&#xff1a;https://blog.csdn.net/Johntill/article/details/132629075 二、实现 模型参数…

【RV1126 学习】SDK/ U-Boot/kernel/rootfs 编译学习

文章目录 RV1126芯片介绍rv1126 模块代码目录相关说明 SDK 包下的脚本使用build.sh 脚本使用envsetup.sh 脚本使用mkfirmware.sh 脚本使用rkflash.sh 脚本使用 U-Boot 编译和配置uboot 的配置修改编译操作 kernel 的修改编译rootfs 编译和配置buildroot 配置busybox 配置 固件打…

爬虫之牛刀小试(四):爬取B站番剧的简介

今天爬取的是b站。 如何爬取b站中的番剧呢&#xff1f; 首先我们来到番剧索引中&#xff0c;随便点开一部动漫&#xff0c;检查代码。 每个作品对应一个链接: https://www.bilibili.com/bangumi/play/ss…&#xff08;ss后面的数字称为ss号&#xff09; 发现关于动漫的信息…

【SAP ABAP】数据赋值

1. 赋值 语法格式 f2 f1. 表示将变量f1的值赋值给变量f2 输出结果如下&#xff1a; 扩展补充(带偏移量的赋值) 输出结果如下&#xff1a; 将lv_a从偏移2位开始的位置&#xff0c;取长度为3的内容345赋值给 lv_b&#xff0c;赋值覆盖lv_b从偏移4位开始的位置且长度为3的内容…

深入理解JVM虚拟机第三十七篇:如何设置和查看JVM堆内存的大小

😉😉 欢迎加入我们的学习交流群呀! ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring、Security、Docker、Grpc、消息中间件、Rpc、SpringCloud等等很多应用和源码级别高质量视频和笔记资料,你想学的我们这里都有! 🥭🥭3:…

法线变换矩阵的推导

背景 在冯氏光照模型中&#xff0c;其中的漫反射项需要我们对法向量和光线做点乘计算。 从顶点着色器中读入的法向量数据处于模型空间&#xff0c;我们需要将法向量转换到世界空间&#xff0c;然后在世界空间中让法向量和光线做运算。这里便有一个问题&#xff0c;如何将法线…

线程安全--互斥锁

文章目录 一.线程安全问题读取无效(脏)数据丢失更新线程安全的保证--操作的原子性 二.互斥锁及其实现原理互斥锁的实现原理pthread线程库提供的锁操作 三.死锁问题 一.线程安全问题 当多个线程并发地对同一个共享资源进行修改操作时,可能会引发数据读写错误(比如读取无效(脏)数…

多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测

多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GRO-CNN-BiLSTM-Attention淘金算法优化卷积神经网络-双向长短期记忆网络结合注意力机制多变量时间序列预测效果一览基…

基于随机抽样或最小二乘法 c++实现三维点云平面检测

随机抽样 std::vector<int> random(int n, int N){std::vector<int> rets;for(int i0; i<N; i){while(true){int v rand() % n;if(std::find(rets.begin(), rets.end(), v) rets.end()){rets.push_back(v);break;}}}return rets; } bool Plane(std::vector&l…