MulaiMulai sekarang secara gratis

Melatih double DQN

Sekarang Anda akan memodifikasi kode DQN Anda untuk mengimplementasikan double DQN.

Double DQN hanya memerlukan penyesuaian kecil pada algoritme DQN, tetapi sangat membantu mengatasi masalah estimasi berlebih Q-value dan sering berkinerja lebih baik daripada DQN.

Latihan ini adalah bagian dari kursus

Deep Reinforcement Learning dengan Python

Lihat Kursus

Petunjuk latihan

  • Hitung aksi berikutnya untuk perhitungan Q-target menggunakan online_network(), pastikan Anda memperoleh aksi dan bentuk yang benar.
  • Estimasikan Q-value untuk aksi tersebut dengan target_network(), kembali pastikan Anda memperoleh nilai dan bentuk yang benar.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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)
Edit dan Jalankan Kode