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

Tam DQN algoritmasını uygulama

Zaman geldi çattı! Tüm önkoşullar tamamlandı; şimdi tam DQN algoritmasını uygulayacak ve bunu bir Lunar Lander ajanını eğitmek için kullanacaksın. Bu, algoritmanın sadece Experience Replay değil, aynı zamanda Azalan Epsilon- Açgözlülük (Decayed Epsilon-Greediness) ve Sabit Q-Hedefleri (Fixed Q-Targets) de kullanacağı anlamına geliyor.

Azalan Epsilon-Açgözlülüğü uygulayan select_action() fonksiyonu kullanıma hazır; ayrıca önceki egzersizden update_target_network() fonksiyonu da elinde. Geriye kalan tek şey bu fonksiyonları DQN eğitim döngüsüne yerleştirmek ve kayıp hesaplamalarında Hedef Ağı doğru kullandığından emin olmak.

Zamanla \(\varepsilon\) değerini azaltmak için yeni bir adım sayacı olan total_steps değişkenini tutman gerekiyor. Bu değişken senin için 0 değeriyle başlatıldı.

Bu egzersiz

Python ile Deep Reinforcement Learning

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

Egzersiz talimatları

  • Aracının eylemini seçmek ve Azalan Epsilon-Açgözlülüğü uygulamak için select_action() kullan; bölümler boyunca biriken toplam için total_steps değişkenine ihtiyacın olacak.
  • TD hedefini hesaplamadan önce gradyan takibini kapat.
  • Bir sonraki durumu elde ettikten sonra, bir sonraki durumun Q-Değerlerini al.
  • Her adımın sonunda hedef ağı güncelle.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

for episode in range(10):
    state, info = env.reset()
    done = False
    step = 0
    episode_reward = 0
    while not done:
        step += 1
        total_steps += 1
        q_values = online_network(state)
        # Select the action with epsilon greediness
        action = ____(____, ____, 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 = replay_buffer.sample(64)
            q_values = online_network(states).gather(1, actions).squeeze(1)
            # Ensure gradients are not tracked
            with ____:
                # Obtain the next state Q-values
                next_q_values = ____(next_states).amax(1)
                target_q_values = rewards + gamma * next_q_values * (1-dones)
            loss = nn.MSELoss()(q_values, target_q_values)
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()   
            # Update the target network weights
            ____(____, ____, tau=.005)
        state = next_state
        episode_reward += reward    
    describe_episode(episode, reward, episode_reward, step)
Kodu Düzenle ve Çalıştır