空间¶
此模块实现了各种空间。
空间描述了数学集合,并在 Gym 中用于指定有效的动作和观察。每个 Gym 环境都必须具有属性 action_space
和 observation_space
。例如,如果您的环境中可以执行三种可能的动作 (0,1,2),并且观察是二维单位立方体中的向量,则环境代码可能包含以下两行:
self.action_space = spaces.Discrete(3)
self.observation_space = spaces.Box(0, 1, shape=(2,))
所有空间都继承自 Space
超类。
- class gymnasium.spaces.Space(shape: Sequence[int] | None = None, dtype: type[Any] | dtype[Any] | _SupportsDType[dtype[Any]] | tuple[Any, Any] | list[Any] | _DTypeDict | str | None = None, seed: int | Generator | None = None)[source]¶
用于定义观察和动作空间的超类。
空间在 Gym 中被关键地用于定义有效动作和观察的格式。它们有多种用途:
它们清楚地定义了如何与环境交互,即指定了动作和观察的预期形式
它们使我们能够处理高度结构化的数据(例如,以
Dict
空间元素的形式),并轻松地将其转换为可用于学习代码的扁平数组它们提供了一种采样随机元素的方法。这对于探索和调试特别有用。
不同的空间可以通过容器空间(
Tuple
和Dict
)进行分层组合,以构建更具表现力的空间警告
自定义观察和动作空间可以继承自
Space
类。然而,大多数用例应该由现有空间类(例如Box
、Discrete
等)和容器类(Tuple
和Dict
)覆盖。请注意,参数化概率分布(通过Space.sample()
方法)和批处理函数(在gym.vector.VectorEnv
中)仅对 Gym 默认提供的空间实例有明确定义。此外,一些强化学习算法的实现可能无法正确处理自定义空间。请谨慎使用自定义空间。- 参数:
shape (可选[序列[int]]) – 如果空间元素是 numpy 数组,则应指定其形状。
dtype (可选[类型 | 字符串]) – 如果空间元素是 numpy 数组,则应指定其数据类型。
seed – 可选地,您可以使用此参数为用于从空间采样的 RNG 设置种子
属性¶
- 属性 Space.shape: tuple[int, ...] | None¶
以不可变属性的形式返回空间的形状。
- 属性 Space.dtype¶
返回此空间的数据类型。
- 属性 Space.is_np_flattenable: bool¶
检查此空间是否可以展平为
gymnasium.spaces.Box
。
方法¶
每个空间都实现了以下函数
- Space.sample(mask: Any | None = None, probability: Any | None = None) T_cov ¶
从此空间随机采样一个元素。
可以是均匀采样或非均匀采样,具体取决于空间的有界性。
二进制掩码和概率掩码不能同时使用。
- 参数:
mask – 用于随机采样的掩码,预期
dtype=np.int8
,有关预期形状,请参阅示例实现。probability – 用于根据给定概率分布进行采样的概率掩码,预期
dtype=np.float64
,有关预期形状,请参阅示例实现。
- 返回:
从空间采样的动作
- Space.contains(x: Any) bool ¶
返回布尔值,指示 x 是否为此空间的有效成员,等同于
sample in space
。
- Space.seed(seed: int | None = None) int | list[int] | dict[str, int] ¶
为此空间(如果适用,还为其子空间)的伪随机数生成器 (PRNG) 设置种子。
- 参数:
seed – 空间的种子值。对于复合空间,此参数会扩展以接受多个值。有关更多详细信息,请参阅空间的文档。
- 返回:
用于所有 PRNG 的种子值;对于复合空间,这可以是值元组或字典。
- Space.to_jsonable(sample_n: Sequence[T_cov]) list[Any] ¶
将此空间的一批样本转换为可 JSON 化的数据类型。
- Space.from_jsonable(sample_n: list[Any]) list[T_cov] ¶
将可 JSON 化的数据类型转换为此空间的一批样本。
基本空间¶
Gymnasium 包含许多基本空间,这些空间被用作构建更复杂空间的积木。
Box
- 支持连续(和离散)向量或矩阵,用于向量观察、图像等Discrete
- 支持单个离散值,并可选地指定值的起始点MultiBinary
- 支持单个或矩阵的二进制值,用于按住按钮或智能体是否拥有物体MultiDiscrete
- 支持多轴的多个离散值,用于控制器动作Text
- 支持字符串,用于传递智能体消息、任务详情等
复合空间¶
通常,环境空间需要将基本空间连接起来,以实现向量化环境、分离智能体或提高空间的可读性。
工具函数¶
Gymnasium 包含许多有用的工具函数,用于展平(flattening)和非展平(unflattening)空间。这对于将信息传递给神经网络可能很重要。
utils.flatdim
- 展平空间将包含的维度数量utils.flatten_space
- 展平一个空间,其中将包含utils.flattened
空间实例utils.flatten
- 展平一个空间实例,该实例包含在空间的展平版本中utils.unflatten
-utils.flatten_space
函数的反向操作
向量工具函数¶
在向量化环境时,需要修改观察和动作空间以适应新的批处理空间大小。因此,Gymnasium 提供了许多在使用空间与向量环境时使用的附加函数。
vector.utils.batch_space
- 将一个空间转换为等效的n
个用户的空间vector.utils.concatenate
- 将一个空间的样本连接到一个预生成的空间中vector.utils.iterate
- 遍历批处理空间的样本vector.utils.create_empty_array
- 为一个空间创建空样本(通常与concatenate
结合使用)vector.utils.create_shared_memory
- 为异步(多进程)环境创建共享内存vector.utils.read_from_shared_memory
- 读取异步(多进程)环境的共享内存vector.utils.write_to_shared_memory
- 写入异步(多进程)环境的共享内存