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>

相关推荐
todoitbo4 分钟前
本地图库语义搜索实战:接上蓝耘元生代,让“傍晚的海边“能搜到图
人工智能·ai·api·工具实战
论文复现现场9 分钟前
企业知识库 RAG 用什么模型便宜?GLM-5.3-Flash 长文本 API 实测
python·rag·企业知识库·大模型api·glm-5.3-flash
羊羊小栈9 分钟前
基于「YOLO目标检测 + 多模态AI分析」的水稻病害智能检测分析预警系统(LangChain框架)
人工智能·yolo·目标检测·毕业设计·创业创新·大作业
IT_陈寒11 分钟前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
lisw0515 分钟前
提升社会科学领域的计算可重复性
人工智能·数字时代
HyperAI超神经19 分钟前
HyperAI 入选 36氪「East Forward 2026 出海全球化拓新企业」
人工智能·深度学习·全球化企业
9呀21 分钟前
VS Code Codex 多窗口使用与补丁记录
人工智能
七仔啊25 分钟前
安防通行人脸抓拍识别
人工智能
梦在远山后30 分钟前
从手写 Loop 到可恢复 Runtime:用 LangGraph、PostgreSQL Checkpoint 与 AG-UI 跑通中断恢复
python·langchain·agent
Yolanda_20221 小时前
8.tensorboard的使用
python