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