DI-engine强化学习入门(九)环境包裹器(Env Wrapper)

在强化学习中,环境(Environment)是智能体(Agent)进行学习和互动的场所,它定义了状态空间、动作空间以及奖励机制。Env Wrapper(环境包装器)提供了一种方便的机制来增强或修改原始环境的功能,而不需要改变环境本身的代码。

Env Wrapper主要有以下的几个特性
1.预处理和归一化:

  • 为了提高学习效率和稳定性,很多时候需要对环境的状态进行预处理,例如归一化处理,使得所有的输入特征都处在同一量级上,以便于智能体更好地学习。
  • Env Wrapper可以在不修改原始环境代码的情况下,添加这些预处理步骤。

2.奖励形状改变(Reward Shaping):

  • 有时原始环境的奖励信号太稀疏或不利于学习,Env Wrapper可以用来修改奖励信号,使之更加符合特定学习任务的需求。

3.动作和状态空间修改:

  • 如果需要对动作空间进行离散化或者对状态空间进行降维,Env Wrapper允许用户实现这样的变换。
  • 这对于将复杂环境简化以适应低容量智能体或算法尤其有用。

4.实验一致性和复现性:

  • 当研究者想要分享他们的实验设置或与其他研究者进行比较时,使用Env Wrapper可以确保所有人都在相同的环境变种上进行实验。

5.代码的模块化和复用:

  • 通过Env Wrappers,可以创建可复用的模块,对不同的环境应用相同的处理逻辑。
  • 这样可以避免代码冗余,提高开发效率。

6.易于维护和扩展:

  • 当需要更新环境处理逻辑时,只需修改对应的Env Wrapper,而不需要重新触碰环境本身的实现。

       例如,若要为一个环境添加噪声处理或者状态的标准化处理,可以创建一个Env Wrapper来实         现这些功能。这样,当需要在不同的环境中实施同样的噪声或标准化处理时,只需要将环境

       通 过这个Env Wrapper传递即可,而不需要为每个环境单独编写处理代码。

DI-engine 提供了大量已经定义好的、通用的 Env Wrapper
DI-engine 继承和扩展了 OpenAI Gym 的设计,提供了一系列通用的 Env Wrapper,以便用户可以轻松地根据自己的需求来修改环境。以下是这些 Env Wrapper 的简介:

 1.NoopResetEnv:

  • 在环境启动时随机执行一定数量的无操作(no-op)步骤,然后再重置环境。这有助于提供更多样化的初始状态。

2.MaxAndSkipEnv:

  • 在连续的几个帧中执行相同的动作,并从中选取两个连续帧的最大值作为代表,这样做可以减少环境内的非必要变化,有助于稳定训练。

3.WarpFrame:

  • 将输入的图像帧缩放到固定的大小(例如 84x84)并转换为灰度图像,这是许多深度强化学习工作中的常见做法。

4.ScaledFloatFrame:

  • 将图像帧的像素值从整数转换为浮点数,并将其标准化到 0 到 1 的范围内。

5.ClipRewardEnv:

  • 将奖励剪裁为 -1, 0, 或 +1,根据奖励的正负性。这样做有利于限制梯度更新的规模,有时能够增加训练的稳定性。

6.FrameStack:

  • 将连续的几个帧堆叠在一起作为网络的输入,以提供给智能体关于动作的时间连续性信息。

7.ObsTransposeWrapper:

  • 重新排列观测数组的维度,这在处理图像输入时特别有用,如将图像数据从 HxWxC 调整为 CxHxW。

8.RunningMeanStd:

  • 计算和更新环境观测值的均值和标准差,通常用于环境状态的归一化处理。

9.ObsNormEnv:

  • 使用实时更新的均值和标准差归一化观测值,以保持输入值的分布稳定。

10.RewardNormEnv:

  • 使用实时更新的均值和标准差归一化奖励值,帮助稳定训练过程。

11.RamWrapper:

  • 将环境的 RAM 状态转换为类似图像的格式,这对于处理非图像的原始状态表示特别有用。

12.EpisodicLifeEnv:

  • 当智能体“死亡”时,即使游戏没有真正结束,也会结束当前的 episode。这可以让智能体更快地学习有关失败的信息。

13.FireResetEnv:

  • 在某些游戏中,环境重置后需要执行一个 “fire” 动作来开始游戏。这个 Wrapper 自动处理这个动作。

二、如何使用 Env Wrapper
下一个问题是我们如何给环境包裹上 Env Wrapper。最简单的一种方法就是手动地显式对环境进行包裹:

from ding.envs.env_wrappers.env_wrappers import NoopResetWrapperenv = gym.make(env_id)  # 'PongNoFrameskip-v4'env = NoopResetWrapper(env, noop_max = 30)env = MaxAndSkipWrapper(env, skip = 4)

我们也可以尝试在gym中使用FrameStack环境包裹器

import gymfrom gym.wrappers import FrameStack# 创建并包裹环境env_id = 'CartPole-v1'env = gym.make(env_id)env = FrameStack(env, num_stack=4)# 使用包裹后的环境运行一些episodefor episode in range(2):    obs = env.reset()    done = False    step = 0    while not done:        action = env.action_space.sample()  # 随机选择动作        obs, reward, done, info = env.step(action)        print(f"Episode: {episode}, Step: {step}, Observation Shape: {obs.shape}, Reward: {reward}, Done: {done}")        step += 1    print(f"Episode {episode} finished after {step} steps.")# 关闭环境env.close()

以下是在 Python 中非显式的使用 Env Wrapper 的具体示例: 

点击DI-engine强化学习入门(九)环境包裹器(Env Wrapper) - 古月居可查看全文

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

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

相关文章

很好的Baidu Comate,使我的编码效率飞起!

文章目录 背景及简单介绍Baidu Comate安装功能演示总结 🎁写在前面: 观众老爷们好呀,这里是前端小刘不怕牛牛频道,今天牛牛在论坛发现了一款便捷实用的智能编程助手,就是百度推出的Baidu Comate。下面是Baidu Comate评…

MT3034 算术招亲

跟MT3033新的表达式类似&#xff0c;只多了一个括号合法性的判断 #include <bits/stdc.h> using namespace std; const int N 40; bool tag[N]; bool is_op(char c) {return c || c - || c * || c / || c ^; } int priority(char op) { // 优先级排序if (op ||…

vector、heap数组、stack数组访问性能验证

测试目的 本次测试旨在比较不同数据结构&#xff08;vector、数组&#xff09;以及不同访问方法&#xff08;[]、at()、offset&#xff09;在性能上的差异&#xff0c;从而为开发者提供在特定情境下做出最佳选择的依据。 测试代码 测试网址:Quick C Benchmarks 使用GCC9.5 …

微服务项目实战-黑马头条(十三):持续集成

文章目录 项目部署_持续集成1 今日内容介绍1.1 什么是持续集成1.2 持续集成的好处1.3 今日内容 2 软件开发模式2.1 软件开发生命周期2.2 软件开发瀑布模型2.3 软件的敏捷开发 3 Jenkins安装配置3.1 Jenkins介绍3.2 Jenkins环境搭建3.2.1 Jenkins安装配置3.2.2 Jenkins插件安装3…

中仕公考:非应届生能考军队文职吗?

军队文职考试的招生对象主要针对普通高等学校的毕业生以及社会人才&#xff0c;报考条件中并没有限制考生必须是应届毕业生。所以&#xff0c;往届毕业生也是具备报考资格的&#xff0c;只需其满足相关的申请条件即可。 报考人员可大致分为三类&#xff1a;普通高校毕业生、社…

Linux中云盘/磁盘,爆满处理方式

1&#xff1a;du和df命令查看磁盘大小不一致 以下是阿里云服务器云盘使用率 运行 du -sh / 大小为20g 我的服务器大小为40g 按道理说这个云盘使用率应该是百分之五十 而运行 df -h / 这个命令是跟这个云盘使用率差不多的。 1.1分析原因 我安装了mysql&#xff0c;nginx…

微信投票小程序源码系统 独家支持礼物投票 道具投票盈利能力超强 带完整的安装代码包以及搭建教程

微信小程序的快速发展&#xff0c;各类应用场景层出不穷&#xff0c;其中投票小程序因其广泛的适用性和互动性&#xff0c;成为了许多企业和个人推广、活动的首选工具。小编给大家分享一款微信投票小程序源码系统&#xff0c;该系统以其独特的礼物投票和道具投票功能&#xff0…

公众号流量主的收益怎么样?

公众号之前是一个私域平台&#xff0c;没有粉丝基本是没有推荐的&#xff0c;所以之前入门的门槛还是很高的&#xff0c;但是今年公众号和视频号改变了推流的机制&#xff0c;现在发的文章会进入到流量池中&#xff0c;进入到公域流量&#xff0c;所以发布的优质文章会大爆的&a…

大模型驱动的新一代 BI 平台,Sugar BI 开启智慧决策新模式

本文整理自 2024 年 4 月 16 日的 2024 百度 Create 大会上的《大模型驱动的新一代 BI 平台如何开启智慧决策》分享。 全文包括了可视化 BI 分析技术架构、智能图表推荐策略与规则设计、Sugar Bot 智能问数的技术实现流程&#xff0c;以及目前的场景应用等。 1 Sugar BI 产…

C#语言基础

一、复杂数据类型 1. 枚举 1.1 基本概念 1.1.1 枚举是什么 枚举是一个被命名的整型常量的集合&#xff0c;一般用它来表示状态、类型等等 1.1.2 申明枚举和申明枚举变量 申明枚举和申明枚举变量是两个概念 申明枚举&#xff1a;相当于是创建一个自定义的枚举类型 申明枚…

python爬虫(二) 之 42号网汽车文章爬虫

python爬虫&#xff08;二&#xff09; 之 42号网汽车文章爬虫 今天在咸鱼上有个买家找我一个42号网汽车文章的爬虫&#xff0c;目前需求已经做完了&#xff0c;现在将这部分代码开源&#xff0c;供大家参考。爬虫能够抓取到网站上所有文章的数据&#xff0c;大概一小时左右就…

一款功能强大的网络安全综合工具-PotatoTool

一、 简介 这款工具是一款功能强大的网络安全综合工具&#xff0c;旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能&#xff0c;包括解密、分析、扫描、溯源等&#xff0c;为用户提供了便捷的操作界面和丰富的功能选择。 二…

「YashanDB迁移体验官」Oracle向YashanDB迁移的丝滑体验

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

一起深度学习

CIFAR-10 卷积神经网络 下载数据集构建网络运行测试 下载数据集 batchsz 32cifar_train datasets.CIFAR10(data,trainTrue,transformtorchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()]),downloadTrue)cifar_train …

数据结构-线性表-应用题-2.2-6

从有序顺序表中删除所有其值重复的元素&#xff0c;使表中的元素的值均不同 有序顺序表&#xff0c;值相同的元素一定在连续的位置上&#xff0c;初始时将第一个元素是为非重复的有序表&#xff0c;之后依次判断后面的元素是否与前面的非重复表的最后一个元素相同&#xff0c;…

【北京迅为】《iTOP-3588开发板快速烧写手册》-第3章 烧录完整升级固件update.img

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

STM32控制DS1302时钟模块获取实时时间

欢迎入群共同学习交流 时间记录&#xff1a;2024/4/30 一、知识点 &#xff08;1&#xff09;读写数据时序&#xff08;伪SPI协议&#xff09; 1.1 读写时序默认电平均为SCLK线低电平&#xff0c;CE线低电平 1.2 写数据&#xff0c;CE线拉高为高电平&#xff0c;开始传输数据…

Flutter笔记:美工设计.导出视频到RIVE

Flutter笔记 美工设计.导出视频到RIVE - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28…

华为eNSP中型企业局域网网络规划设计(上)

敲半天一个闪退全™给我干没了呜呜呜&#xff0c;eNSP&#xff0c;wcnm&#xff01;wcnm&#xff01;wcnm&#xff01; →b站传送门&#xff0c;感谢大佬← →华为eNSP中型企业局域网网络规划设计&#xff08;下&#xff09;← →拓扑图传送门&#xff0c;可以自己配置着玩←…

Vue从入门到实战Day01

一、Vue快速上手 1. vue概念 概念&#xff1a;Vue是一个用于 构建用户界面的 渐进式 框架 构建用户界面&#xff1a;基于数据动态渲染页面渐进式&#xff1a;循序渐进的学习框架&#xff1a;一套完整的项目解决方案&#xff0c;提升开发效率 优点&#xff1a;大大提升开发效…