def __init__(self, env): super(SafeActionSpace, self).__init__(env) self._deprecation_warning() if self.spec.tags.get('runtime') == 'gym-core': self.action_space = gym_core_action_space(self.spec._kwargs['gym_core_id']) elif self.spec is None: pass elif self.spec.id in ['internet.SlitherIO-v0', 'internet.SlitherIOErmiyaEskandaryBot-v0', 'internet.SlitherIOEasy-v0']: self.action_space = spaces.Hardcoded([slither_vnc(left=True), slither_vnc(right=True), slither_vnc(space=True), slither_vnc(left=True, space=True), slither_vnc(right=True, space=True)]) elif self.spec.id in ['flashgames.DuskDrive-v0']: # TODO: be more systematic self.action_space = spaces.Hardcoded([racing_vnc(up=True), racing_vnc(left=True), racing_vnc(right=True)]) elif self.spec.id in ['flashgames.RedBeard-v0']: self.action_space = spaces.Hardcoded([platform_vnc(up=True), platform_vnc(left=True), platform_vnc(right=True), platform_vnc(space=True)])
def gym_core_action_space(gym_core_id): spec = gym.spec(gym_core_id) if spec.id == 'CartPole-v0': return spaces.Hardcoded([ [spaces.KeyEvent.by_name('left', down=True)], [spaces.KeyEvent.by_name('left', down=False)], ]) elif spec._entry_point.startswith('gym.envs.atari:'): actions = [] env = spec.make() for action in env.unwrapped.get_action_meanings(): z = 'FIRE' in action left = 'LEFT' in action right = 'RIGHT' in action up = 'UP' in action down = 'DOWN' in action translated = atari_vnc(up=up, down=down, left=left, right=right, z=z) actions.append(translated) return spaces.Hardcoded(actions) else: raise error.Error('Unsupported env type: {}'.format(spec.id))