Gymnasium的基本用法

news2024/10/2 14:23:52

目录

1.初始化环境

2.与环境交互

3.动作和观测空间

4.修改环境


Gymnasium是一个为所有单智能体强化学习环境提供API的项目,包括常见环境的实现:cartpole、pendulum、mountain-car、mujoco、atari等。

该API包含四个关键功能:make、reset、steprender,下面的基本用法将介绍这些功能。

1.初始化环境

在Gymnasium中可以通过make函数来初始化环境:

import gymnasium as gym
env = gym.make('CartPole-v1')

Make包含许多附加参数,用于添加包装器、为环境指定关键字等。 如果要查看可以创建的所有环境,可以使用gym .envs.registry.keys(),查看结果如下:

2.与环境交互

下图中的经典“智能体-环境循环”是Gymnasium实现的强化学习的简化表示。

这个循环使用以下代码实现(以车杆环境为例):

import gymnasium as gym
env = gym.make("CartPole-v1", render_mode="human")
observation, info = env.reset(seed=42)
for _ in range(1000):
   action = env.action_space.sample()  # this is where you would insert your policy
   observation, reward, terminated, truncated, info = env.step(action)

   if terminated or truncated:
      observation, info = env.reset()

env.close()

输出动态效果:

代码解释:

首先,使用make建一个带有附加关键字“render_mode”的环境,该关键字指定环境应该如何可视化。有关不同渲染模式的默认含义的详细信息,请参阅render

在初始化环境之后,我们重置(reset)环境以获得对环境的第一次观察。要使用特定的随机种子或选项初始化环境,请使用带有reset的seed或options参数。

接下来,智能体在环境中执行一个动作,会导致环境发生变化。因此,智能体从更新的环境中获得新的观察结果,并获得采取行动的奖励。一个这样的动作观察交换被称为时间步长(timestep)。

但是,经过一些时间步长后,环境可能结束,这称为终端状态。在gymnasium中,如果环境已经终止,这一步通过step返回。类似地,我们也可能希望环境在固定数量的时间步长后结束,在这种情况下,环境发出截断的信号。如果terminate或truncated为true,那么接下来应该调用reset来重新启动环境。

3.动作和观测空间

每一个环境通过使用env.action_spaceenv.observation_space属性指定有效动作和观测空间的形式,这有助于了解环境的预期输入和输出,因为所有有效的操作和观察都应该包含在各自的空间中。

4.修改环境

包装器是一种修改现有环境而无需直接修改底层代码的方便方法。使用包装器可以避免大量引用代码,并使环境更加模块化。包装器也可以被链接以组合它们的效果。大多数通过gymnasium.make建立的环境已经通过默认使用TimeLimit,OrderEnforcing和PassiveEnvChecker方法实现了包装。为了去包装一个环境,首先必须初始化环境,然后可以将这个环境连同参数传递给包装器的构造函数:

import gymnasium as gym
from gymnasium.wrappers import FlattenObservation
env = gym.make("CarRacing-v2")
env.observation_space.shape
###(96, 96, 3)
wrapped_env = FlattenObservation(env)
wrapped_env.observation_space.shape
###(27648,)

Gymnasium已经提供了许多常用的封装器,例如:

如果有一个已包装的环境,并且希望在所有包装器层之下获得未包装的环境(以便可以手动调用函数或更改环境的某些底层方面),则可以使用.unwrapped属性。如果环境已经是基础环境,.unwrapped属性将只返回其本身。

wrapped_env
<FlattenObservation<TimeLimit<OrderEnforcing<PassiveEnvChecker<CarRacing<CarRacing-v2>>>>>>
wrapped_env.unwrapped
<gymnasium.envs.box2d.car_racing.CarRacing object at 0x7f04efcb8850>

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

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

相关文章

对称加密操作

#常用密码技术 ##1 密码 1.1 发送者、接收者和窃听者 请想象一个Alice向Bob发送电子邮件的场景。在这个场景中&#xff0c;发出邮件的Alice称为 发送者&#xff08;sender&#xff09;&#xff0c;而收到邮件的Bob则称为 接收者&#xff08;receiver&#xff09;。 在讲解发送…

公司只有功能测试,如何进一步提升自己?

一定要帮助想上进却又迷茫的人。 最近也听到一些做功能测试的同学的交流&#xff0c;天天做手工测试&#xff0c;想提升一下自己又不知道如何提升&#xff1f;其实还是在于这些同学对自己没有一个清晰的定位&#xff0c;没有明确的目标。做为功能测试人员来讲&#xff0c;从发…

【OpenVINO】基于 OpenVINO Python API 部署 RT-DETR 模型

基于 OpenVINO Python API 部署 RT-DETR 模型 1. RT-DETR2. OpenVINO3. 环境配置3.1 模型下载环境3.2 模型部署环境 4. 模型下载与转换4.1 PaddlePaddle模型下载4.2 IR模型转换 5. Python代码实现5.1 模型推理流程实现 6. 预测结果展示7. 总结 RT-DETR是在DETR模型基础上进行改…

JS中面向对象的程序设计

面向对象&#xff08;Object-Oriented&#xff0c;OO&#xff09;的语言有一个标志&#xff0c;那就是它们都有类的概念&#xff0c;而通过类可以创建任意多个具有相同属性和方法的对象。但在ECMAScript 中没有类的概念&#xff0c;因此它的对象也与基于类的语言中的对象有所不…

异常数据检测 | Python基于奇异谱分析时间序列插补预测

文章概述 在时间序列分析中,「奇异谱分析」(「SSA」)是一种非参数谱估计方法。它结合了经典时间序列分析、多元统计、多元几何、动力系统和信号处理的元素。 “奇异谱分析”这个名称涉及协方差矩阵的奇异值分解中的特征值谱,而不是直接涉及频域分解。 SSA 可以帮助分解时…

基于多元宇宙算法的无人机航迹规划-附代码

基于多元宇宙算法的无人机航迹规划 文章目录 基于多元宇宙算法的无人机航迹规划1.多元宇宙搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用多元宇宙算法来优化无人机航迹规划。 …

宝诗单证使用手册,并使用抽象和反射做通用抽象类,节省开发成本

单证示例 1024最适合写blog了&#xff0c;别说了&#xff0c;别说了&#xff0c;建议变成法定节假日。 宝诗单证的官网&#xff1a;宝诗官网 (宝诗团队记得给我打广告费) 宝诗单证的使用步骤 使用 抽象类 将获取字段的步骤抽象出来&#xff0c;极大的省略了代码量。节省开发…

苏州德创机器视觉工程师工作怎么样?

每一家公司都有自身特点&#xff0c;同时也每一家都有自身的bug。 苏州德创作为美国康耐视Cognex产品在华东最大的代理商&#xff0c;也是康耐视外包团队。那么苏州德创有哪些业务构成&#xff0c;业务的构成也是其招聘的主要人员的方向。 设备视觉供应商&#xff0c;如卓越&…

【Linux进阶之路】进程(中)—— 进程地址空间

文章目录 一、 进程地址空间1.概念引入2.基本概念3.深入概念3.1 初识信息交互3.2 区域划分3.3 进程地址空间3.4 再识页表缺页中断进程挂起 总结 一、 进程地址空间 1.概念引入 指针指向的地址是内存中的地址吗&#xff1f;下面我们用一个实验来证明一下。 先来写程序看一下程…

2010-2021年北大中国商业银行数字化转型指数数据(第三期)

2010-2021年北大中国商业银行数字化转型指数数据&#xff08;第三期&#xff09; 1、时间&#xff1a;2010-2021年 2、指标&#xff1a;银行名称、银行类型、年份、战略数字化、业务数字化、管理数字化、数字化总指数 3、来源&#xff1a;北大数字金融研究中心 4、数据说明…

中文大语言和多模态模型测评

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.A new tool that blends your everyday work apps into one. Its the all-in-one workspace for you and your teamhttps://yaofu.notion.site/C-Eval-6b79edd91b454e3d8ea41c59ea2af873排行榜…

Appium移动端自动测试框架,如何入门?

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 1、为什么要使用Appium&#xff1f; 2、如何搭建Appium工具环境?(超详细&#xff09; 3、通过demo演示Appium的使用 4、Appium如何…

【Unity程序技巧】异步保险箱管理器

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

Servlet的两种部署方法

Servlet是实现动态页面的技术&#xff0c;是tomcat给Java提供的原生的进行web开发的api 第一个Servlet程序 写一个servlet程序&#xff0c;部署到tomcat上&#xff0c;通过浏览器访问&#xff0c;得到hello world字符串 1.创建项目 此处要创建的是maven项目 maven&#xf…

重磅官宣 | 第二届 OpenHarmony 技术峰会,邀您共启智联未来

"下一个技术未来在哪里&#xff1f;" 11 月 4 日 技术大咖齐聚北京为你解答 一场主论坛八大开源领域分论坛 探究终端操作系统十大技术挑战方向 与全球开源操作系统技术领袖、实践专家、一线导师携手 共绘 OpenHarmony 开源生态璀璨星图&#xff01; 点击链接&…

解决:无法打开Zotero数据库

在实验室电脑上面下载了Zotero和坚果云&#xff0c;一系列操作下来&#xff0c;我的笔记本上无法打开Zotero数据库了&#xff01;显示下面的界面&#xff1a; 于是网上找解决方法 1.https://www.zhihu.com/question/519740718 2.https://devpress.csdn.net/awstech/64e7311b…

Vue ref属性

Vue中的ref属性可以用来对HTML元素或者是对组件进行唯一标识。 一、设置ref属性 只需要在元素或者是组件后跟上如下语法即可&#xff1a; ref"标识名" 二、获取元素或对象 我们可以用如下方法获取我们设置ref的元素或组件&#xff1a; this.$refs.标识名 第一个输…

对批改网禁止复制粘贴问题的破解

首先进入到作文页面 右击鼠标显示弹窗选择检查 点击左上角图标 之后鼠标点击作文框&#xff0c;检查框会跳转到文本 点击鼠标右键选择文本&#xff0c;并选择编辑为HTML 在文本内写入内容点击空白处退出即可

JAVA设计模式全解(独家AI解析)

JAVA设计模式全解&#xff08;独家AI解析&#xff09; 一、JAVA介绍二、JAVA设计模式六大原则三、JAVA设计模式介绍四、JAVA设计模式详解4.1 单例模式4.1.1 懒汉式&#xff08;Lazy Initialization&#xff09;4.1.2 饿汉式&#xff08;Lazy Initialization&#xff09; 4.2 代…

Java中获取异常栈中的底层异常信息-分析Java异常栈

Java中获取异常栈中的底层异常信息-分析Java异常栈 首先&#xff0c;我们准备好一个多层异常栈堆叠的示例代码&#xff1a; public class ExceptionUtils {public static void main(String[] args) {try {buildMultiLayerExceptionStack();} catch (Exception e) {e.printSt…