空间工具¶
- gymnasium.spaces.utils.flatten_space(space: Space[Any]) Box | Dict | Sequence | Tuple | Graph [源代码]¶
- gymnasium.spaces.utils.flatten_space(space: Box) Box
- gymnasium.spaces.utils.flatten_space(space: Discrete | MultiBinary | MultiDiscrete) Box
- gymnasium.spaces.utils.flatten_space(space: Discrete | MultiBinary | MultiDiscrete) Box
- gymnasium.spaces.utils.flatten_space(space: Discrete | MultiBinary | MultiDiscrete) Box
- gymnasium.spaces.utils.flatten_space(space: Tuple) Box | Tuple
- gymnasium.spaces.utils.flatten_space(space: Dict) Box | Dict
- gymnasium.spaces.utils.flatten_space(space: Graph) Graph
- gymnasium.spaces.utils.flatten_space(space: Text) Box
- gymnasium.spaces.utils.flatten_space(space: Sequence) Sequence
- gymnasium.spaces.utils.flatten_space(space: OneOf) Box
将一个空间展平为一个尽可能平坦的空间。
此函数将尝试将
space
展平为一个 :class:gymnasium.spaces.Box
空间。然而,当space
是 :class:gymnasium.spaces.Graph
、 :class:gymnasium.spaces.Sequence
的实例,或包含 :class:gymnasium.spaces.Graph
或 :class:gymnasium.spaces.Sequence
空间的复合空间时,这可能无法实现。这等同于 :func:flatten
,但直接作用于空间本身。对于非图空间的结果始终是一个边界平坦的 :class:gymnasium.spaces.Box
。而对于图空间的结果始终是一个 :class:gymnasium.spaces.Graph
,其中 :attr:Graph.node_space
是一个边界平坦的Box
,而 :attr:Graph.edge_space
是一个边界平坦的Box
或None
。该盒子具有恰好 :func:flatdim
维。展平原始空间的样本与从展平空间中取样具有相同的效果。然而,从展平空间中取样不一定是可逆的。例如,从展平的 Discrete 空间中取样与从 Box 中取样相同,结果可能不是整数或独热编码。这可能导致错误或非均匀采样。- 参数:
space – 展平的空间
- 返回:
一个扁平的盒子
- 抛出:
NotImplementedError – 如果空间未在 :mod:
gymnasium.spaces
中定义。
- 示例 - 展平 spaces.Box:
>>> from gymnasium.spaces import Box >>> box = Box(0.0, 1.0, shape=(3, 4, 5)) >>> box Box(0.0, 1.0, (3, 4, 5), float32) >>> flatten_space(box) Box(0.0, 1.0, (60,), float32) >>> flatten(box, box.sample()) in flatten_space(box) True
- 示例 - 展平空间。离散:
>>> from gymnasium.spaces import Discrete >>> discrete = Discrete(5) >>> flatten_space(discrete) Box(0, 1, (5,), int64) >>> flatten(discrete, discrete.sample()) in flatten_space(discrete) True
- 示例 - 展平 spaces.Dict:
>>> from gymnasium.spaces import Dict, Discrete, Box >>> space = Dict({"position": Discrete(2), "velocity": Box(0, 1, shape=(2, 2))}) >>> flatten_space(space) Box(0.0, 1.0, (6,), float64) >>> flatten(space, space.sample()) in flatten_space(space) True
- 示例 - 展平空间。图:
>>> from gymnasium.spaces import Graph, Discrete, Box >>> space = Graph(node_space=Box(low=-100, high=100, shape=(3, 4)), edge_space=Discrete(5)) >>> flatten_space(space) Graph(Box(-100.0, 100.0, (12,), float32), Box(0, 1, (5,), int64)) >>> flatten(space, space.sample()) in flatten_space(space) True
- gymnasium.spaces.utils.flatten(space: Space[T], x: T) ndarray[Any, dtype[Any]] | Dict[str, Any] | Tuple[Any, ...] | GraphInstance [源代码]¶
- gymnasium.spaces.utils.flatten(space: Box | MultiBinary, x: ndarray[Any, dtype[Any]]) ndarray[Any, dtype[Any]]
- gymnasium.spaces.utils.flatten(space: Box | MultiBinary, x: ndarray[Any, dtype[Any]]) ndarray[Any, dtype[Any]]
- gymnasium.spaces.utils.flatten(space: Discrete, x: int64) ndarray[Any, dtype[int64]]
- gymnasium.spaces.utils.flatten(space: MultiDiscrete, x: ndarray[Any, dtype[int64]]) ndarray[Any, dtype[int64]]
- gymnasium.spaces.utils.flatten(space: Tuple, x: tuple[Any, ...]) tuple[Any, ...] | ndarray[Any, dtype[Any]]
- gymnasium.spaces.utils.flatten(space: Dict, x: dict[str, Any]) dict[str, Any] | ndarray[Any, dtype[Any]]
- gymnasium.spaces.utils.flatten(space: Graph, x: GraphInstance) GraphInstance
- gymnasium.spaces.utils.flatten(space: Text, x: str) ndarray[Any, dtype[int32]]
- gymnasium.spaces.utils.flatten(space: Sequence, x: tuple[Any, ...] | Any) tuple[Any, ...] | Any
- gymnasium.spaces.utils.flatten(space: OneOf, x: tuple[int, Any]) ndarray[Any, dtype[Any]]
将数据点从空间中展平。
这在例如需要将来自空间的数据点传递给仅理解浮点数平面数组的神经网络时非常有用。
- 参数:
space –
x
被展平的空间x – 要扁平化的值
- 返回:
扁平化的数据点 –
对于 :class:
gymnasium.spaces.Box
和 :class:gymnasium.spaces.MultiBinary
,这是一个扁平化数组对于 :class:
gymnasium.spaces.Discrete
和 :class:gymnasium.spaces.MultiDiscrete
,这是一个样本的扁平化独热数组。对于 :class:
gymnasium.spaces.Tuple
和 :class:gymnasium.spaces.Dict
,这是一个子空间数组的连接(不支持图子空间)- 对于图空间,返回 :class:
GraphInstance
其中: :attr:
GraphInstance.nodes
是 n x k 的数组- :attr:
GraphInstance.edges
可以是: m x k 数组
无
- :attr:
- :attr:
GraphInstance.edge_links
可以是以下之一: m x 2 数组
无
- :attr:
- 对于图空间,返回 :class:
- 抛出:
NotImplementedError – 如果在 :mod:
gymnasium.spaces
中未定义空间。
示例
>>> from gymnasium.spaces import Box, Discrete, Tuple >>> space = Box(0, 1, shape=(3, 5)) >>> flatten(space, space.sample()).shape (15,) >>> space = Discrete(4) >>> flatten(space, 2) array([0, 0, 1, 0]) >>> space = Tuple((Box(0, 1, shape=(2,)), Box(0, 1, shape=(3,)), Discrete(3))) >>> example = ((.5, .25), (1., 0., .2), 1) >>> flatten(space, example) array([0.5 , 0.25, 1. , 0. , 0.2 , 0. , 1. , 0. ])
- gymnasium.spaces.utils.flatdim(space: Space[Any]) int [源代码]¶
- gymnasium.spaces.utils.flatdim(space: Box | MultiBinary) int
- gymnasium.spaces.utils.flatdim(space: Box | MultiBinary) int
- gymnasium.spaces.utils.flatdim(space: Discrete) int
- gymnasium.spaces.utils.flatdim(space: MultiDiscrete) int
- gymnasium.spaces.utils.flatdim(space: Tuple) int
- gymnasium.spaces.utils.flatdim(space: Dict) int
- gymnasium.spaces.utils.flatdim(space: Graph)
- gymnasium.spaces.utils.flatdim(space: Text) int
- gymnasium.spaces.utils.flatdim(space: OneOf) int
返回此空间展平后将具有的维度数。
- 参数:
space – 返回展平空间维数的空格
- 返回:
扁平化空间的维度数量
- 抛出:
NotImplementedError – 如果在 :mod:
gym.spaces
中未定义空间。ValueError – 如果空间不能被展平为一个 :class:
gymnasium.spaces.Box
示例
>>> from gymnasium.spaces import Dict, Discrete >>> space = Dict({"position": Discrete(2), "velocity": Discrete(3)}) >>> flatdim(space) 5
- gymnasium.spaces.utils.unflatten(space: Space[T], x: ndarray[Any, dtype[Any]] | Dict[str, Any] | Tuple[Any, ...] | GraphInstance) T [源代码]¶
- gymnasium.spaces.utils.unflatten(space: Box | MultiBinary, x: ndarray[Any, dtype[Any]]) ndarray[Any, dtype[Any]]
- gymnasium.spaces.utils.unflatten(space: Box | MultiBinary, x: ndarray[Any, dtype[Any]]) ndarray[Any, dtype[Any]]
- gymnasium.spaces.utils.unflatten(space: Discrete, x: ndarray[Any, dtype[int64]]) int64
- gymnasium.spaces.utils.unflatten(space: MultiDiscrete, x: ndarray[Any, dtype[integer[Any]]]) ndarray[Any, dtype[integer[Any]]]
- gymnasium.spaces.utils.unflatten(space: Tuple, x: ndarray[Any, dtype[Any]] | tuple[Any, ...]) tuple[Any, ...]
- gymnasium.spaces.utils.unflatten(space: Dict, x: ndarray[Any, dtype[Any]] | dict[str, Any]) dict[str, Any]
- gymnasium.spaces.utils.unflatten(space: Graph, x: GraphInstance) GraphInstance
- gymnasium.spaces.utils.unflatten(space: Text, x: ndarray[Any, dtype[int32]]) str
- gymnasium.spaces.utils.unflatten(space: Sequence, x: tuple[Any, ...]) tuple[Any, ...] | Any
- gymnasium.spaces.utils.unflatten(space: OneOf, x: ndarray[Any, dtype[Any]]) tuple[int, Any]
从空间中解开一个数据点。
这将反转由 :func:
flatten
应用的转换。你必须确保space
参数与 :func:flatten
调用时的相同。- 参数:
space – 用于解平化
x
的空间x – 要解平的数组
- 返回:
一个与空间结构相匹配的点。
- 抛出:
NotImplementedError – 如果空间未在 :mod:
gymnasium.spaces
中定义。