При использовании оболочки пропуска кадров для OpenAI Gym, какова цель строки np.max?

Я реализую следующую оболочку, обычно используемую в OpenAI Gym для пропуска кадров. Его можно найти в dqn/atari_wrappers.py

Меня очень смущает следующая строка:

max_frame = np.max(np.stack(self._obs_buffer), axis=0)

Я добавил комментарии по всему коду для тех частей, которые я понимаю, и чтобы помочь всем, кто может помочь.

np.stack(self._obs_buffer) складывает два состояния в _obs_buffer.

np.max возвращает максимум по оси 0.

Но я не понимаю, почему мы это делаем или что на самом деле.

class MaxAndSkipEnv(gym.Wrapper):
    """Return only every 4th frame"""
    def __init__(self, env=None, skip=4):
        super(MaxAndSkipEnv, self).__init__(env)
        # Initialise a double ended queue that can store a maximum of two states
        self._obs_buffer = deque(maxlen=2)
        # _skip = 4
        self._skip       = skip

    def _step(self, action):
        total_reward = 0.0
        done = None
        for _ in range(self._skip):
            # Take a step 
            obs, reward, done, info = self.env.step(action)
            # Append the new state to the double ended queue buffer 
            self._obs_buffer.append(obs)
            # Update the total reward by summing the (reward obtained from the step taken) + (the current 
            # total reward)
            total_reward += reward
            # If the game ends, break the for loop 
            if done:
                break

        max_frame = np.max(np.stack(self._obs_buffer), axis=0)

        return max_frame, total_reward, done, info

1 ответ

В конце forпетля self._obs_bufferсодержит последние два кадра. Затем эти два кадра объединяются по максимуму, в результате чего получается наблюдение, содержащее некоторую временную информацию.

Другие вопросы по тегам