Deneyim tekrar oynatma tamponu
Artık Experience Replay'i destekleyecek veri yapısını oluşturacaksın; bu sayede ajanının çok daha verimli öğrenmesini sağlayacaksın.
Bu tekrar oynatma tamponu iki işlemi desteklemelidir:
- Gelecekte örneklemek üzere deneyimleri belleğinde saklamak.
- Belleğinden geçmiş deneyimlerden rastgele örneklenmiş bir kümeyi "yeniden oynatmak".
Tekrar oynatma tamponundan örneklenen veriler bir sinir ağına beslenerek kullanılacağı için, kolaylık olması adına tampon torch Tensor'ları döndürmelidir.
torch ve random modülleri ile deque sınıfı egzersiz ortamına aktarılmıştır.
Bu egzersiz
Python ile Deep Reinforcement Learning
kursunun bir parçasıdırEgzersiz talimatları
ReplayBuffer'ınpush()yöntemini,experience_tuple'ı tampon belleğe ekleyerek tamamla.sample()yönteminde,self.memoryiçindenbatch_sizeboyutunda rastgele bir örnek çek.- Yine
sample()içinde, örnek başlangıçta tuple listesi olarak gelir; bunun liste tuple'ına dönüştürüldüğünden emin ol. actions_tensor'ı(batch_size)yerine(batch_size, 1)şekline dönüştür.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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