BaşlayınÜcretsiz Başlayın

Ö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ır
Kursu Görüntüle

Egzersiz 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çin self.epsilon ekle.
  • .increase_beta() içinde, beta'yı self.beta_increment kadar 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)
Kodu Düzenle ve Çalıştır