Začněte nyníZačněte zdarma

Implementace kompletního algoritmu DQN

Ten okamžik konečně přišel! Všechny přípravy jsou hotové – teď implementuješ kompletní algoritmus DQN a použiješ ho k trénování agenta Lunar Lander. Tvůj algoritmus bude využívat nejen Experience Replay, ale také Decayed Epsilon-Greediness a Fixed Q-Targets.

K dispozici máš funkci select_action() implementující Decayed Epsilon Greediness a také funkci update_target_network() z předchozího cvičení. Zbývá už jen zapojit tyto funkce do trénovací smyčky DQN a zajistit, aby se cílová síť správně používala při výpočtu chybové funkce.

Budeš potřebovat nový čítač kroků total_steps, který slouží k postupnému snižování hodnoty \(\varepsilon\) v čase. Tato proměnná je pro tebe inicializována s hodnotou 0.

Toto cvičení je součástí kurzu

Deep Reinforcement Learning v Pythonu

Zobrazit kurz

Pokyny k cvičení

  • Pomocí funkce select_action() implementuj Decayed Epsilon Greediness a vyber akci agenta; použij přitom total_steps – průběžný součet kroků napříč epizodami.
  • Před výpočtem TD targetu vypni sledování gradientů.
  • Po získání dalšího stavu načti Q-hodnoty pro tento stav.
  • Na konci každého kroku aktualizuj cílovou síť.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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)
Upravit a spustit kód