Gymnasium 学习笔记:gymnasium.Env 概述

简要介绍 Gymnasium 的整体架构和个模块组成。Gymnasium 提供了强化学习的环境,下面主要介绍 gymnasium.Envgymnasium.MujocoEnv 两个类。


1. gymnasium.Env

gymnasium.Env(Generic[ObsType, ActType]) 是环境的基类,其是泛型类,其可以接受 ObsTypeActType 两个类型,分别对应观测量的类型和决策/动作量的类型。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 相关的类型主要有两个: spacesSpec。其中,space 表示各类空间,比如观测空间、决策空间等;Spec 则表示***。

  • Space:
posted @ 2024-09-24 21:56  wghou09  阅读(121)  评论(0编辑  收藏  举报