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
<Kurs>Deep Reinforcement Learning in Python</Kurs>Übungsanweisungen
- 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 praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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