Buffer pro experience replay
Teď vytvoříš datovou strukturu pro Experience Replay, která agentovi umožní učit se mnohem efektivněji.
Tento replay buffer by měl podporovat dvě operace:
- Ukládání zkušeností do paměti pro pozdější výběr vzorků.
- „Přehrání" náhodně vybraných minulých zkušeností z paměti.
Protože data odebraná z replay bufferu budou sloužit jako vstup do neuronové sítě, buffer by měl pro pohodlí vracet tensory knihovny torch.
Moduly torch a random a třída deque jsou v prostředí cvičení již naimportovány.
Toto cvičení je součástí kurzu
Deep Reinforcement Learning v Pythonu
Pokyny k cvičení
- Dokonči metodu
push()třídyReplayBuffertak, že přidášexperience_tupledo paměti bufferu. - V metodě
sample()vyber náhodný vzorek o velikostibatch_sizezself.memory. - Stále v metodě
sample()je vzorek zpočátku vrácen jako seznam n-tic; zajisti jeho převod na n-tici seznamů. - Transformuj
actions_tensordo tvaru(batch_size, 1)místo(batch_size).
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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