2021-06-28 17:25:53 +02:00
|
|
|
import re
|
|
|
|
|
|
|
|
import gym
|
|
|
|
from gym.envs.registration import register
|
|
|
|
|
|
|
|
|
|
|
|
def make(
|
|
|
|
id,
|
|
|
|
seed=1,
|
|
|
|
visualize_reward=True,
|
|
|
|
from_pixels=False,
|
|
|
|
height=84,
|
|
|
|
width=84,
|
|
|
|
camera_id=0,
|
|
|
|
frame_skip=1,
|
|
|
|
episode_length=1000,
|
|
|
|
environment_kwargs=None,
|
|
|
|
time_limit=None,
|
|
|
|
channels_first=True
|
|
|
|
):
|
|
|
|
# Adopted from: https://github.com/denisyarats/dmc2gym/blob/master/dmc2gym/__init__.py
|
|
|
|
# License: MIT
|
|
|
|
# Copyright (c) 2020 Denis Yarats
|
|
|
|
|
|
|
|
assert re.match(r"\w+-\w+", id), "env_id does not have the following structure: 'domain_name-task_name'"
|
|
|
|
domain_name, task_name = id.split("-")
|
|
|
|
|
|
|
|
env_id = f'dmc_{domain_name}_{task_name}_{seed}-v1'
|
|
|
|
|
|
|
|
if from_pixels:
|
|
|
|
assert not visualize_reward, 'cannot use visualize reward when learning from pixels'
|
|
|
|
|
|
|
|
# shorten episode length
|
|
|
|
max_episode_steps = (episode_length + frame_skip - 1) // frame_skip
|
|
|
|
|
|
|
|
if env_id not in gym.envs.registry.env_specs:
|
|
|
|
task_kwargs = {}
|
2021-06-29 16:17:18 +02:00
|
|
|
# if seed is not None:
|
|
|
|
task_kwargs['random'] = seed
|
2021-06-28 17:25:53 +02:00
|
|
|
if time_limit is not None:
|
|
|
|
task_kwargs['time_limit'] = time_limit
|
|
|
|
register(
|
|
|
|
id=env_id,
|
|
|
|
entry_point='alr_envs.utils.dmc2gym_wrapper:DMCWrapper',
|
|
|
|
kwargs=dict(
|
|
|
|
domain_name=domain_name,
|
|
|
|
task_name=task_name,
|
|
|
|
task_kwargs=task_kwargs,
|
|
|
|
environment_kwargs=environment_kwargs,
|
|
|
|
visualize_reward=visualize_reward,
|
|
|
|
from_pixels=from_pixels,
|
|
|
|
height=height,
|
|
|
|
width=width,
|
|
|
|
camera_id=camera_id,
|
|
|
|
frame_skip=frame_skip,
|
|
|
|
channels_first=channels_first,
|
|
|
|
),
|
|
|
|
max_episode_steps=max_episode_steps,
|
|
|
|
)
|
|
|
|
return gym.make(env_id)
|