Gymnasium-1
Gymnasium入门
Gymnasium 是一个为所有单代理强化学习环境提供 API 的项目,并包括常见环境的实现:cartpole、pendulum、mountain-car、mujoco、atari 等
该 API 包含四个关键函数:make、reset、step 和 render。 Gymnasium 的核心是 Env,一个高级 Python 类,代表强化学习理论中的马尔可夫决策过程 (MDP)
官方文档可见:Gymnasium Documentation (farama.org)
主要函数简要介绍
gym.make 用法
gym.make 用于创建或加载一个环境,函数签名如下:
1 | |
参数
id(str): 环境的标识符。即环境的名称,比如"CartPole-v1"、"MountainCar-v0"等**kwargs: 可选的关键字参数。这些参数可以包括环境特定的配置或者设置,比如环境的渲染模式。具体可用的关键字参数依赖于所创建的环境类型
返回值
env(Env): 创建的环境实例。这是一个实现了Gymnasium环境接口的对象
env.reset 用法
env.reset() 用于重置环境到一个初始状态,通常在每个 episode 的开始被调用。调用 reset 方法后,环境会返回一个新的初始观测值(observation),标志着一个新的episode的开始。函数签名:
1 | |
参数
options(dict, optional): 重置环境时可以提供的额外参数。这些选项是环境特定的,允许用户以特定方式重置环境。如果不提供或为None,则使用环境的默认重置方式
返回值
observation(Any): 重置后的环境的初始观测值。观测值的具体类型和格式依据环境而定
env.step(action) 用法
env.step(action) 用于在环境中执行一个动作并推进环境状态。这是模拟与环境交互的基本方式,涵盖了执行动作、接收新状态(观测值)、获得奖励、判断 episode 是否结束以及获取额外信息等几个方面。函数签名
1 | |
参数
action(Any): 要在环境中执行的动作。动作的类型和取值范围取决于具体的环境
返回值
observation(Any): 执行动作后的新观测值。表示环境的新状态reward(float): 执行动作后获得的即时奖励。奖励的大小和正负反馈了动作的好坏,对于学习过程至关重要。done(bool): 表示当前episode是否结束。如果为True,表示达到了终止条件,需要调用env.reset()来开始新的episodetruncated(bool, optional): 在某些环境中可用,表示episode是否因时间限制或其他非自然原因被截断。这与done类似但原因不同info(dict): 包含有关步骤的额外信息,可能包含调试或诊断信息。具体内容依赖于环境,但通常不用于学习过程,而是用于记录或分析
env.render() 用法
env.render() 用于可视化环境状态。这个方法可以让用户观察环境当前的状态,对于理解环境动态、调试算法或展示强化学习过程的结果非常有帮助。不过并非所有环境都支持渲染。函数签名:
1 | |
参数
mode(str, optional): 指定渲染的方式。最常见的是'human',意味着以人类可读的形式(通常是图形界面)显示环境状态。某些环境还可能支持'rgb_array'模式来返回环境状态的RGB图像数组,或者'ansi'模式用于控制台输出。默认通常是'human'。
返回值
- 根据
mode参数的不同,返回值也有所不同。如果是'human'模式,通常没有直接的返回值;如果是'rgb_array'模式,则会返回表示当前帧的numpy数组。
官方文档的一些说明
查阅官方文档的环境说明:
进入Gymnasium Documentation (farama.org) 直接用环境名称搜索即可
官方文档的一些名词解释:
action_space
- 含义:
action_space描述了智能体可以采取的所有可能动作的集合,以及这些动作的类型和取值范围。它定义了智能体能够向环境发送哪些控制信号。 - 类型: 通常,
action_space是一个gym.Space对象的实例,具体可以是Discrete(离散空间)、Box(连续空间)、MultiDiscrete、MultiBinary等
例如,在一个游戏中,action_space 可能是一个 Discrete(5),意味着有5个可能的离散动作;在机器人控制任务中,action_space 可能是一个 Box(-1.0, 1.0, shape=(2,)),表示动作是一个二维的连续向量,每个分量的取值范围是
observation_space
- 含义:
observation_space描述了环境状态(或称为观测)的表示形式,即智能体能够接收到的关于环境状态的所有可能信息的结构和范围。它告诉智能体期望接收什么样的数据作为输入。 - 类型: 同样是一个
gym.Space对象,它可以是Box(表示多维连续空间)、Discrete(单个离散值)、Tuple(组合空间)、Dict(带有键值对的空间)等
例如,在 Pendulum-v1 环境中,observation_space 可能是一个 Box(-inf, inf, shape=(3,), dtype=np.float32),表示观测是一个三维的浮点数数组,通常包含角位置、角速度等物理量
一些补充:
官方文档的内容可能写的不是那么仔细,我们有时候需要自己去判断 obseravtion 等返回值的结构,比如用 pendulum 为例,官方文档如下:

但是实际上 observation 返回的是一个 Tuple,我们看看这个 Tuple 是什么:
1 | |
至于这个空字典是什么,咱不知道,咱也不敢多问