Gymnasium-1

Gymnasium入门

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

​ 该 API 包含四个关键函数:makeresetsteprender。 Gymnasium 的核心是 Env,一个高级 Python 类,代表强化学习理论中的马尔可夫决策过程 (MDP)

​ 官方文档可见:Gymnasium Documentation (farama.org)

主要函数简要介绍

gym.make 用法

gym.make 用于创建或加载一个环境,函数签名如下:

1
env = gym.make(id, **kwargs)

参数

  • id (str): 环境的标识符。即环境的名称,比如 "CartPole-v1""MountainCar-v0"
  • **kwargs: 可选的关键字参数。这些参数可以包括环境特定的配置或者设置,比如环境的渲染模式。具体可用的关键字参数依赖于所创建的环境类型

返回值

  • env (Env): 创建的环境实例。这是一个实现了Gymnasium环境接口的对象

env.reset 用法

env.reset() 用于重置环境到一个初始状态,通常在每个 episode 的开始被调用。调用 reset 方法后,环境会返回一个新的初始观测值(observation),标志着一个新的episode的开始。函数签名:

1
observation = env.reset(options=None)

参数

  • options (dict, optional): 重置环境时可以提供的额外参数。这些选项是环境特定的,允许用户以特定方式重置环境。如果不提供或为 None,则使用环境的默认重置方式

返回值

  • observation (Any): 重置后的环境的初始观测值。观测值的具体类型和格式依据环境而定

env.step(action) 用法

env.step(action) 用于在环境中执行一个动作并推进环境状态。这是模拟与环境交互的基本方式,涵盖了执行动作、接收新状态(观测值)、获得奖励、判断 episode 是否结束以及获取额外信息等几个方面。函数签名

1
observation, reward, done, truncated, info = env.step(action)

参数

  • action (Any): 要在环境中执行的动作。动作的类型和取值范围取决于具体的环境

返回值

  • observation (Any): 执行动作后的新观测值。表示环境的新状态
  • reward (float): 执行动作后获得的即时奖励。奖励的大小和正负反馈了动作的好坏,对于学习过程至关重要。
  • done (bool): 表示当前episode是否结束。如果为 True,表示达到了终止条件,需要调用 env.reset() 来开始新的episode
  • truncated (bool, optional): 在某些环境中可用,表示episode是否因时间限制或其他非自然原因被截断。这与 done 类似但原因不同
  • info (dict): 包含有关步骤的额外信息,可能包含调试或诊断信息。具体内容依赖于环境,但通常不用于学习过程,而是用于记录或分析

env.render() 用法

env.render() 用于可视化环境状态。这个方法可以让用户观察环境当前的状态,对于理解环境动态、调试算法或展示强化学习过程的结果非常有帮助。不过并非所有环境都支持渲染。函数签名:

1
env.render(mode='human')

参数

  • 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(连续空间)、MultiDiscreteMultiBinary

​ 例如,在一个游戏中,action_space 可能是一个 Discrete(5),意味着有5个可能的离散动作;在机器人控制任务中,action_space 可能是一个 Box(-1.0, 1.0, shape=(2,)),表示动作是一个二维的连续向量,每个分量的取值范围是 [1.0,1.0][-1.0,1.0]

observation_space

  • 含义: observation_space 描述了环境状态(或称为观测)的表示形式,即智能体能够接收到的关于环境状态的所有可能信息的结构和范围。它告诉智能体期望接收什么样的数据作为输入。
  • 类型: 同样是一个 gym.Space 对象,它可以是 Box(表示多维连续空间)、Discrete(单个离散值)、Tuple(组合空间)、Dict(带有键值对的空间)等

​ 例如,在 Pendulum-v1 环境中,observation_space 可能是一个 Box(-inf, inf, shape=(3,), dtype=np.float32),表示观测是一个三维的浮点数数组,通常包含角位置、角速度等物理量

一些补充:

​ 官方文档的内容可能写的不是那么仔细,我们有时候需要自己去判断 obseravtion 等返回值的结构,比如用 pendulum 为例,官方文档如下:

pendulum

但是实际上 observation 返回的是一个 Tuple,我们看看这个 Tuple 是什么:

1
2
3
4
5
6
7
8
9
10
11
12
13
state = env.reset()
for a in state:
print(type(a))
print(a)
print("-------------------------------------)

>>> OUTPUT:
class 'numpy.ndarray'
[0.78826123 0.6153407 0.8380773 ]
-------------------------------------
<class 'dict'>
{}
-------------------------------------

至于这个空字典是什么,咱不知道,咱也不敢多问