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 |
|
至于这个空字典是什么,咱不知道,咱也不敢多问