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
Anleitung zur Übung
- Vervollständige die Methode
push()vonReplayBuffer, indem duexperience_tuplean den Pufferspeicher anhängst. - Bei der Methode
sample()ziehst du eine Zufallsstichprobe mit dem Umfangbatch_sizeausself.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_tensorin die Form(batch_size, 1)anstelle von(batch_size).
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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