基本空间¶
- class gymnasium.spaces.Box(low: SupportsFloat | NDArray[Any], high: SupportsFloat | NDArray[Any], shape: Sequence[int] | None = None, dtype: type[np.floating[Any]] | type[np.integer[Any]] = np.float32, seed: int | np.random.Generator | None = None)[source]¶
在 \(\mathbb{R}^n\) 中的(可能无界的)Box。
具体来说,Box 表示 n 个闭区间的笛卡尔积。每个区间的形式为 \([a, b]\), \((-\infty, b]\), \([a, \infty)\), 或 \((-\infty, \infty)\) 之一。
有两种常见的用例
每个维度相同的边界
>>> Box(low=-1.0, high=2.0, shape=(3, 4), dtype=np.float32) Box(-1.0, 2.0, (3, 4), float32)
每个维度独立的边界
>>> Box(low=np.array([-1.0, -2.0]), high=np.array([2.0, 4.0]), dtype=np.float32) Box([-1. -2.], [2. 4.], (2,), float32)
- 参数:
low (SupportsFloat | np.ndarray) – 区间的下界。如果为整数,则必须至少为
-2**63
。high (SupportsFloat | np.ndarray]) – 区间的上界。如果为整数,则必须最多为
2**63 - 2
。shape (Optional[Sequence[int]]) – 形状从 low 或 high np.ndarray 的形状推断得出,其中 low 和 high 标量默认为形状 (1,)
dtype – 空间元素的数据类型。如果这是整数类型,则
Box
本质上是一个离散空间。seed – (可选)您可以使用此参数为用于从空间中采样的 RNG 设定种子。
- Raises:
ValueError – 如果未提供形状信息(shape 为 None,low 为 None 且 high 为 None),则会引发 value error。
- sample(mask: None = None, probability: None = None) ndarray[Any, dtype[Any]] [source]¶
生成 Box 内的单个随机样本。
在创建 Box 的样本时,每个坐标都从根据区间形式选择的分布中(独立地)采样
\([a, b]\) : 均匀分布
\([a, \infty)\) : 平移指数分布
\((-\infty, b]\) : 平移负指数分布
\((-\infty, \infty)\) : 正态分布
- 参数:
mask – 用于从 Box 空间采样值的掩码,目前不受支持。
probability – 用于从 Box 空间采样值的概率掩码,目前不受支持。
- Returns:
从 Box 采样的值
- seed(seed: int | None = None) int | list[int] | dict[str, int] ¶
为该空间的伪随机数生成器 (PRNG) 以及(如果适用)子空间的 PRNG 设定种子。
- 参数:
seed – 空间的种子值。这对于复合空间进行了扩展,以接受多个值。有关更多详细信息,请参阅空间的文档。
- Returns:
用于所有 PRNG 的种子值,对于复合空间,这可以是值元组或字典。
- class gymnasium.spaces.Discrete(n: int | np.integer[Any], seed: int | np.random.Generator | None = None, start: int | np.integer[Any] = 0)[source]¶
一个由有限多个元素组成的空间。
此类表示整数的有限子集,更具体地说是 \(\{ a, a+1, \dots, a+n-1 \}\) 形式的集合。
示例
>>> from gymnasium.spaces import Discrete >>> observation_space = Discrete(2, seed=42) # {0, 1} >>> observation_space.sample() np.int64(0) >>> observation_space = Discrete(3, start=-1, seed=42) # {-1, 0, 1} >>> observation_space.sample() np.int64(-1) >>> observation_space.sample(mask=np.array([0,0,1], dtype=np.int8)) np.int64(1) >>> observation_space.sample(probability=np.array([0,0,1], dtype=np.float64)) np.int64(1) >>> observation_space.sample(probability=np.array([0,0.3,0.7], dtype=np.float64)) np.int64(1)
- 参数:
n (int) – 此空间的元素数。
seed – (可选)您可以使用此参数为用于从
Dict
空间采样的 RNG 设定种子。start (int) – 此空间的最小元素。
- sample(mask: MaskNDArray | None = None, probability: MaskNDArray | None = None) np.int64 [source]¶
从此空间生成单个随机样本。
如果提供了掩码,则将均匀随机选择样本,或者如果提供了概率掩码,则将根据指定的概率分布选择样本。
- 参数:
mask – 可选掩码,用于指示是否可以选择动作。预期 np.ndarray 的形状为
(n,)
,dtype 为np.int8
,其中1
表示有效动作,0
表示无效/不可行动作。如果没有可能的动作(即np.all(mask == 0)
),则将返回space.start
。probability – 可选概率掩码,描述每个动作被选中的概率。预期 np.ndarray 的形状为
(n,)
,dtype 为np.float64
,其中每个值都在范围[0, 1]
内,并且所有值的总和为 1。如果值总和不为 1,则会引发异常。
- Returns:
从此空间采样的整数
- seed(seed: int | None = None) int | list[int] | dict[str, int] ¶
为该空间的伪随机数生成器 (PRNG) 以及(如果适用)子空间的 PRNG 设定种子。
- 参数:
seed – 空间的种子值。这对于复合空间进行了扩展,以接受多个值。有关更多详细信息,请参阅空间的文档。
- Returns:
用于所有 PRNG 的种子值,对于复合空间,这可以是值元组或字典。
- class gymnasium.spaces.MultiBinary(n: NDArray[np.integer[Any]] | Sequence[int] | int, seed: int | np.random.Generator | None = None)[source]¶
n 维形状的二进制空间。
此空间的元素是在构造期间固定的形状的二进制数组。
示例
>>> from gymnasium.spaces import MultiBinary >>> observation_space = MultiBinary(5, seed=42) >>> observation_space.sample() array([1, 0, 1, 0, 1], dtype=int8) >>> observation_space = MultiBinary([3, 2], seed=42) >>> observation_space.sample() array([[1, 0], [1, 0], [1, 1]], dtype=int8)
- 参数:
n – 这将固定空间元素的形状。它可以是整数(如果空间是平坦的),也可以是某种序列(元组、列表或 np.ndarray)(如果有多个轴)。
seed – (可选)您可以使用此参数为用于从空间中采样的 RNG 设定种子。
- sample(mask: MaskNDArray | None = None, probability: MaskNDArray | None = None) NDArray[np.int8] [source]¶
从此空间生成单个随机样本。
通过独立的、公平的抛硬币(每个空间的二进制变量抛一次)来抽取样本。
- 参数:
mask – 可选的
np.ndarray
用于屏蔽样本,预期形状为space.shape
。对于mask == 0
,则样本将为0
,对于mask == 1
,则样本将为1
。对于随机样本,使用掩码值2
。预期的掩码形状是空间形状,掩码 dtype 是np.int8
。probability – 可选的
np.ndarray
用于屏蔽样本,预期形状为 space.shape,其中每个元素表示相应样本元素为 1 的概率。预期的掩码形状是空间形状,掩码 dtype 是np.float64
。
- Returns:
从空间采样的值
- seed(seed: int | None = None) int | list[int] | dict[str, int] ¶
为该空间的伪随机数生成器 (PRNG) 以及(如果适用)子空间的 PRNG 设定种子。
- 参数:
seed – 空间的种子值。这对于复合空间进行了扩展,以接受多个值。有关更多详细信息,请参阅空间的文档。
- Returns:
用于所有 PRNG 的种子值,对于复合空间,这可以是值元组或字典。
- class gymnasium.spaces.MultiDiscrete(nvec: NDArray[np.integer[Any]] | list[int], dtype: str | type[np.integer[Any]] = np.int64, seed: int | np.random.Generator | None = None, start: NDArray[np.integer[Any]] | list[int] | None = None)[source]¶
这表示任意
Discrete
空间的笛卡尔积。它可用于表示游戏控制器或键盘,其中每个键都可以表示为离散动作空间。
注意
某些环境包装器假定值 0 始终表示 NOOP 动作。
例如 Nintendo 游戏控制器 - 可以概念化为 3 个离散动作空间
方向键:离散 5 - NOOP[0]、上[1]、右[2]、下[3]、左[4] - 参数:min: 0, max: 4
按钮 A:离散 2 - NOOP[0]、按下[1] - 参数:min: 0, max: 1
按钮 B:离散 2 - NOOP[0]、按下[1] - 参数:min: 0, max: 1
它可以初始化为
MultiDiscrete([ 5, 2, 2 ])
,这样样本可能是array([3, 1, 0])
。尽管很少使用此功能,但如果
nvec
有多个轴,MultiDiscrete
空间也可能具有多个轴示例
>>> from gymnasium.spaces import MultiDiscrete >>> import numpy as np >>> observation_space = MultiDiscrete(np.array([[1, 2], [3, 4]]), seed=42) >>> observation_space.sample() array([[0, 0], [2, 2]])
- 参数:
nvec – 每个类别变量的计数向量。这通常是整数列表。但是,如果您希望空间具有多个轴,也可以传递更复杂的 numpy 数组。
dtype – 这应该是某种整数类型。
seed – (可选)您可以使用此参数为用于从空间中采样的 RNG 设定种子。
start – (可选)每个类别的元素的起始值(默认为 0)。
- sample(mask: tuple[MaskNDArray, ...] | None = None, probability: tuple[MaskNDArray, ...] | None = None) NDArray[np.integer[Any]] [source]¶
从此空间生成单个随机样本。
- 参数:
mask – 多离散的可选掩码,期望元组在每个动作的位置都有一个
np.ndarray
掩码,形状为(n,)
,其中n
是动作数,dtype=np.int8
。仅当所有动作的掩码值都为0
时,才有可能采样mask values == 1
,然后采样默认动作self.start
(最小元素)。probability – 多离散的可选概率掩码,期望元组在每个动作的位置都有一个
np.ndarray
概率掩码,形状为(n,)
,其中n
是动作数,dtype=np.float64
。只要所有值的总和为1
,则只有[0,1]
范围内的概率掩码值才有可能采样。
- Returns:
``np.ndarray`` of :meth:`Space.shape`
- seed(seed: int | None = None) int | list[int] | dict[str, int] ¶
为该空间的伪随机数生成器 (PRNG) 以及(如果适用)子空间的 PRNG 设定种子。
- 参数:
seed – 空间的种子值。这对于复合空间进行了扩展,以接受多个值。有关更多详细信息,请参阅空间的文档。
- Returns:
用于所有 PRNG 的种子值,对于复合空间,这可以是值元组或字典。
- class gymnasium.spaces.Text(max_length: int, *, min_length: int = 1, charset: frozenset[str] | str = alphanumeric, seed: int | np.random.Generator | None = None)[source]¶
一个表示由给定字符集中的字符组成的字符串的空间。
示例
>>> from gymnasium.spaces import Text >>> # {"", "B5", "hello", ...} >>> Text(5) Text(1, 5, charset=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz) >>> # {"0", "42", "0123456789", ...} >>> import string >>> Text(min_length = 1, ... max_length = 10, ... charset = string.digits) Text(1, 10, charset=0123456789)
- 参数:
min_length (int) – 最小文本长度(以字符为单位)。默认为 1 以防止空字符串。
max_length (int) – 最大文本长度(以字符为单位)。
charset (Union[set], str) – 字符集,默认为英文大小写字母加上拉丁数字。
seed – 从空间采样的种子。
- sample(mask: None | tuple[int | None, NDArray[np.int8] | None] = None, probability: None | tuple[int | None, NDArray[np.float64] | None] = None) str [source]¶
从此空间生成单个随机样本,默认情况下,长度在
min_length
和max_length
之间随机,并从charset
中采样。- 参数:
mask – 文本的长度和掩码的可选元组。长度应在
min_length
和max_length
之间。否则,将选择min_length
和max_length
之间的随机整数。对于掩码,我们期望一个 numpy 数组,其长度为传递的字符集,且dtype == np.int8
。如果字符列表掩码全为零,则无论min_length
如何,都将返回空字符串probability – 文本的长度和概率掩码的可选元组。长度应在
min_length
和max_length
之间。否则,将选择min_length
和max_length
之间的随机整数。对于概率掩码,我们期望一个 numpy 数组,其长度为传递的字符集,且dtype == np.float64
。概率掩码的总和应为 1,否则将引发异常。
- Returns:
从此空间采样的字符串
- seed(seed: int | None = None) int | list[int] | dict[str, int] ¶
为该空间的伪随机数生成器 (PRNG) 以及(如果适用)子空间的 PRNG 设定种子。
- 参数:
seed – 空间的种子值。这对于复合空间进行了扩展,以接受多个值。有关更多详细信息,请参阅空间的文档。
- Returns:
用于所有 PRNG 的种子值,对于复合空间,这可以是值元组或字典。