CommencerCommencer gratuitement

Mémoire tampon de relecture

Vous allez maintenant créer la structure de données nécessaire à la fonctionnalité Experience Replay, qui permettra à votre agent d'apprendre beaucoup plus efficacement.

Ce tampon de relecture doit prendre en charge deux opérations :

  • Enregistrer des expériences dans sa mémoire pour les réutiliser ultérieurement.
  • « Rejouer » un échantillon aléatoire d'expériences passées provenant de sa mémoire.

Étant donné que les données échantillonnées à partir du tampon de relecture seront utilisées pour alimenter un réseau neuronal, le tampon doit renvoyer des tenseurs d'torch s pour plus de commodité.

Les modules torch et random ainsi que la classe deque ont été importés dans votre environnement d'exercice.

Cet exercice fait partie du cours

Apprentissage par renforcement profond en Python

Afficher le cours

Instructions

  • Veuillez compléter la méthode d'push() de ReplayBuffer en ajoutant experience_tuple à la mémoire tampon.
  • sample() Dans la méthode d'échantillonnage aléatoire, prélevez un échantillon aléatoire de taille batch_size à partir de self.memory.
  • Encore une fois dans l'sample(), l'échantillon est initialement dessiné sous forme de liste de tuples ; veuillez vous assurer qu'il est transformé en un tuple de listes.
  • Veuillez transformer l'actions_tensor en (batch_size, 1) au lieu de (batch_size).

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

class ReplayBuffer:
    def __init__(self, capacity):
        self.memory = deque([], maxlen=capacity)
    def push(self, state, action, reward, next_state, done):
        experience_tuple = (state, action, reward, next_state, done)
        # Append experience_tuple to the memory buffer
        self.memory.____    
    def __len__(self):
        return len(self.memory)
    def sample(self, batch_size):
        # Draw a random sample of size batch_size
        batch = ____(____, ____)
        # Transform batch into a tuple of lists
        states, actions, rewards, next_states, dones = ____
        states_tensor = torch.tensor(states, dtype=torch.float32)
        rewards_tensor = torch.tensor(rewards, dtype=torch.float32)
        next_states_tensor = torch.tensor(next_states, dtype=torch.float32)
        dones_tensor = torch.tensor(dones, dtype=torch.float32)
        # Ensure actions_tensor has shape (batch_size, 1)
        actions_tensor = torch.tensor(actions, dtype=torch.long).____
        return states_tensor, actions_tensor, rewards_tensor, next_states_tensor, dones_tensor
Modifier et exécuter le code