Python gym 模块,Space() 实例源码
我们从Python开源项目中,提取了以下6个代码示例,用于说明如何使用gym.Space()。
def _init_space(self, space):
if not isinstance(space, gym.Space):
raise ValueError("UnkNown space,type '%s'" % type(space))
elif isinstance(space, gym.spaces.Box):
n_dims = np.product(space.shape)
handler = BoxClipHandler(space.low, space.high)
elif isinstance(space, gym.spaces.discrete):
n_dims = 1
handler = IntHandler(space.n)
elif isinstance(space, gym.spaces.HighLow):
n_dims = space.num_rows
handler = HighLowHandler(space.matrix)
elif isinstance(space, gym.spaces.Tuple):
raise NotImplementedError("Space of type '%s' is not supported"
% type(space))
return n_dims, handler
def is_compound(space):
""" Checks whether a space is a compound space. These are non-scalar
`Box` spaces,`Multidiscrete`,`MultiBinary` and `Tuple` spaces
(A Tuple space with a single,non-compound subspace is still considered
compound).
:raises TypeError: If the space is no `gym.Space`.
"""
assert_space(space)
if isinstance(space, spaces.discrete):
return False
elif isinstance(space, spaces.Box):
return len(space.shape) != 1 or space.shape[0] != 1
elif isinstance(space, (spaces.Multidiscrete, spaces.MultiBinary)):
return True
elif isinstance(space, spaces.Tuple):
return True
raise NotImplementedError("UnkNown space {} of type {} supplied".format(space, type(space)))
def num_discrete_actions(space):
"""
For a discrete space,gets the number of available actions as a tuple.
:param gym.Space space: The discrete space which to inspect.
:return tuple: Tuple of integers containing the number of discrete actions.
:raises TypeError: If the space is no `gym.Space`.
"""
assert_space(space)
if not is_discrete(space):
raise TypeError("Space {} is not discrete".format(space))
if isinstance(space, spaces.discrete):
return tuple((space.n,))
elif isinstance(space, spaces.Multidiscrete):
# add +1 here as space.high is an inclusive bound
return tuple(space.high - space.low + 1)
elif isinstance(space, spaces.MultiBinary):
return (2,) * space.n
raise NotImplementedError("UnkNown space {} of type {} supplied".format(space, type(space))) # pragma: no cover
def assert_space(space):
""" Raise a `TypeError` exception if `space` is not a `gym.spaces.Space`. """
if not isinstance(space, gym.Space):
raise TypeError("Expected a gym.spaces.Space,got {}".format(type(space)))
def is_discrete(space):
""" Checks if a space is discrete. A space is considered to
be discrete if it is derived from discrete,Multidiscrete
or MultiBinary.
A Tuple space is discrete if it contains only discrete
subspaces.
:raises TypeError: If the space is no `gym.Space`.
"""
assert_space(space)
if isinstance(space, (spaces.discrete, spaces.Multidiscrete, spaces.Box):
return False
elif isinstance(space, spaces.Tuple):
return all(map(is_discrete, space.spaces))
raise NotImplementedError("UnkNown space {} of type {} supplied".format(space, type(space)))