空间¶
此模块实现各种空间。
空间描述数学集合,并在 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: npt.DTypeLike | None = None, seed: int | np.random.Generator | None = None)[source]¶
用于定义观测和动作空间的超类。
空间在 Gym 中被至关重要地用于定义有效动作和观测的格式。它们服务于多种目的
它们清晰地定义了如何与环境交互,即它们指定了动作应该是什么样子以及观测应该是什么样子
它们允许我们处理高度结构化的数据(例如,以
Dict
空间元素的形式),并轻松地将它们转换为可用于学习代码的扁平数组它们提供了一种从空间中随机采样元素的方法。这对探索和调试特别有用。
不同的空间可以通过容器空间 (
Tuple
和Dict
) 层次组合以构建更具表现力的空间警告
自定义观测和动作空间可以继承自
Space
类。但是,大多数用例应该由现有的空间类(例如Box
、Discrete
等)和容器类 (Tuple
&Dict
) 来涵盖。请注意,参数化概率分布(通过Space.sample()
方法)和批量函数(在gym.vector.VectorEnv
中)仅针对 gym 默认提供的空间实例定义良好。此外,某些强化学习算法的实现可能无法正确处理自定义空间。请谨慎使用自定义空间。- 参数:
shape (可选[序列[int]]) – 如果空间的元素是 numpy 数组,则应指定其形状。
dtype (可选[类型 | str]) – 如果空间的元素是 numpy 数组,则应指定其 dtype。
seed – 可选地,你可以使用此参数来为用于从空间采样的 RNG 设置种子
属性¶
- property Space.shape: tuple[int, ...] | None¶
将空间的形状作为不可变属性返回。
- property Space.dtype¶
返回此空间的数据类型。
- property Space.is_np_flattenable: bool¶
检查此空间是否可以扁平化为
gymnasium.spaces.Box
。
方法¶
每个空间都实现了以下函数
- Space.sample(mask: Any | None = None) T_cov [source]¶
从此空间随机采样一个元素。
可以是基于空间有界性的均匀或非均匀采样。
- 参数:
mask – 用于采样的掩码,预期
dtype=np.int8
,并且请参见采样实现以了解预期的形状。- 返回:
从空间中采样的动作
基础空间¶
Gymnasium 有许多基础空间,用作更复杂空间的构建块。
Box
- 支持连续(和离散)向量或矩阵,用于向量观测、图像等Discrete
- 支持具有可选起始值的单个离散数值MultiBinary
- 支持二进制值的单个值或矩阵,用于保持按钮按下状态或代理是否拥有某个物体MultiDiscrete
- 支持具有多个轴的多个离散值,用于控制器操作Text
- 支持字符串,用于传递代理消息、任务详细信息等
复合空间¶
环境空间通常需要将基础空间组合在一起,以用于向量化环境、独立代理或空间的可读性。
实用函数¶
Gymnasium 包含一些有用的实用函数,用于平铺和取消平铺空间。这对于将信息传递给神经网络可能很重要。
utils.flatdim
- 平铺空间将包含的维数utils.flatten_space
- 平铺空间,用于utils.flattened
空间实例将包含utils.flatten
- 平铺空间的实例,该实例包含在空间的平铺版本中utils.unflatten
-utils.flatten_space
函数的逆函数
向量实用函数¶
向量化环境时,需要为新的批次空间大小修改观测空间和操作空间。因此,Gymnasium 提供了一些在使用具有 Vector 环境的空间时使用的附加函数。
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
- 写入异步(多处理)环境的共享内存