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

Double DQN'i eğitmek

Şimdi DQN kodunu değiştirerek double DQN'i uygulayacaksın.

Double DQN, DQN algoritmasında yalnızca küçük bir ayar gerektirir; ancak Q-değerlerinin aşırı tahmin edilmesi sorununu büyük ölçüde azaltır ve çoğu zaman DQN'den daha iyi performans gösterir.

Bu egzersiz, kursun bir parçasıdır

Python ile Deep Reinforcement Learning

Kursa Göz Atın

Egzersiz talimatları

  • Q-hedefi hesaplaması için sonraki eylemleri online_network() kullanarak hesapla; doğru eylemi ve şekli elde ettiğinden emin ol.
  • Bu eylemler için Q-değerlerini target_network() ile tahmin et; yine doğru değerleri ve şekli elde ettiğinden emin ol.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

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)
        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 = replay_buffer.sample(64)
            q_values = online_network(states).gather(1, actions).squeeze(1)
            with torch.no_grad():
                # Obtain next actions for Q-target calculation
                next_actions = ____.____.____
                # Estimate next Q-values from these actions
                next_q_values = ____.____.____
                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_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