Tam DQN algoritmasını uygulama
Zaman geldi çattı! Tüm önkoşullar tamamlandı; şimdi tam DQN algoritmasını uygulayacak ve bunu bir Lunar Lander ajanını eğitmek için kullanacaksın. Bu, algoritmanın sadece Experience Replay değil, aynı zamanda Azalan Epsilon- Açgözlülük (Decayed Epsilon-Greediness) ve Sabit Q-Hedefleri (Fixed Q-Targets) de kullanacağı anlamına geliyor.
Azalan Epsilon-Açgözlülüğü uygulayan select_action() fonksiyonu kullanıma hazır; ayrıca önceki egzersizden update_target_network() fonksiyonu da elinde. Geriye kalan tek şey bu fonksiyonları DQN eğitim döngüsüne yerleştirmek ve kayıp hesaplamalarında Hedef Ağı doğru kullandığından emin olmak.
Zamanla \(\varepsilon\) değerini azaltmak için yeni bir adım sayacı olan total_steps değişkenini tutman gerekiyor. Bu değişken senin için 0 değeriyle başlatıldı.
Bu egzersiz
Python ile Deep Reinforcement Learning
kursunun bir parçasıdırEgzersiz talimatları
- Aracının eylemini seçmek ve Azalan Epsilon-Açgözlülüğü uygulamak için
select_action()kullan; bölümler boyunca biriken toplam içintotal_stepsdeğişkenine ihtiyacın olacak. - TD hedefini hesaplamadan önce gradyan takibini kapat.
- Bir sonraki durumu elde ettikten sonra, bir sonraki durumun Q-Değerlerini al.
- Her adımın sonunda hedef ağı güncelle.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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)
# Select the action with epsilon greediness
action = ____(____, ____, 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)
# Ensure gradients are not tracked
with ____:
# Obtain the next state Q-values
next_q_values = ____(next_states).amax(1)
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 the target network weights
____(____, ____, tau=.005)
state = next_state
episode_reward += reward
describe_episode(episode, reward, episode_reward, step)