CommencerCommencez 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

<cours>Apprentissage par renforcement profond en Python</cours>
Voir le cours

Instructions de l’exercice

  • 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 ce code d’exemple.

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