शुरू करेंमुफ़्त में शुरू करें

Double DQN का प्रशिक्षण

अब आप double DQN लागू करने के लिए अपने DQN वाले कोड में बदलाव करेंगे.

Double DQN में DQN एल्गोरिदम में बहुत छोटा सा परिवर्तन चाहिए, लेकिन यह Q-value overestimation की समस्या काफी हद तक कम कर देता है और प्रायः DQN से बेहतर प्रदर्शन करता है.

यह अभ्यास पाठ्यक्रम का हिस्सा है

Python में Deep Reinforcement Learning

पाठ्यक्रम देखें

अभ्यास निर्देश

  • Q-target की गणना के लिए अगले actions online_network() से निकालें, और सही action व आकार अवश्य प्राप्त करें.
  • इन्हीं actions के लिए Q-values को target_network() से अनुमानित करें, और सही मान व आकार सुनिश्चित करें.

इंटरैक्टिव व्यावहारिक अभ्यास

इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।

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)
कोड संपादित करें और चलाएँ