Utility functions for vectorisation#
Spaces utility functions#
- gymnasium.experimental.vector.utils.batch_space(space: Space[Any], n: int = 1) Space[Any] #
- gymnasium.experimental.vector.utils.batch_space(space: Box, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: Discrete, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: MultiDiscrete, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: MultiBinary, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: Tuple, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: Dict, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: Graph | Text | Sequence, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: Graph | Text | Sequence, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: Graph | Text | Sequence, n: int = 1)
- gymnasium.experimental.vector.utils.batch_space(space: Graph | Text | Sequence, n: int = 1)
Create a (batched) space, containing multiple copies of a single space.
- Parameters:
space – Space (e.g. the observation space) for a single environment in the vectorized environment.
n – Number of environments in the vectorized environment.
- Returns:
Space (e.g. the observation space)
- Raises:
ValueError – Cannot batch space does not have a registered function.
Example
>>> from gymnasium.spaces import Box, Dict >>> import numpy as np >>> space = Dict({ ... 'position': Box(low=0, high=1, shape=(3,), dtype=np.float32), ... 'velocity': Box(low=0, high=1, shape=(2,), dtype=np.float32) ... }) >>> batch_space(space, n=5) Dict('position': Box(0.0, 1.0, (5, 3), float32), 'velocity': Box(0.0, 1.0, (5, 2), float32))
- gymnasium.experimental.vector.utils.concatenate(space: Space, items: Iterable, out: tuple[Any, ...] | dict[str, Any] | np.ndarray) tuple[Any, ...] | dict[str, Any] | np.ndarray #
- gymnasium.experimental.vector.utils.concatenate(space: Box | Discrete | MultiDiscrete | MultiBinary, items: Iterable, out: np.ndarray) np.ndarray
- gymnasium.experimental.vector.utils.concatenate(space: Box | Discrete | MultiDiscrete | MultiBinary, items: Iterable, out: np.ndarray) np.ndarray
- gymnasium.experimental.vector.utils.concatenate(space: Box | Discrete | MultiDiscrete | MultiBinary, items: Iterable, out: np.ndarray) np.ndarray
- gymnasium.experimental.vector.utils.concatenate(space: Box | Discrete | MultiDiscrete | MultiBinary, items: Iterable, out: np.ndarray) np.ndarray
- gymnasium.experimental.vector.utils.concatenate(space: Tuple, items: Iterable, out: tuple[Any, ...]) tuple[Any, ...]
- gymnasium.experimental.vector.utils.concatenate(space: Dict, items: Iterable, out: dict[str, Any]) dict[str, Any]
- gymnasium.experimental.vector.utils.concatenate(space: Space, items: Iterable, out: None) tuple[Any, ...]
- gymnasium.experimental.vector.utils.concatenate(space: Space, items: Iterable, out: None) tuple[Any, ...]
- gymnasium.experimental.vector.utils.concatenate(space: Space, items: Iterable, out: None) tuple[Any, ...]
- gymnasium.experimental.vector.utils.concatenate(space: Space, items: Iterable, out: None) tuple[Any, ...]
Concatenate multiple samples from space into a single object.
- Parameters:
space – Observation space of a single environment in the vectorized environment.
items – Samples to be concatenated.
out – The output object. This object is a (possibly nested) numpy array.
- Returns:
The output object. This object is a (possibly nested)
- Raises:
ValueError – Space
Example
>>> from gymnasium.spaces import Box >>> import numpy as np >>> space = Box(low=0, high=1, shape=(3,), seed=42, dtype=np.float32) >>> out = np.zeros((2, 3), dtype=np.float32) >>> items = [space.sample() for _ in range(2)] >>> concatenate(space, items, out) array([[0.77395606, 0.43887845, 0.85859793], [0.697368 , 0.09417735, 0.97562236]], dtype=float32)
- gymnasium.experimental.vector.utils.iterate(space: Space[T_cov], items: Iterable[T_cov]) Iterator #
- gymnasium.experimental.vector.utils.iterate(space: Discrete, items: Iterable)
- gymnasium.experimental.vector.utils.iterate(space: Box | MultiDiscrete | MultiBinary, items: np.ndarray)
- gymnasium.experimental.vector.utils.iterate(space: Box | MultiDiscrete | MultiBinary, items: np.ndarray)
- gymnasium.experimental.vector.utils.iterate(space: Box | MultiDiscrete | MultiBinary, items: np.ndarray)
- gymnasium.experimental.vector.utils.iterate(space: Tuple, items: tuple[Any, ...])
- gymnasium.experimental.vector.utils.iterate(space: Dict, items: dict[str, Any])
Iterate over the elements of a (batched) space.
- Parameters:
space – Observation space of a single environment in the vectorized environment.
items – Samples to be concatenated.
out – The output object. This object is a (possibly nested) numpy array.
- Returns:
The output object. This object is a (possibly nested)
- Raises:
ValueError – Space is not an instance of
gym.Space
Example
>>> from gymnasium.spaces import Box, Dict >>> import numpy as np >>> space = Dict({ ... 'position': Box(low=0, high=1, shape=(2, 3), seed=42, dtype=np.float32), ... 'velocity': Box(low=0, high=1, shape=(2, 2), seed=42, dtype=np.float32)}) >>> items = space.sample() >>> it = iterate(space, items) >>> next(it) OrderedDict([('position', array([0.77395606, 0.43887845, 0.85859793], dtype=float32)), ('velocity', array([0.77395606, 0.43887845], dtype=float32))]) >>> next(it) OrderedDict([('position', array([0.697368 , 0.09417735, 0.97562236], dtype=float32)), ('velocity', array([0.85859793, 0.697368 ], dtype=float32))]) >>> next(it) Traceback (most recent call last): ... StopIteration
- gymnasium.experimental.vector.utils.create_empty_array(space: Space, n: int = 1, fn: callable = np.zeros) tuple[Any, ...] | dict[str, Any] | np.ndarray #
- gymnasium.experimental.vector.utils.create_empty_array(space: Box, n: int = 1, fn=np.zeros) ndarray
- gymnasium.experimental.vector.utils.create_empty_array(space: Box, n: int = 1, fn=np.zeros) ndarray
- gymnasium.experimental.vector.utils.create_empty_array(space: Box, n: int = 1, fn=np.zeros) ndarray
- gymnasium.experimental.vector.utils.create_empty_array(space: Box, n: int = 1, fn=np.zeros) ndarray
- gymnasium.experimental.vector.utils.create_empty_array(space: Tuple, n: int = 1, fn=np.zeros) tuple[Any, ...]
- gymnasium.experimental.vector.utils.create_empty_array(space: Dict, n: int = 1, fn=np.zeros) dict[str, Any]
- gymnasium.experimental.vector.utils.create_empty_array(space: Graph, n: int = 1, fn=np.zeros) tuple[gymnasium.spaces.graph.GraphInstance, ...]
- gymnasium.experimental.vector.utils.create_empty_array(space: Text, n: int = 1, fn=np.zeros) tuple[str, ...]
- gymnasium.experimental.vector.utils.create_empty_array(space: Sequence, n: int = 1, fn=np.zeros) tuple[Any, ...]
- gymnasium.experimental.vector.utils.create_empty_array(space: ~gymnasium.spaces.space.Space, n=1, fn=<built-in function zeros>)
Create an empty (possibly nested) (normally numpy-based) array, used in conjunction with
concatenate(..., out=array)
.In most cases, the array will be contained within the batched space, however, this is not guaranteed.
- Parameters:
space – Observation space of a single environment in the vectorized environment.
n – Number of environments in the vectorized environment. If None, creates an empty sample from space.
fn – Function to apply when creating the empty numpy array. Examples of such functions are np.empty or np.zeros.
- Returns:
The output object. This object is a (possibly nested)
- Raises:
ValueError – Space is not a valid
gym.Space
instance
Example
>>> from gymnasium.spaces import Box, Dict >>> import numpy as np >>> space = Dict({ ... 'position': Box(low=0, high=1, shape=(3,), dtype=np.float32), ... 'velocity': Box(low=0, high=1, shape=(2,), dtype=np.float32)}) >>> create_empty_array(space, n=2, fn=np.zeros) OrderedDict([('position', array([[0., 0., 0.], [0., 0., 0.]], dtype=float32)), ('velocity', array([[0., 0.], [0., 0.]], dtype=float32))])
Miscellaneous#
- gymnasium.experimental.vector.utils.CloudpickleWrapper(fn: Callable[[], Env])#
Wrapper that uses cloudpickle to pickle and unpickle the result.
- gymnasium.experimental.vector.utils.clear_mpi_env_vars()#
Clears the MPI of environment variables.
from mpi4py import MPI will call MPI_Init by default. If the child process has MPI environment variables, MPI will think that the child process is an MPI process just like the parent and do bad things such as hang.
This context manager is a hacky way to clear those environment variables temporarily such as when we are starting multiprocessing Processes.
- Yields:
Yields for the context manager