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>

相关推荐
有梦想的攻城狮几秒前
Java 11中的Collections类详解
java·windows·python·java11·collections
前端小趴菜056 分钟前
python - input()函数
python
大唐荣华13 分钟前
视觉语言模型(VLA)分类方法体系
人工智能·分类·机器人·具身智能
即兴小索奇14 分钟前
AI应用商业化加速落地 2025智能体爆发与端侧创新成增长引擎
人工智能·搜索引擎·ai·商业·ai商业洞察·即兴小索奇
程序员三藏22 分钟前
Selenium+python自动化测试:解决无法启动IE浏览器及报错问题
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
NeilNiu27 分钟前
开源AI工具Midscene.js
javascript·人工智能·开源
瓦尔登湖50838 分钟前
DAY 40 训练和测试的规范写法
python
nju_spy1 小时前
机器学习 - Kaggle项目实践(4)Toxic Comment Classification Challenge 垃圾评论分类问题
人工智能·深度学习·自然语言处理·tf-idf·南京大学·glove词嵌入·双头gru
计算机sci论文精选1 小时前
CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
人工智能·深度学习·机器学习·计算机视觉·机器人·cvpr·具身智能
站大爷IP1 小时前
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
python