Öncelikli deneyim tekrar oynatma tamponu
PrioritizedExperienceReplay sınıfını tanıtacaksın; bu veri yapısını, daha sonra Öncelikli Deneyim Tekrar Oynatma ile DQN'i uygularken kullanacaksın.
PrioritizedExperienceReplay, şu ana kadar DQN ajanlarını eğitmek için kullandığın ExperienceReplay sınıfının bir iyileştirmesidir. Öncelikli bir deneyim tekrar oynatma tamponu, ondan örneklenen geçişlerin, tekdüze örneklemeye kıyasla ajanın öğrenmesi için daha değerli olmasını sağlar.
Şimdilik .__init__(), .push(), .update_priorities(), .increase_beta() ve .__len__() yöntemlerini uygula. Son yöntem olan .sample() bir sonraki egzersizin odağı olacak.
Bu egzersiz
Python ile Deep Reinforcement Learning
kursunun bir parçasıdırEgzersiz talimatları
.push()içinde, geçişin önceliğini tampondaki en yüksek önceliğe ayarla (veya tampon boşsa 1'e)..update_priorities()içinde, önceliği ilgili TD hatasının mutlak değerine ayarla; kenar durumlarını kapsamak içinself.epsilonekle..increase_beta()içinde, beta'yıself.beta_incrementkadar artır;beta'nın asla 1'i aşmamasını sağla.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
class PrioritizedReplayBuffer:
def __init__(
self, capacity, alpha=0.6, beta=0.4, beta_increment=0.001, epsilon=0.01
):
self.memory = deque(maxlen=capacity)
self.alpha, self.beta, self.beta_increment, self.epsilon = (alpha, beta, beta_increment, epsilon)
self.priorities = deque(maxlen=capacity)
def push(self, state, action, reward, next_state, done):
experience_tuple = (state, action, reward, next_state, done)
# Initialize the transition's priority
max_priority = ____
self.memory.append(experience_tuple)
self.priorities.append(max_priority)
def update_priorities(self, indices, td_errors):
for idx, td_error in zip(indices, td_errors.tolist()):
# Update the transition's priority
self.priorities[idx] = ____
def increase_beta(self):
# Increase beta if less than 1
self.beta = ____
def __len__(self):
return len(self.memory)
buffer = PrioritizedReplayBuffer(capacity=3)
buffer.push(state=[1,3], action=2, reward=1, next_state=[2,4], done=False)
print("Transition in memory buffer:", buffer.memory)
print("Priority buffer:", buffer.priorities)