pendulum_mass.py 1002 B

123456789101112131415161718192021222324252627282930313233
  1. from gym.envs.classic_control.pendulum import PendulumEnv
  2. from gym.utils import EzPickle
  3. import numpy as np
  4. from ray.rllib.env.apis.task_settable_env import TaskSettableEnv
  5. class PendulumMassEnv(PendulumEnv, EzPickle, TaskSettableEnv):
  6. """PendulumMassEnv varies the weight of the pendulum
  7. Tasks are defined to be weight uniformly sampled between [0.5,2]
  8. """
  9. def sample_tasks(self, n_tasks):
  10. # Sample new pendulum masses (random floats between 0.5 and 2).
  11. return np.random.uniform(low=0.5, high=2.0, size=(n_tasks, ))
  12. def set_task(self, task):
  13. """
  14. Args:
  15. task (float): Task of the meta-learning environment (here: mass of
  16. the pendulum).
  17. """
  18. # self.m is the mass property of the pendulum.
  19. self.m = task
  20. def get_task(self):
  21. """
  22. Returns:
  23. float: The current mass of the pendulum (self.m in the PendulumEnv
  24. object).
  25. """
  26. return self.m