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

Experience Replay Buffer

ในแบบฝึกหัดนี้ จะสร้างโครงสร้างข้อมูลเพื่อรองรับ Experience Replay ซึ่งจะช่วยให้ agent เรียนรู้ได้อย่างมีประสิทธิภาพมากขึ้น

Replay Buffer นี้ควรรองรับการทำงาน 2 อย่าง ได้แก่:

  • จัดเก็บ experience ไว้ในหน่วยความจำสำหรับการสุ่มเลือกในภายหลัง
  • "เล่นซ้ำ" (replay) batch ของ experience ในอดีตที่สุ่มเลือกมาจากหน่วยความจำ

เนื่องจากข้อมูลที่สุ่มจาก replay buffer จะถูกนำไปป้อนให้กับโครงข่ายประสาทเทียม buffer จึงควรคืนค่าเป็น torch Tensor เพื่อความสะดวก

โมดูล torch และ random รวมถึงคลาส deque ได้ถูก import เข้ามาในสภาพแวดล้อมของแบบฝึกหัดนี้แล้ว

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

Deep Reinforcement Learning ด้วย Python

ดูคอร์ส

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

  • เติมเมธอด push() ของ ReplayBuffer ให้สมบูรณ์ โดยเพิ่ม experience_tuple เข้าไปใน buffer memory
  • ในเมธอด sample() ให้สุ่มตัวอย่างขนาด batch_size รายการจาก self.memory
  • ยังอยู่ในเมธอด sample() เช่นกัน โดยตัวอย่างที่สุ่มได้ในขั้นแรกจะอยู่ในรูปแบบลิสต์ของ tuple ให้แปลงให้เป็น tuple ของลิสต์
  • แปลง actions_tensor ให้มีรูปร่างเป็น (batch_size, 1) แทนที่จะเป็น (batch_size)

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

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

class ReplayBuffer:
    def __init__(self, capacity):
        self.memory = deque([], maxlen=capacity)
    def push(self, state, action, reward, next_state, done):
        experience_tuple = (state, action, reward, next_state, done)
        # Append experience_tuple to the memory buffer
        self.memory.____    
    def __len__(self):
        return len(self.memory)
    def sample(self, batch_size):
        # Draw a random sample of size batch_size
        batch = ____(____, ____)
        # Transform batch into a tuple of lists
        states, actions, rewards, next_states, dones = ____
        states_tensor = torch.tensor(states, dtype=torch.float32)
        rewards_tensor = torch.tensor(rewards, dtype=torch.float32)
        next_states_tensor = torch.tensor(next_states, dtype=torch.float32)
        dones_tensor = torch.tensor(dones, dtype=torch.float32)
        # Ensure actions_tensor has shape (batch_size, 1)
        actions_tensor = torch.tensor(actions, dtype=torch.long).____
        return states_tensor, actions_tensor, rewards_tensor, next_states_tensor, dones_tensor
แก้ไขและรันโค้ด