Gymnasium的基本用法

目录

1.初始化环境

2.与环境交互

3.动作和观测空间

4.修改环境


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

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

1.初始化环境

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

python 复制代码
import gymnasium as gym
env = gym.make('CartPole-v1')

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

2.与环境交互

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

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

python 复制代码
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_space 和env.observation_space属性指定有效动作和观测空间的形式,这有助于了解环境的预期输入和输出,因为所有有效的操作和观察都应该包含在各自的空间中。

4.修改环境

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

python 复制代码
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**属性将只返回其本身。

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

相关推荐
卷无止境20 分钟前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路27 分钟前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师27 分钟前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师33 分钟前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
EchoMind-Henry38 分钟前
Muse外设两条接入路,成本该怎么算
人工智能·ai
Zootopia62643 分钟前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
Y3815326621 小时前
搜索 API 延迟优化:并发数、超时与超时的真实代价
python·搜索引擎
wangqiaowq1 小时前
PII 脱敏指的是:把个人身份信息(PII)中能识别到具体个人的敏感部分,用替换、遮蔽、变形等方式处理掉,使得数据在保留可用性的同时,不再直接暴露个人身份。
python
阿部多瑞 ABU2 小时前
空能指的再生产:一个符号政治经济学的分析框架
人工智能·ai写作
风早爽太2 小时前
Python 学习笔记:SQLModel 使用外键关联查询数据
python·fastapi·sqlmodel