เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ฝึก REINFORCE algorithm

ถึงเวลาแล้วที่จะฝึก Lunar Lander ด้วย REINFORCE! สิ่งที่ต้องทำคือ implement training loop ของ REINFORCE รวมถึงการคำนวณ REINFORCE loss

เนื่องจากขั้นตอนการคำนวณ loss ครอบคลุมทั้ง inner loop และ outer loop จึงไม่ใช้ฟังก์ชัน calculate_loss() ในครั้งนี้

เมื่อ episode สิ้นสุดลง สามารถใช้ทั้งสองค่านั้นในการคำนวณ loss ได้

สำหรับข้อมูลอ้างอิง นี่คือนิพจน์ของฟังก์ชัน REINFORCE loss:

จะใช้ฟังก์ชัน describe_episode() เพื่อแสดงผลการทำงานของ agent ในแต่ละ episode อีกครั้ง

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Deep Reinforcement Learning ด้วย Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • เพิ่ม log probability ของ action ที่เลือกไว้ลงใน episode log probabilities
  • เพิ่มค่า episode return ด้วย discounted reward ของ step ปัจจุบัน
  • คำนวณ REINFORCE episode loss

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

for episode in range(50):
    state, info = env.reset()
    done = False
    episode_reward = 0
    step = 0
    episode_log_probs = torch.tensor([])
    R = 0
    while not done:
        step += 1
        action, log_prob = select_action(policy_network, state)                
        next_state, reward, terminated, truncated, _ = env.step(action)
        done = terminated or truncated
        episode_reward += reward
        # Append to the episode action log probabilities
        episode_log_probs = torch.cat((____, ____))
        # Increment the episode return
        R += (____ ** step) * ____
        state = next_state
    # Calculate the episode loss
    loss = ____ * ____.sum()
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    describe_episode(episode, reward, episode_reward, step)
แก้ไขและรันโค้ด