Mulai sekarangMulai gratis

Mengimplementasikan algoritme DQN lengkap

Akhirnya saatnya tiba! Semua prasyarat telah selesai; sekarang Anda akan mengimplementasikan algoritme DQN lengkap dan menggunakannya untuk melatih agen Lunar Lander. Ini berarti algoritme Anda tidak hanya menggunakan Experience Replay, tetapi juga Decayed Epsilon-Greediness dan Fixed Q-Targets.

Fungsi select_action() yang mengimplementasikan Decayed Epsilon-Greediness tersedia untuk Anda gunakan, demikian juga fungsi update_target_network() dari latihan sebelumnya. Yang tersisa adalah memasukkan fungsi-fungsi tersebut ke dalam loop pelatihan DQN, dan memastikan bahwa Anda menggunakan Target Network dengan benar dalam perhitungan loss.

Anda perlu menjaga pencacah langkah baru, total_steps, untuk melakukan decay nilai \(\varepsilon\) seiring waktu. Variabel ini telah diinisialisasi untuk Anda dengan nilai 0.

Latihan ini merupakan bagian dari kursus

Deep Reinforcement Learning dengan Python

Lihat Kursus

Instruksi latihan

  • Gunakan select_action() untuk mengimplementasikan Decayed Epsilon-Greediness dan memilih aksi agen; Anda perlu menggunakan total_steps, total kumulatif lintas episode.
  • Sebelum menghitung TD target, matikan pelacakan gradien.
  • Setelah memperoleh state berikutnya, ambil nilai Q untuk state berikutnya.
  • Perbarui target network pada akhir setiap langkah.

Latihan interaktif langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

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