空间¶
此模块实现了各种空间。
空间描述了数学集合,并在 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 (Optional[Sequence[int]]) – 如果空间的元素是 numpy 数组,则应指定其形状。
dtype (Optional[Type | 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, probability: Any | None = None) T_cov [source]¶
随机从此空间采样一个元素。
可以基于空间的有界性进行均匀或非均匀采样。
二进制掩码和概率掩码不能同时使用。
- 参数:
mask – 用于随机采样的掩码,期望
dtype=np.int8
并查看样本实现以了解期望的形状。probability – 用于根据给定的概率分布进行采样的概率掩码,期望
dtype=np.float64
并查看样本实现以了解期望的形状。
- 返回:
从此空间采样的动作
基本空间¶
Gymnasium 有许多基本空间,这些空间用作更复杂空间的构建块。
Box
- 支持连续(和离散)向量或矩阵,用于向量观测、图像等Discrete
- 支持单个离散数值,并为这些值提供可选的起始值MultiBinary
- 支持单个或二进制值矩阵,用于按住按钮或智能体是否拥有对象MultiDiscrete
- 支持具有多个轴的多个离散值,用于控制器动作Text
- 支持字符串,用于传递智能体消息、任务详细信息等
复合空间¶
通常,环境空间需要将基本空间连接在一起,以用于向量化环境、分离的智能体或空间的可读性。
实用工具函数¶
Gymnasium 包含许多有用的实用工具函数,用于展平和取消展平空间。这对于将信息传递到神经网络可能很重要。
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
- 写入异步(多进程)环境的共享内存