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_tuple
an den Pufferspeicher anhängst. - Bei der Methode
sample()
ziehst du eine Zufallsstichprobe mit dem Umfangbatch_size
ausself.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