def init_env_sampler(env_name, seed=None, experiment_id=None, default_env=False, init_dist_params=None, test_dist_params=[[0.0, 0.1], 100], dist_type='gaussian', rescale=True): if env_name == "cartpole": # the context distribution corresponds to the cart mass, pole mass and # pole length if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([1.0, 0.1, 0.5], 1e-1) env_constructor = cartpole.Cartpole elif env_name == "reacher1D": if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([1.0], 1e-1) env_constructor = reacher_constructor elif env_name == 'lunar-lander': if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([120.0, 20.0, 0.6], 1e-1) env_constructor = lunar_lander_constructor if not default_env \ else lunar_lander.LunarLander elif env_name == 'mountain-car': # the conxtext distribution corresponds to min_position, max_position, # max_speed, goal_position, thrust magnitude and gravity if dist_type == 'gaussian' and init_dist_params is None: # Is the 1e-2 important? # S = 1e-1 * S.mm(S.t()) + 1e-2 * ... init_dist_params = create_def_gaussian( [1.2, 0.6, 0.07, 0.001, -0.0025], 1e-1) env_constructor = mountain_car.MountainCarEnv elif env_name.startswith('cartpole-swingup-pole-only'): env_constructor = cartpole_swingup_pole_only_constructor default_params = [0.5, 1.0] if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian(default_params, 1e-2) elif env_name.startswith('cartpole-swingup'): if env_name.endswith('-pl'): env_constructor = cartpole_swingup_pole_length_constructor idx = slice(0, 1) elif env_name.endswith('-pm'): env_constructor = cartpole_swingup_pole_mass_constructor idx = slice(1, 2) elif env_name.endswith('-cm'): env_constructor = cartpole_swingup_cart_mass_constructor idx = slice(2, 3) elif env_name.endswith('-cd'): env_constructor = cartpole_swingup_cart_damp_constructor idx = slice(3, 4) else: env_constructor = cartpole_swingup_constructor idx = slice(0, 4) default_params = [0.5, 0.5, 1.0, 0.1] if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian(default_params[idx], 1e-2) elif env_name == 'hopper': # Context order : foot friction, torso size, joint damping if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([2.0, 0.05, 1.0], 1e-1) env_constructor = partial(hopper_constructor, experiment_id=experiment_id ) if not default_env else hopper.HopperEnv() elif env_name == 'hopper-torso-only': # Context is only torso size if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([0.05], 1e-1) env_constructor = partial(hopper_torso_only_constructor, experiment_id=experiment_id ) if not default_env else hopper.HopperEnv() elif env_name == 'hopper-density-only': # Context is only torso size if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([1000.0], 1e-1) env_constructor = partial(hopper_density_only_constructor, experiment_id=experiment_id ) if not default_env else hopper.HopperEnv() elif env_name == 'hopper-damping-only': # Context is only damping if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([0.0], 1e-1) env_constructor = partial(hopper_damping_only_constructor, experiment_id=experiment_id ) if not default_env else hopper.HopperEnv() elif env_name == 'hopper-friction-only': # Context is only friction if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([2.0], 1e-1) env_constructor = partial(hopper_friction_only_constructor, experiment_id=experiment_id ) if not default_env else hopper.HopperEnv() elif env_name == 'half-cheetah': # Context order : torso_size, joint damping, friction if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([0.046, 0.01, 0.0], 1e-1) env_constructor = partial( half_cheetah_constructor, experiment_id=experiment_id ) if not default_env else half_cheetah.HalfCheetahEnv() elif env_name == 'half-cheetah-torso': if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([0.046], 1e-1) env_constructor = partial( half_cheetah_torso_only_constructor, experiment_id=experiment_id ) if not default_env else half_cheetah.HalfCheetahEnv() elif env_name == 'half-cheetah-density': if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([1000.0], 1e-1) env_constructor = partial( half_cheetah_density_constructor, experiment_id=experiment_id ) if not default_env else half_cheetah.HalfCheetahEnv() elif env_name == 'half-cheetah-damping': if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([0.0], 1e-1) env_constructor = partial( half_cheetah_damping_only_constructor, experiment_id=experiment_id ) if not default_env else half_cheetah.HalfCheetahEnv() elif env_name == 'half-cheetah-friction': if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([0.4], 1e-1) env_constructor = partial( half_cheetah_friction_constructor, experiment_id=experiment_id ) if not default_env else half_cheetah.HalfCheetahEnv() elif env_name == 'humanoid': if dist_type == 'gaussian' and init_dist_params is None: init_dist_params = create_def_gaussian([40, 9.8, 0.1], 1e-1) env_constructor = humanoid_constructor else: raise ValueError('Environment not supported!') dist, init_dist_params, test_dist = init_dist(init_dist_params, test_dist_params, dist_type, rescale=rescale) init_dist_params = list(init_dist_params) return EnvSampler(env_constructor, dist, init_dist_params, seed, env_name, test_dist)
def hopper_friction_only_constructor(z1, experiment_id=None): return hopper.HopperEnv(foot_friction=z1, experiment_id=experiment_id)
def hopper_damping_only_constructor(z1, experiment_id=None): return hopper.HopperEnv(joint_damping=z1, experiment_id=experiment_id)
def hopper_density_only_constructor(z1, experiment_id=None): return hopper.HopperEnv(torso_density=z1, experiment_id=experiment_id)
def hopper_torso_only_constructor(z1, experiment_id=None): return hopper.HopperEnv(torso_size=z1, experiment_id=experiment_id)
def hopper_constructor(z1, z2, z3, experiment_id=None): return hopper.HopperEnv(foot_friction=z1, torso_size=z2, joint_damping=z3, experiment_id=experiment_id)