简要介绍 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
设计的非常简洁,各部分功能也划分的比较清晰,十分方便扩展。