Читать книгу Нейросети. Основы онлайн

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. Параметры обучения:

– Определены параметры обучения, такие как размер пакета, коэффициент дисконтирования, начальная вероятность случайного действия, скорость обучения и количество эпизодов.