2021-08-05 16:35:07 +02:00
|
|
|
from abc import abstractmethod
|
|
|
|
|
2018-02-26 17:35:07 +01:00
|
|
|
import gym
|
2016-12-23 16:21:42 -08:00
|
|
|
from gym import error
|
2017-02-26 00:01:00 -08:00
|
|
|
from gym.utils import closer
|
2016-05-27 12:16:35 -07:00
|
|
|
|
|
|
|
env_closer = closer.Closer()
|
2016-04-27 08:00:58 -07:00
|
|
|
|
|
|
|
|
|
|
|
class Env(object):
|
2020-04-24 23:10:27 +02:00
|
|
|
"""The main OpenAI Gym class. It encapsulates an environment with
|
2016-04-28 10:33:37 -07:00
|
|
|
arbitrary behind-the-scenes dynamics. An environment can be
|
|
|
|
partially or fully observed.
|
|
|
|
|
|
|
|
The main API methods that users of this class need to know are:
|
|
|
|
|
|
|
|
step
|
2016-05-29 09:07:09 -07:00
|
|
|
reset
|
2016-04-28 10:33:37 -07:00
|
|
|
render
|
2016-05-15 15:59:02 -07:00
|
|
|
close
|
2016-05-29 09:07:09 -07:00
|
|
|
seed
|
2016-04-27 08:00:58 -07:00
|
|
|
|
|
|
|
And set the following attributes:
|
|
|
|
|
|
|
|
action_space: The Space object corresponding to valid actions
|
|
|
|
observation_space: The Space object corresponding to valid observations
|
2016-05-27 12:16:35 -07:00
|
|
|
reward_range: A tuple corresponding to the min and max possible rewards
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2016-08-24 23:10:58 +02:00
|
|
|
Note: a default reward range set to [-inf,+inf] already exists. Set it if you want a narrower range.
|
|
|
|
|
2020-04-24 23:10:27 +02:00
|
|
|
The methods are accessed publicly as "step", "reset", etc...
|
2016-04-27 08:00:58 -07:00
|
|
|
"""
|
2021-07-29 02:26:34 +02:00
|
|
|
|
2016-04-27 08:00:58 -07:00
|
|
|
# Set this in SOME subclasses
|
2021-07-29 02:26:34 +02:00
|
|
|
metadata = {"render.modes": []}
|
|
|
|
reward_range = (-float("inf"), float("inf"))
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
spec = None
|
2016-05-15 15:59:02 -07:00
|
|
|
|
2016-04-27 08:00:58 -07:00
|
|
|
# Set these in ALL subclasses
|
|
|
|
action_space = None
|
|
|
|
observation_space = None
|
|
|
|
|
2021-08-05 16:35:07 +02:00
|
|
|
@abstractmethod
|
2016-04-27 08:00:58 -07:00
|
|
|
def step(self, action):
|
2016-04-28 10:33:37 -07:00
|
|
|
"""Run one timestep of the environment's dynamics. When end of
|
|
|
|
episode is reached, you are responsible for calling `reset()`
|
|
|
|
to reset this environment's state.
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2016-05-27 12:16:35 -07:00
|
|
|
Accepts an action and returns a tuple (observation, reward, done, info).
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2016-05-27 12:16:35 -07:00
|
|
|
Args:
|
2019-05-24 14:29:01 -07:00
|
|
|
action (object): an action provided by the agent
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2016-05-27 12:16:35 -07:00
|
|
|
Returns:
|
|
|
|
observation (object): agent's observation of the current environment
|
|
|
|
reward (float) : amount of reward returned after previous action
|
2019-05-03 23:53:31 +02:00
|
|
|
done (bool): whether the episode has ended, in which case further step() calls will return undefined results
|
2016-05-27 12:16:35 -07:00
|
|
|
info (dict): contains auxiliary diagnostic information (helpful for debugging, and sometimes learning)
|
2016-04-27 08:00:58 -07:00
|
|
|
"""
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
raise NotImplementedError
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2021-08-05 16:35:07 +02:00
|
|
|
@abstractmethod
|
2016-04-27 08:00:58 -07:00
|
|
|
def reset(self):
|
2020-08-28 17:58:35 -04:00
|
|
|
"""Resets the environment to an initial state and returns an initial
|
|
|
|
observation.
|
|
|
|
|
|
|
|
Note that this function should not reset the environment's random
|
|
|
|
number generator(s); random variables in the environment's state should
|
|
|
|
be sampled independently between multiple calls to `reset()`. In other
|
|
|
|
words, each call of `reset()` should yield an environment suitable for
|
|
|
|
a new episode, independent of previous episodes.
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2019-08-23 15:02:33 -07:00
|
|
|
Returns:
|
2019-05-03 23:53:31 +02:00
|
|
|
observation (object): the initial observation.
|
2016-04-27 08:00:58 -07:00
|
|
|
"""
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
raise NotImplementedError
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2021-08-05 16:35:07 +02:00
|
|
|
@abstractmethod
|
|
|
|
def render(self, mode='human'):
|
2016-04-27 08:00:58 -07:00
|
|
|
"""Renders the environment.
|
|
|
|
|
|
|
|
The set of supported modes varies per environment. (And some
|
|
|
|
environments do not support rendering at all.) By convention,
|
|
|
|
if mode is:
|
|
|
|
|
|
|
|
- human: render to the current display or terminal and
|
|
|
|
return nothing. Usually for human consumption.
|
|
|
|
- rgb_array: Return an numpy.ndarray with shape (x, y, 3),
|
|
|
|
representing RGB values for an x-by-y pixel image, suitable
|
|
|
|
for turning into a video.
|
|
|
|
- ansi: Return a string (str) or StringIO.StringIO containing a
|
|
|
|
terminal-style text representation. The text can include newlines
|
|
|
|
and ANSI escape sequences (e.g. for colors).
|
|
|
|
|
|
|
|
Note:
|
|
|
|
Make sure that your class's metadata 'render.modes' key includes
|
|
|
|
the list of supported modes. It's recommended to call super()
|
|
|
|
in implementations to use the functionality of this method.
|
|
|
|
|
|
|
|
Args:
|
|
|
|
mode (str): the mode to render with
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
class MyEnv(Env):
|
2016-05-27 12:16:35 -07:00
|
|
|
metadata = {'render.modes': ['human', 'rgb_array']}
|
|
|
|
|
|
|
|
def render(self, mode='human'):
|
|
|
|
if mode == 'rgb_array':
|
|
|
|
return np.array(...) # return RGB frame suitable for video
|
2019-05-03 23:53:31 +02:00
|
|
|
elif mode == 'human':
|
2016-05-27 12:16:35 -07:00
|
|
|
... # pop up a window and render
|
|
|
|
else:
|
|
|
|
super(MyEnv, self).render(mode=mode) # just raise an exception
|
2016-04-27 08:00:58 -07:00
|
|
|
"""
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
raise NotImplementedError
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2016-05-15 15:59:02 -07:00
|
|
|
def close(self):
|
2019-05-03 23:53:31 +02:00
|
|
|
"""Override close in your subclass to perform any necessary cleanup.
|
2016-05-27 12:16:35 -07:00
|
|
|
|
|
|
|
Environments will automatically close() themselves when
|
|
|
|
garbage collected or when the program exits.
|
2016-05-15 15:59:02 -07:00
|
|
|
"""
|
2019-05-03 23:53:31 +02:00
|
|
|
pass
|
2016-05-15 15:59:02 -07:00
|
|
|
|
2016-05-29 09:07:09 -07:00
|
|
|
def seed(self, seed=None):
|
|
|
|
"""Sets the seed for this env's random number generator(s).
|
|
|
|
|
|
|
|
Note:
|
|
|
|
Some environments use multiple pseudorandom number generators.
|
|
|
|
We want to capture all such seeds used in order to ensure that
|
|
|
|
there aren't accidental correlations between multiple generators.
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
list<bigint>: Returns the list of seeds used in this env's random
|
|
|
|
number generators. The first value in the list should be the
|
|
|
|
"main" seed, or the value which a reproducer should pass to
|
|
|
|
'seed'. Often, the main seed equals the provided 'seed', but
|
|
|
|
this won't be true if seed=None, for example.
|
|
|
|
"""
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
return
|
2017-06-16 16:35:03 -07:00
|
|
|
|
2016-08-17 15:16:45 -07:00
|
|
|
@property
|
|
|
|
def unwrapped(self):
|
|
|
|
"""Completely unwrap this env.
|
2016-08-11 14:45:52 -07:00
|
|
|
|
|
|
|
Returns:
|
2016-08-17 15:16:45 -07:00
|
|
|
gym.Env: The base non-wrapped gym.Env instance
|
2016-08-11 14:45:52 -07:00
|
|
|
"""
|
2017-02-26 00:01:00 -08:00
|
|
|
return self
|
2016-08-11 14:45:52 -07:00
|
|
|
|
2016-04-27 08:00:58 -07:00
|
|
|
def __str__(self):
|
2017-06-16 16:35:03 -07:00
|
|
|
if self.spec is None:
|
2021-07-29 02:26:34 +02:00
|
|
|
return "<{} instance>".format(type(self).__name__)
|
2017-06-16 16:35:03 -07:00
|
|
|
else:
|
2021-07-29 02:26:34 +02:00
|
|
|
return "<{}<{}>>".format(type(self).__name__, self.spec.id)
|
2016-04-27 08:00:58 -07:00
|
|
|
|
2019-02-25 15:53:58 -08:00
|
|
|
def __enter__(self):
|
2021-07-29 02:26:34 +02:00
|
|
|
"""Support with-statement for the environment."""
|
2019-02-25 15:53:58 -08:00
|
|
|
return self
|
|
|
|
|
|
|
|
def __exit__(self, *args):
|
2021-07-29 02:26:34 +02:00
|
|
|
"""Support with-statement for the environment."""
|
2019-02-25 15:53:58 -08:00
|
|
|
self.close()
|
|
|
|
# propagate exception
|
|
|
|
return False
|
|
|
|
|
2018-02-26 17:35:07 +01:00
|
|
|
|
|
|
|
class GoalEnv(Env):
|
|
|
|
"""A goal-based environment. It functions just as any regular OpenAI Gym environment but it
|
|
|
|
imposes a required structure on the observation_space. More concretely, the observation
|
|
|
|
space is required to contain at least three elements, namely `observation`, `desired_goal`, and
|
|
|
|
`achieved_goal`. Here, `desired_goal` specifies the goal that the agent should attempt to achieve.
|
|
|
|
`achieved_goal` is the goal that it currently achieved instead. `observation` contains the
|
|
|
|
actual observations of the environment as per usual.
|
|
|
|
"""
|
|
|
|
|
|
|
|
def reset(self):
|
|
|
|
# Enforce that each GoalEnv uses a Goal-compatible observation space.
|
|
|
|
if not isinstance(self.observation_space, gym.spaces.Dict):
|
2021-07-29 15:39:42 -04:00
|
|
|
raise error.Error(
|
|
|
|
"GoalEnv requires an observation space of type gym.spaces.Dict"
|
|
|
|
)
|
2021-07-29 02:26:34 +02:00
|
|
|
for key in ["observation", "achieved_goal", "desired_goal"]:
|
2019-05-10 15:00:01 -07:00
|
|
|
if key not in self.observation_space.spaces:
|
2021-07-29 15:39:42 -04:00
|
|
|
raise error.Error(
|
|
|
|
'GoalEnv requires the "{}" key to be part of the observation dictionary.'.format(
|
|
|
|
key
|
|
|
|
)
|
|
|
|
)
|
2018-02-26 17:35:07 +01:00
|
|
|
|
2021-08-05 16:35:07 +02:00
|
|
|
@abstractmethod
|
2018-02-26 17:35:07 +01:00
|
|
|
def compute_reward(self, achieved_goal, desired_goal, info):
|
|
|
|
"""Compute the step reward. This externalizes the reward function and makes
|
2020-04-24 23:10:27 +02:00
|
|
|
it dependent on a desired goal and the one that was achieved. If you wish to include
|
2018-02-26 17:35:07 +01:00
|
|
|
additional rewards that are independent of the goal, you can include the necessary values
|
2020-04-24 23:10:27 +02:00
|
|
|
to derive it in 'info' and compute it accordingly.
|
2018-02-26 17:35:07 +01:00
|
|
|
|
|
|
|
Args:
|
|
|
|
achieved_goal (object): the goal that was achieved during execution
|
|
|
|
desired_goal (object): the desired goal that we asked the agent to attempt to achieve
|
|
|
|
info (dict): an info dictionary with additional information
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
float: The reward that corresponds to the provided achieved goal w.r.t. to the desired
|
|
|
|
goal. Note that the following should always hold true:
|
|
|
|
|
|
|
|
ob, reward, done, info = env.step()
|
|
|
|
assert reward == env.compute_reward(ob['achieved_goal'], ob['goal'], info)
|
|
|
|
"""
|
2019-05-03 23:53:31 +02:00
|
|
|
raise NotImplementedError
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
|
|
|
|
|
2016-08-11 14:45:52 -07:00
|
|
|
class Wrapper(Env):
|
2020-04-24 23:10:27 +02:00
|
|
|
"""Wraps the environment to allow a modular transformation.
|
2019-08-23 15:02:33 -07:00
|
|
|
|
2019-05-03 23:53:31 +02:00
|
|
|
This class is the base class for all wrappers. The subclass could override
|
|
|
|
some methods to change the behavior of the original environment without touching the
|
2019-08-23 15:02:33 -07:00
|
|
|
original code.
|
|
|
|
|
2019-05-03 23:53:31 +02:00
|
|
|
.. note::
|
2019-08-23 15:02:33 -07:00
|
|
|
|
2019-05-03 23:53:31 +02:00
|
|
|
Don't forget to call ``super().__init__(env)`` if the subclass overrides :meth:`__init__`.
|
2019-08-23 15:02:33 -07:00
|
|
|
|
2019-05-03 23:53:31 +02:00
|
|
|
"""
|
2021-07-29 02:26:34 +02:00
|
|
|
|
2017-02-26 00:01:00 -08:00
|
|
|
def __init__(self, env):
|
2016-08-13 19:24:48 -07:00
|
|
|
self.env = env
|
2016-09-04 00:38:03 -07:00
|
|
|
self.action_space = self.env.action_space
|
|
|
|
self.observation_space = self.env.observation_space
|
|
|
|
self.reward_range = self.env.reward_range
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
self.metadata = self.env.metadata
|
2016-12-23 16:21:42 -08:00
|
|
|
|
2019-03-25 20:11:53 +01:00
|
|
|
def __getattr__(self, name):
|
2021-07-29 02:26:34 +02:00
|
|
|
if name.startswith("_"):
|
2021-07-29 15:39:42 -04:00
|
|
|
raise AttributeError(
|
|
|
|
"attempted to get missing private attribute '{}'".format(name)
|
|
|
|
)
|
2019-03-25 20:11:53 +01:00
|
|
|
return getattr(self.env, name)
|
|
|
|
|
2019-06-28 15:27:43 -07:00
|
|
|
@property
|
|
|
|
def spec(self):
|
|
|
|
return self.env.spec
|
|
|
|
|
2016-12-23 16:21:42 -08:00
|
|
|
@classmethod
|
|
|
|
def class_name(cls):
|
|
|
|
return cls.__name__
|
|
|
|
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
def step(self, action):
|
2019-05-03 23:53:31 +02:00
|
|
|
return self.env.step(action)
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
|
|
|
|
def reset(self, **kwargs):
|
2019-05-03 23:53:31 +02:00
|
|
|
return self.env.reset(**kwargs)
|
2016-08-11 14:45:52 -07:00
|
|
|
|
2021-07-29 02:26:34 +02:00
|
|
|
def render(self, mode="human", **kwargs):
|
2018-05-30 01:38:58 -07:00
|
|
|
return self.env.render(mode, **kwargs)
|
2016-08-11 14:45:52 -07:00
|
|
|
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
def close(self):
|
2019-03-25 18:23:14 +01:00
|
|
|
return self.env.close()
|
2016-08-11 14:45:52 -07:00
|
|
|
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
def seed(self, seed=None):
|
2016-08-11 14:45:52 -07:00
|
|
|
return self.env.seed(seed)
|
|
|
|
|
2018-02-26 17:35:07 +01:00
|
|
|
def compute_reward(self, achieved_goal, desired_goal, info):
|
|
|
|
return self.env.compute_reward(achieved_goal, desired_goal, info)
|
|
|
|
|
2016-08-11 14:45:52 -07:00
|
|
|
def __str__(self):
|
2021-07-29 02:26:34 +02:00
|
|
|
return "<{}{}>".format(type(self).__name__, self.env)
|
2016-09-04 00:38:03 -07:00
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return str(self)
|
2016-08-17 15:16:45 -07:00
|
|
|
|
|
|
|
@property
|
2017-02-26 00:01:00 -08:00
|
|
|
def unwrapped(self):
|
|
|
|
return self.env.unwrapped
|
2016-09-04 00:38:03 -07:00
|
|
|
|
|
|
|
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
class ObservationWrapper(Wrapper):
|
|
|
|
def reset(self, **kwargs):
|
|
|
|
observation = self.env.reset(**kwargs)
|
|
|
|
return self.observation(observation)
|
|
|
|
|
2019-05-03 23:53:31 +02:00
|
|
|
def step(self, action):
|
|
|
|
observation, reward, done, info = self.env.step(action)
|
|
|
|
return self.observation(observation), reward, done, info
|
|
|
|
|
2021-08-05 16:35:07 +02:00
|
|
|
@abstractmethod
|
2016-09-04 01:44:20 -07:00
|
|
|
def observation(self, observation):
|
2019-05-03 23:53:31 +02:00
|
|
|
raise NotImplementedError
|
2016-09-04 00:38:03 -07:00
|
|
|
|
|
|
|
|
|
|
|
class RewardWrapper(Wrapper):
|
2019-03-01 17:15:39 -05:00
|
|
|
def reset(self, **kwargs):
|
|
|
|
return self.env.reset(**kwargs)
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
|
|
|
|
def step(self, action):
|
2016-09-04 00:38:03 -07:00
|
|
|
observation, reward, done, info = self.env.step(action)
|
2016-09-04 01:44:20 -07:00
|
|
|
return observation, self.reward(reward), done, info
|
|
|
|
|
2021-08-05 16:35:07 +02:00
|
|
|
@abstractmethod
|
2016-09-04 01:44:20 -07:00
|
|
|
def reward(self, reward):
|
2019-05-03 23:53:31 +02:00
|
|
|
raise NotImplementedError
|
2016-09-04 00:38:03 -07:00
|
|
|
|
|
|
|
|
|
|
|
class ActionWrapper(Wrapper):
|
2019-03-25 18:23:14 +01:00
|
|
|
def reset(self, **kwargs):
|
|
|
|
return self.env.reset(**kwargs)
|
|
|
|
|
Cleanup, removal of unmaintained code (#836)
* add dtype to Box
* remove board_game, debugging, safety, parameter_tuning environments
* massive set of breaking changes
- remove python logging module
- _step, _reset, _seed, _close => non underscored method
- remove benchmark and scoring folder
* Improve render("human"), now resizable, closable window.
* get rid of default step and reset in wrappers, so it doesn’t silently fail for people with underscore methods
* CubeCrash unit test environment
* followup fixes
* MemorizeDigits unit test envrionment
* refactored spaces a bit
fixed indentation
disabled test_env_semantics
* fix unit tests
* fixes
* CubeCrash, MemorizeDigits tested
* gym backwards compatibility patch
* gym backwards compatibility, followup fixes
* changelist, add spaces to main namespaces
* undo_logger_setup for backwards compat
* remove configuration.py
2018-01-25 18:20:14 -08:00
|
|
|
def step(self, action):
|
2019-05-03 23:53:31 +02:00
|
|
|
return self.env.step(self.action(action))
|
2016-09-04 00:38:03 -07:00
|
|
|
|
2021-08-05 16:35:07 +02:00
|
|
|
@abstractmethod
|
2016-09-04 01:44:20 -07:00
|
|
|
def action(self, action):
|
2019-05-03 23:53:31 +02:00
|
|
|
raise NotImplementedError
|
2016-09-04 01:44:20 -07:00
|
|
|
|
2021-08-05 16:35:07 +02:00
|
|
|
@abstractmethod
|
2016-10-14 22:07:47 -07:00
|
|
|
def reverse_action(self, action):
|
2021-07-29 02:26:34 +02:00
|
|
|
raise NotImplementedError
|