def setUp(self): """Create the UR5 environment. This follows the pendulum.py example located in example_designs/. """ self.env = Pendulum( use_contexts=True, random_contexts=True, context_range=[(np.deg2rad(-16), np.deg2rad(16)), (-0.6, 0.6)] ) self.env.reset()
if evaluate else UR5(use_contexts=True, random_contexts=True, context_range=[(-np.pi, np.pi), (-np.pi / 4, 0), (-np.pi / 4, np.pi / 4)], show=render), }, "Pendulum": { "meta_ac_space": lambda relative_goals, multiagent: Box(low=np.array([-np.pi, -15]), high=np.array([np.pi, 15]), dtype=np.float32), "state_indices": lambda multiagent: [0, 2], "env": lambda evaluate, render, n_levels, multiagent, shared, maddpg: Pendulum(use_contexts=True, context_range=[0, 0], show=render) if evaluate else Pendulum(use_contexts=True, random_contexts=True, context_range=[(np.deg2rad(-16), np.deg2rad(16)), (-0.6, 0.6)], show=render), }, # ======================================================================= # # Mixed autonomy traffic flow environments. # # ======================================================================= # "ring-v0": { "meta_ac_space": lambda relative_goals, multiagent: Box(low=-5 if relative_goals else 0, high=5
(-np.pi / 4, np.pi / 4)], show=render) if evaluate else UR5(use_contexts=True, random_contexts=True, context_range=[(-np.pi, np.pi), (-np.pi / 4, 0), (-np.pi / 4, np.pi / 4)], show=render), }, "Pendulum": { "meta_ac_space": lambda relative_goals: Box(low=np.array([-np.pi, -15]), high=np.array([np.pi, 15]), dtype=np.float32), "state_indices": [0, 2], "env": lambda evaluate, render, multiagent, shared, maddpg: Pendulum( use_contexts=True, context_range=[0, 0], show=render) if evaluate else Pendulum(use_contexts=True, random_contexts=True, context_range=[(np.deg2rad(-16), np.deg2rad(16)), (-0.6, 0.6)], show=render), }, # ======================================================================= # # Mixed autonomy traffic flow environments. # # ======================================================================= # "ring": { "meta_ac_space": lambda relative_goals: Box(low=-10 if relative_goals else 0, high=10 if relative_goals else 30, shape=(5, ),
def create_env(env, render=False, evaluate=False): """Return, and potentially create, the environment. Parameters ---------- env : str or gym.Env the environment, or the name of a registered environment. render : bool whether to render the environment evaluate : bool specifies whether this is a training or evaluation environment Returns ------- gym.Env or list of gym.Env gym-compatible environment(s) """ if env == "AntGather": env = AntGatherEnv() elif env == "AntMaze": if evaluate: env = [ AntMaze(use_contexts=True, context_range=[16, 0]), AntMaze(use_contexts=True, context_range=[16, 16]), AntMaze(use_contexts=True, context_range=[0, 16]) ] else: env = AntMaze(use_contexts=True, random_contexts=True, context_range=[(-4, 20), (-4, 20)]) elif env == "AntPush": if evaluate: env = AntPush(use_contexts=True, context_range=[0, 19]) else: env = AntPush(use_contexts=True, context_range=[0, 19]) # env = AntPush(use_contexts=True, # random_contexts=True, # context_range=[(-16, 16), (-4, 20)]) elif env == "AntFall": if evaluate: env = AntFall(use_contexts=True, context_range=[0, 27, 4.5]) else: env = AntFall(use_contexts=True, context_range=[0, 27, 4.5]) # env = AntFall(use_contexts=True, # random_contexts=True, # context_range=[(-4, 12), (-4, 28), (0, 5)]) elif env == "AntFourRooms": if evaluate: env = [ AntFourRooms(use_contexts=True, context_range=[30, 0]), AntFourRooms(use_contexts=True, context_range=[0, 30]), AntFourRooms(use_contexts=True, context_range=[30, 30]) ] else: env = AntFourRooms(use_contexts=True, random_contexts=False, context_range=[[30, 0], [0, 30], [30, 30]]) elif env == "UR5": if evaluate: env = UR5(use_contexts=True, random_contexts=True, context_range=[(-np.pi, np.pi), (-np.pi / 4, 0), (-np.pi / 4, np.pi / 4)], show=render) else: env = UR5(use_contexts=True, random_contexts=True, context_range=[(-np.pi, np.pi), (-np.pi / 4, 0), (-np.pi / 4, np.pi / 4)], show=render) elif env == "Pendulum": if evaluate: env = Pendulum(use_contexts=True, context_range=[0, 0], show=render) else: env = Pendulum(use_contexts=True, random_contexts=True, context_range=[(np.deg2rad(-16), np.deg2rad(16)), (-0.6, 0.6)], show=render) elif env in [ "bottleneck0", "bottleneck1", "bottleneck2", "grid0", "grid1" ]: # Import the benchmark and fetch its flow_params benchmark = __import__("flow.benchmarks.{}".format(env), fromlist=["flow_params"]) flow_params = benchmark.flow_params # Get the env name and a creator for the environment. create_env, _ = make_create_env(flow_params, version=0, render=render) # Create the environment. env = create_env() elif env in ["ring0", "multi-ring0"]: env = FlowEnv("ring", render=render) # FIXME elif env in [ "merge0", "merge1", "merge2", "multi-merge0", "multi-merge1", "multi-merge2" ]: env_num = int(env[-1]) env = FlowEnv("merge", env_params={ "exp_num": env_num, "horizon": 6000, "simulator": "traci", "multiagent": env[:5] == "multi" }, render=render) elif env in [ "figureeight0", "figureeight1", "figureeight02", "multi-figureeight0", "multi-figureeight1", "multi-figureeight02" ]: env_num = int(env[-1]) env = FlowEnv("figure_eight", env_params={ "num_automated": [1, 7, 14][env_num], "horizon": 750, "simulator": "traci", "multiagent": env[:5] == "multi" }, render=render) elif env == "BipedalSoccer": env = BipedalSoccer(render=render) elif isinstance(env, str): # This is assuming the environment is registered with OpenAI gym. env = gym.make(env) # Reset the environment. if env is not None: if isinstance(env, list): for next_env in env: next_env.reset() else: env.reset() return env
class TestPendulum(unittest.TestCase): """Tests the Pendulum environment class.""" def setUp(self): """Create the UR5 environment. This follows the pendulum.py example located in example_designs/. """ self.env = Pendulum( use_contexts=True, random_contexts=True, context_range=[(np.deg2rad(-16), np.deg2rad(16)), (-0.6, 0.6)] ) self.env.reset() def tearDown(self): del self.env def test_init(self): """Ensure that all variables are being initialized properly.""" self.assertEqual(self.env.name, 'pendulum.xml') self.assertEqual(self.env.observation_space.shape[0], 3) self.assertEqual(self.env.action_space.shape[0], 1) np.testing.assert_array_almost_equal( (self.env.action_space.high - self.env.action_space.low) / 2, [2]) np.testing.assert_array_almost_equal( (self.env.action_space.high + self.env.action_space.low) / 2, [0]) self.assertEqual(len(self.env.context_range), 2) np.testing.assert_array_almost_equal( self.env.end_goal_thresholds, [0.16580628, 0.6]) self.assertEqual( self.env.context_range, [(-0.2792526803190927, 0.2792526803190927), (-0.6, 0.6)]) self.assertEqual(self.env.max_actions, 1000) self.assertEqual(self.env.visualize, False) self.assertEqual(self.env.viewer, None) self.assertEqual(self.env.num_frames_skip, 1) np.testing.assert_array_almost_equal( self.env.context_space.low, [-0.279253, -0.6]) np.testing.assert_array_almost_equal( self.env.context_space.high, [0.279253, 0.6]) def test_step(self): """Ensure the step method is functioning properly. This does the following tasks: * checks that the simulation control is set to the action. * Checks that a sufficient number of steps have passed. """ action = [1] steps_before = self.env.num_steps self.env.step(action) steps_after = self.env.num_steps # check the number of steps that have passed self.assertEqual(steps_after - steps_before, self.env.num_frames_skip) # check the control method np.testing.assert_array_almost_equal(action, self.env.sim.data.ctrl[:]) def test_reset(self): """Ensure the state initialization is within the expected range.""" state = self.env.reset() num_obj = len(state) // 3 for i in range(num_obj): self.assertTrue(np.arccos(state[i]) >= self.env.initial_state_space[i][0]) self.assertTrue(np.arccos(state[i]) <= self.env.initial_state_space[i][1]) self.assertTrue(state[i + 2 * num_obj] >= self.env.initial_state_space[i + num_obj][0]) self.assertTrue(state[i + 2 * num_obj] <= self.env.initial_state_space[i + num_obj][1]) def test_display_end_goal(self): pass def test_get_next_goal(self): pass def test_display_subgoal(self): pass