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

Öncelikli deneyim tekrarı ile DQN

Bu egzersizde, DQN algoritmasını geliştirmek için Prioritized Experience Replay (PER) ekleyeceksin. PER'in amacı, her adımda ağı güncellemek için seçilen geçişlerden oluşan yığını (batch) eniyilemektir.

Referans olması için, PrioritizedReplayBuffer için tanımladığın yöntem adları şunlardır:

  • push() (geçişleri arabelleğe eklemek için)
  • sample() (arabellekten bir geçiş yığını örneklemek için)
  • increase_beta() (önem örneklemesini artırmak için)
  • update_priorities() (örneklenen öncelikleri güncellemek için)

describe_episode() işlevi, her bölümü (episode) açıklamak için yine kullanılır.

Bu egzersiz

Python ile Deep Reinforcement Learning

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

  • 10000 geçiş kapasiteli bir Öncelikli Deneyim Tekrarı arabelleği oluştur.
  • beta parametresini güncelleyerek zamanla önem örneklemesinin etkisini artır.
  • Örneklenen deneyimlerin önceliğini, en son TD hatalarına göre güncelle.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

# Instantiate a Prioritized Replay Buffer with capacity 10000
replay_buffer = ____(____)

for episode in range(5):
    state, info = env.reset()
    done = False   
    step = 0
    episode_reward = 0    
    # Increase the replay buffer's beta parameter
    replay_buffer.____
    while not done:
        step += 1
        total_steps += 1
        q_values = online_network(state)
        action = select_action(q_values, total_steps, start=.9, end=.05, decay=1000)
        next_state, reward, terminated, truncated, _ = env.step(action)
        done = terminated or truncated
        replay_buffer.push(state, action, reward, next_state, done)        
        if len(replay_buffer) >= batch_size:
            states, actions, rewards, next_states, dones, indices, weights = replay_buffer.sample(64)
            q_values = online_network(states).gather(1, actions).squeeze(1)
            with torch.no_grad():
                next_q_values = target_network(next_states).amax(1)
                target_q_values = rewards + gamma * next_q_values * (1-dones)            
            td_errors = target_q_values - q_values
            # Update the replay buffer priorities for that batch
            replay_buffer.____(____, ____)
            loss = torch.sum(weights * (q_values - target_q_values) ** 2)
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
            update_target_network(target_network, online_network, tau=.005)
        state = next_state
        episode_reward += reward    
    describe_episode(episode, reward, episode_reward, step)
Kodu Düzenle ve Çalıştır