Читать книгу Нейросети. Основы онлайн
state_batch = torch.tensor(batch.state, dtype=torch.float32)
action_batch = torch.tensor(batch.action).unsqueeze(1)
reward_batch = torch.tensor(batch.reward, dtype=torch.float32)
non_final_mask = torch.tensor(tuple(map(lambda s: s is not None, batch.next_state)), dtype=torch.bool)
non_final_next_states = torch.tensor([s for s in batch.next_state if s is not None], dtype=torch.float32)
state_action_values = policy_net(state_batch).gather(1, action_batch)
next_state_values = torch.zeros(batch_size)
next_state_values[non_final_mask] = target_net(non_final_next_states).max(1)[0].detach()
expected_state_action_values = reward_batch + (gamma * next_state_values)
loss = nn.functional.mse_loss(state_action_values.squeeze(), expected_state_action_values)
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Основной цикл обучения
for episode in range(num_episodes):
state = env.reset()
total_reward = 0
done = False
while not done:
action = select_action(state, epsilon)
next_state, reward, done, _ = env.step(action)
total_reward += reward
if done:
next_state = None
store_transition(state, action, next_state, reward)
state = next_state
optimize_model()
if epsilon > epsilon_min:
epsilon *= epsilon_decay
if episode % target_update == 0:
target_net.load_state_dict(policy_net.state_dict())
print(f"Episode {episode}, Total Reward: {total_reward}")
# Тестирование агента после обучения
state = env.reset()
done = False
total_reward = 0
while not done:
action = select_action(state, epsilon=0.0) # Без ε-жадной стратегии
state, reward, done, _ = env.step(action)
total_reward += reward
env.render()
print(f"Total reward after training: {total_reward}")
env.close()
```
Объяснение кода
1. Определение архитектуры нейронной сети:
– Сеть состоит из трех полносвязных слоев. Входной слой принимает состояние среды, а выходной слой предсказывает Q-значения для каждого возможного действия.
2. Параметры обучения:
– Определены параметры обучения, такие как размер пакета, коэффициент дисконтирования, начальная вероятность случайного действия, скорость обучения и количество эпизодов.