Gymnasium的基本用法

目录

1.初始化环境

2.与环境交互

3.动作和观测空间

4.修改环境


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

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

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_spaceenv.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>

相关推荐
YJlio2 分钟前
4月14日热点新闻解读:从金融数据到平台治理,一文看懂今天最值得关注的6个信号
java·前端·人工智能·金融·eclipse·电脑·eixv3
weixin_408717773 分钟前
实现鼠标滚轮在容器滚动到底部后无缝传递至页面的平滑过渡
jvm·数据库·python
薛定猫AI3 分钟前
【技术干货】OpenAI Codex 重大更新:从代码补全工具到全流程智能开发平台
运维·人工智能
gc_22993 分钟前
学习python使用Ultralytics的YOLO26进行旋转框检测的基本用法
python·ultralytics·yolo26·旋转框检测
格林威5 分钟前
工业相机“心跳”监测脚本(C# 版) 支持海康 / Basler / 堡盟工业相机
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
404号扳手5 分钟前
03大模型核心原理
人工智能·llm
沪漂阿龙在努力8 分钟前
深度拆解LangChain Chains与LCEL:从Runnable到生产级AI工作流
人工智能
浩安8 分钟前
【Python网络编程】02_面向对象的三大特征
python
m0_514520579 分钟前
如何分析Data Guard的网络瓶颈_Bandwidth与Redo传输速率的计算公式
jvm·数据库·python
weixin_4585801210 分钟前
如何查找SQL中未使用JOIN的数据行_利用IS NULL配合LEFT JOIN
jvm·数据库·python