المكوّنات الأساسية لـ DQN
ذاكرة الإعادة (Replay Buffer)
class ReplayBuffer:
def __init__(self, capacity=10000):
self.buffer = deque(maxlen=capacity)
def push(self, state, action, reward, next_state, done):
self.buffer.append((state, action, reward, next_state, done))
def sample(self, batch_size):
return random.sample(self.buffer, batch_size)
شبكة Q
class DQN(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.net = nn.Sequential(
nn.Linear(state_dim, 256), nn.ReLU(),
nn.Linear(256, 256), nn.ReLU(),
nn.Linear(256, action_dim)
)
def forward(self, x): return self.net(x)
نقاط رئيسية في حلقة التدريب
- الشبكة الهدف: انسخ الأوزان كل 1000 خطوة (يمنع التذبذب)
- تناقص إبسيلون: خطي من 1.0 إلى 0.01 على مدى 50 ألف خطوة
- حجم الدفعة: 64، التحديث كل 4 خطوات
- Double DQN: يقلّل تحيّز المبالغة في التقدير