Дискретизировать пространство действий в Atari Games в OpenAI retro? - PullRequest
0 голосов
/ 11 декабря 2018

В настоящее время я работаю в агенте DQN с PyTorch, используя Space Invaders, однако у меня есть некоторые проблемы: - Система действий в Retro - это массив с 1 на каждую нажатую кнопку.- Однако слишком много бесполезных комбинаций, нам просто нужно (для космических захватчиков): слева, справа, стрелять, [влево и стрелять], [вправо и стрелять].

Я модифицировал дискретизатор Sonic Action:

class SpaceInvadersDiscretizer(gym.ActionWrapper):
    """
    Wrap a gym-retro environment and make it use discrete
    actions for the Space Invaders game.
    """
    def __init__(self, env):
        super(SpaceInvadersDiscretizer, self).__init__(env)
        buttons = ["BUTTON", "LEFT", "RIGHT"]
        actions = [["BUTTON"], ['LEFT'], ['RIGHT'], ["BUTTON","LEFT"], ["BUTTON", "RIGHT"]]
        self._actions = []
        """
        What we do in this loop:
        For each action in actions
            - Create an array of 3 False (3 = nb of buttons)
            For each button in action: (for instance ['LEFT']) we need to make that left button index = True
                - Then the button index = LEFT = True
            In fact at the end we will have an array where each array is an action and each elements True of this array
            are the buttons clicked.
        """
        for action in actions:
            arr = np.array([False] * 3)
            for button in action:
                arr[buttons.index(button)] = True
            self._actions.append(arr)
        self.action_space = gym.spaces.Discrete(len(self._actions))

    def action(self, a): # pylint: disable=W0221
        return self._actions[a].copy()

И теперь у меня есть 5 возможных действий:

  • 0: Стрелять (работает)
  • 1: Слева (не работает)
  • 2: вправо (не работает)
  • 3: влево и снимать (съемка работает не влево)
  • 4: вправо и снимать (съемка работает не вправо)

Кто-то знает почему?И существует ли лучший способ справиться с действиями в стиле ретро?

Спасибо!

...