Erste SchritteKostenlos loslegen

Puffer für Erfahrungswiedergabe

Du erstellst jetzt die Datenstruktur, die Experience Replay unterstützt, wodurch dein Agent viel effizienter lernen kann.

Dieser Wiedergabepuffer sollte zwei Operationen unterstützen:

  • Er speichert die Erfahrungen in seinem Speicher für zukünftige Probenahmen.
  • Eine zufällige Auswahl vergangener Erlebnisse aus dem Gedächtnis "wiedergeben".

Da die Daten aus dem Wiedergabepuffer in ein neuronales Netz eingespeist werden, sollte der Puffer der Einfachheit halber torch Tensoren zurückgeben.

Die Module torch und random sowie die Klasse deque wurden in deine Übungsumgebung importiert.

Diese Übung ist Teil des Kurses

Deep Reinforcement Learning in Python

Kurs anzeigen

Anleitung zur Übung

  • Vervollständige die Methode push() von ReplayBuffer, indem du experience_tuple an den Pufferspeicher anhängst.
  • Bei der Methode sample() ziehst du eine Zufallsstichprobe mit dem Umfang batch_size aus self.memory.
  • Auch in sample() wird die Stichprobe zunächst als Liste von Tupeln gezogen; stelle sicher, dass sie in ein Tupel von Listen umgewandelt wird.
  • Verwandle actions_tensor in die Form (batch_size, 1) anstelle von (batch_size).

Interaktive Übung zum Anfassen

Probieren Sie diese Übung aus, indem Sie diesen Beispielcode ausführen.

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
Bearbeiten und Ausführen von Code