Spaces Utils

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 扁平化為盡可能扁平的 space。

此函數會嘗試將 space 扁平化為單一 gymnasium.spaces.Box space。但是,當 spacegymnasium.spaces.Graphgymnasium.spaces.Sequence 或包含 gymnasium.spaces.Graphgymnasium.spaces.Sequence space 的複合 space 時,這可能無法實現。這等同於 flatten(),但作用於 space 本身。非圖形 space 的結果始終是具有扁平邊界的 gymnasium.spaces.Box。而圖形 space 的結果始終是 gymnasium.spaces.Graph,其中 Graph.node_space 是具有扁平邊界的 Box,而 Graph.edge_space 是具有扁平邊界的 BoxNone。box 恰好具有 flatdim() 維度。扁平化原始 space 的樣本與取得扁平化 space 的樣本具有相同的效果。但是,從扁平化 space 中取樣不一定是可逆的。例如,從扁平化 Discrete space 中取樣與從 Box 中取樣相同,且結果可能不是整數或 one-hot 編碼。這可能會導致錯誤或非均勻取樣。

參數:

space – 要扁平化的 space

回傳:

扁平化的 Box

引發:

NotImplementedError – 如果 space 未在 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
範例 - 扁平化 spaces.Discrete
>>> 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
範例 - 扁平化 spaces.Graph
>>> 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]) NDArray[Any]
gymnasium.spaces.utils.flatten(space: Box | MultiBinary, x: NDArray[Any]) NDArray[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]
gymnasium.spaces.utils.flatten(space: Dict, x: dict[str, Any]) dict[str, Any] | NDArray[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 扁平化資料點。

當例如 space 中的點必須傳遞到神經網路時,這非常有用,神經網路僅理解浮點數的扁平陣列。

參數:
  • spacex 扁平化的 space

  • x – 要扁平化的值

回傳:

扁平化的資料點

引發:

NotImplementedError – 如果 space 未在 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 的扁平化等效 space 將具有的維度數量。

參數:

space – 要回傳扁平化 space 的維度數量的 space

回傳:

扁平化 space 的維度數量

引發:
  • NotImplementedError – 如果 space 未在 gym.spaces 中定義。

  • ValueError – 如果 space 無法扁平化為 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[source]
gymnasium.spaces.utils.unflatten(space: Box | MultiBinary, x: NDArray[Any]) NDArray[Any]
gymnasium.spaces.utils.unflatten(space: Box | MultiBinary, x: NDArray[Any]) NDArray[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] | tuple[Any, ...]) tuple[Any, ...]
gymnasium.spaces.utils.unflatten(space: Dict, x: NDArray[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]

從一個空間反扁平化一個資料點。

這個操作會反轉 flatten() 執行的轉換。您必須確保 space 參數與 flatten() 呼叫時使用的參數相同。

參數:
  • space – 用於反扁平化 x 的空間

  • x – 要反扁平化的陣列

回傳:

一個結構與空間匹配的點。

引發:

NotImplementedError – 如果 space 未在 gymnasium.spaces 中定義。