Читать книгу Нейросети. Основы онлайн
returns_sum[(state, action)] += G
returns_count[(state, action)] += 1
Q[state][action] = returns_sum[(state, action)] / returns_count[(state, action)]
# Тестирование агента после обучения
def test_policy(Q, num_episodes=10000):
wins = 0
draws = 0
losses = 0
for _ in range(num_episodes):
state = env.reset()
done = False
while not done:
action = np.argmax(Q[state])
state, reward, done, _ = env.step(action)
if reward > 0:
wins += 1
elif reward == 0:
draws += 1
else:
losses += 1
print(f"Wins: {wins / num_episodes:.2f}, Draws: {draws / num_episodes:.2f}, Losses: {losses / num_episodes:.2f}")
test_policy(Q)
```
Объяснение кода
1. Инициализация окружения и параметров:
– Создаем окружение `Blackjack-v1` из OpenAI Gym.
– Устанавливаем количество эпизодов для обучения и коэффициент дисконтирования `gamma`.
2. Функция для выбора действия:
– Используем ε-жадную стратегию для выбора действия. С вероятностью `epsilon` выбирается случайное действие, иначе выбирается действие с максимальным Q-значением для текущего состояния.
3. Инициализация Q-таблицы и возвратов:
– Q-таблица инициализируется нулями с использованием `defaultdict`.
– `returns_sum` и `returns_count` используются для хранения сумм и счетчиков возвратов для каждой пары «состояние-действие».
4. Основной цикл обучения:
– В каждом эпизоде агент взаимодействует с окружением, выполняя действия и записывая последовательность состояний, действий и наград.
– После завершения эпизода вычисляется общий возврат `G` путем обратного прохода по эпизоду и обновляется Q-таблица для уникальных пар «состояние-действие».
5. Тестирование агента:
– После завершения обучения агент тестируется в окружении, используя политику, основанную на максимальных Q-значениях.
– Выводится статистика побед, ничьих и поражений.
Этот пример демонстрирует использование методов Монте-Карло для оценки стратегий на основе эпизодических возвратов в задаче блэкджека. Агент учится принимать оптимальные решения, основываясь на накопленном опыте из большого числа эпизодов.