Gymnasium 学习笔记:gymnasium.Env 概述
简要介绍 Gymnasium 的整体架构和个模块组成。Gymnasium 提供了强化学习的环境,下面主要介绍 gymnasium.Env 和 gymnasium.MujocoEnv 两个类。
1. gymnasium.Env
gymnasium.Env(Generic[ObsType, ActType]) 是环境的基类,其是泛型类,其可以接受 ObsType 和 ActType 两个类型,分别对应观测量的类型和决策/动作量的类型。gymnasium.Env 提供了强化学习相关的方法(运行接口),此外,为了便于用户更好地实现/理解该环境,提供了一些基础的属性(成员变量)。
1.1 方法
-
step(self, action: ActType) -> tuple[ObsType, SupportsFloat, bool, bool, dict[str, Any]]: 给定决策/动作量,运行环境,并返回 observation, reward, terminated, truncated, info。其中,action 是决策/动作量;observation 是观测量;reward 是执行给定动作后的奖励;terminated 和 truncated 是终止标志位;info 是信息,可以用于调试等。 -
reset(self, *, seed: int | None = None, options: dict[string, Any] | None = None) -> tuple[ObsType, dict[str, Any]]:将环境重置为初始状态,通常会带有一定的随机量,并返回 observation, info。其中,* 为可变参数;seed 是 Env 内部 np_random 的种子,用于生成随机值;options 用于给定一些用于重置的信息。 -
render(self) -> RenderFrame | list[RenderFrame] | None计算当前环境的渲染结果,并可返回渲染相关数据。在环境初始化的时候,会设定render_mode,那么,render()方法会依据该标志位完成相应的渲染工作。为了便于统一,在该基类中,给出了几种不同的渲染方式及其实现思路,例如:human,rgb_array,ansi,rgb_array_list等。 -
close(self)关闭该环境,并释放资源。
此外,还定义了一些私有方法,例如:
-
__str__(): 返回该环境的标识符/字符串。 -
__enter__():返回自身。 -
__exit__(self, *args: Any): 用于关闭当前环境,并调用close()方法。 -
has_wrapper_attr(self, name: str) -> bool;get_wrapper_attr(self, name: str) -> Any;set_wrapper_attr(self, name: str, value: Any):用户检索/读写当前环境及其 wrapped 中的属性。关于 wrapped 相关内容,后续再作介绍。
1.2 属性
-
unwrapped(self) -> Env[ObsType, ActType]: 获取 unwrapped 后的环境类gymnasium.Env。关于 wrapped 相关的内容,后续再作介绍。 -
np_random_seed(self) -> int: 获取该环境中随机数/种子的维度。 -
np_random(self) -> np.random.Generator获取该环境的随机数生成器。 -
np_random(self, value: np.random.Generator):设定当前环境的随机数生成器。
1.3 静态成员变量
在 gymnasium.Env 中定义了一些静态成员变量,主要的目的还是方便用户规范化定义/使用强化学习环境。具体如下:
-
metadata: dict[str, Any] = {"render_modes": []}:后续再作详细介绍。这里面好像会把所有标记位和标记位的值列举出来。 -
render_mode: str | None = None:渲染方式。 -
spec: EnvSpec | None = None这个的原理比较复杂,后续再补充。它的作用,应该是为了把定义好的类注册到这套框架里,用户可以非常方便地通过名称调用/获取相应的环境。 -
action_space: spaces.Space[ActType]:决策/动作空间。 -
observation_space: spaces.Space[ObsType]:观测空间。 -
_np_random: np.random.Generator | None = None;_np_random_seed: int | None = None随机数相关。
1.4 小结
综上,gymnasium.Env 设计的非常简洁,各部分功能也划分的比较清晰,十分方便扩展。
2. 空间 gymnasium.spaces.Space
在 Gymnasium 中,与 Env 相关的类型主要有两个: spaces 和 Spec。其中,space 表示各类空间,比如观测空间、决策空间等;Spec 则表示***。
Space:

浙公网安备 33010602011771号