ISBN :
Возрастное ограничение : 12
Дата обновления : 17.07.2024
done = False
while not done:
action = choose_action(state)
next_state, reward, done, _ = env.step(action)
update_q_table(state, action, reward, next_state)
state = next_state
# Тестирование агента после обучения
state = env.reset()
done = False
total_reward = 0
while not done:
action = np.argmax(q_table[state])
state, reward, done, _ = env.step(action)
total_reward += reward
env.render()
print(f"Total reward after training: {total_reward}")
env.close()
```
Объяснение кода
1. Инициализация окружения и параметров:
– Создаем окружение `CliffWalking-v0` из OpenAI Gym.
– Устанавливаем параметры Q-обучения: `alpha` (скорость обучения), `gamma` (коэффициент дисконтирования) и `epsilon` (вероятность выбора случайного действия).
2. Инициализация Q-таблицы:
– Q-таблица инициализируется нулями. Она будет хранить Q-значения для всех пар «состояние-действие».
3. Выбор действия:
– Используем ?-жадную стратегию для выбора действия. С вероятностью `epsilon` выбирается случайное действие, иначе выбирается действие с максимальным Q-значением для текущего состояния.
4. Обновление Q-таблицы:
– Вычисляем целевое значение (TD target), состоящее из текущего вознаграждения и максимального Q-значения для следующего состояния.
– Обновляем Q-значение для текущей пары «состояние-действие» с использованием разности TD (TD error).
5. Основной цикл обучения:
– В каждом эпизоде агент взаимодействует с окружением, выполняя действия и обновляя Q-таблицу на основе полученного опыта.
– Процесс повторяется до тех пор, пока агент не достигнет конечного состояния.
6. Тестирование агента:
– После завершения обучения агент тестируется в окружении, используя политику, основанную на максимальных Q-значениях.
– Выводится общее вознаграждение, полученное агентом.
Этот пример демонстрирует базовый алгоритм Q-обучения и его применение в простой среде. Q-обучение эффективно используется в задачах обучения с подкреплением, где агент должен принимать решения, основываясь на опыте взаимодействия со средой.
Случайные блуждания (Методы Монте-Карло)
Методы Монте-Карло (Monte Carlo methods) представляют собой класс алгоритмов, которые используют случайные блуждания для оценки стратегий на основе долгосрочных наград. В отличие от Q-обучения, методы Монте-Карло не требуют знания модели среды. Вместо этого, они основываются на многократных симуляциях взаимодействия агента со средой, в ходе которых вычисляются средние значения наград. Каждая симуляция представляет собой эпизод, включающий последовательность состояний, действий и полученных вознаграждений до достижения конечного состояния. После завершения эпизода метод Монте-Карло обновляет оценки значений состояний или действий, используя накопленные награды. Это позволяет агенту улучшать свою политику, опираясь на накопленный опыт.
Рассмотрим пример использования методов Монте-Карло для обучения агента в задаче "Blackjack" из OpenAI Gym. В этой задаче агент учится играть в блэкджек, используя эпизодическую оценку долгосрочных наград.
Описание задачи и игры "Blackjack"
"Blackjack" (или "21") – это популярная карточная игра, в которой игрок соревнуется против дилера. Цель игры – набрать количество очков, как можно ближе к 21, но не больше этого числа. В OpenAI Gym среда "Blackjack-v1" симулирует эту игру и предоставляет интерфейс для обучения агентов.
Правила игры
1. Карты и их значения:
– Номера карт от 2 до 10 имеют номинальную стоимость.
– Валет, Дама и Король (карты с картинками) имеют стоимость 10 очков.
– Туз может считаться как 1 очко или как 11 очков, в зависимости от того, что лучше для руки.
2. Начало игры:
– И игрок, и дилер получают по две карты.
– Одна из карт дилера открыта, а другая скрыта.
3. Действия игрока:
– Hit: Игрок берет еще одну карту.
– Stand: Игрок прекращает набор карт и передает ход дилеру.
4. Ход дилера:
– Дилер открывает свою скрытую карту.
– Дилер должен продолжать брать карты (hit), пока сумма его очков не станет 17 или больше.
5. Определение победителя:
– Если сумма очков игрока превышает 21, он проигрывает (bust).
– Если игрок и дилер остаются в игре (не превышают 21), выигрывает тот, у кого сумма очков ближе к 21.
– Если у дилера сумма очков превышает 21, дилер проигрывает (bust).
– Если сумма очков у игрока и дилера одинакова, игра заканчивается вничью (push).
Задача агента – научиться принимать оптимальные решения (hit или stand) в различных состояниях игры, чтобы максимизировать свое общее вознаграждение (выигрыши).
Установка необходимых библиотек
Для начала нужно установить OpenAI Gym, если он еще не установлен:
```bash
pip install gym
```
Пример кода
```python
import numpy as np
import gym
from collections import defaultdict
# Создаем окружение "Blackjack-v1"
env = gym.make('Blackjack-v1')
# Параметры Монте-Карло
num_episodes = 500000
gamma = 1.0 # Коэффициент дисконтирования
# Функция для выбора действия на основе ?-жадной стратегии
def epsilon_greedy_policy(state, Q, epsilon=0.1):
if np.random.rand() < epsilon:
return env.action_space.sample()
else:
return np.argmax(Q[state])
# Инициализация Q-таблицы и возвратов
Q = defaultdict(lambda: np.zeros(env.action_space.n))
returns_sum = defaultdict(float)
returns_count = defaultdict(float)
# Основной цикл обучения
for episode in range(num_episodes):
state = env.reset()
episode = []
done = False
while not done:
action = epsilon_greedy_policy(state, Q)
next_state, reward, done, _ = env.step(action)
episode.append((state, action, reward))
state = next_state
# Обновление Q-таблицы на основе эпизодических возвратов
G = 0
for state, action, reward in reversed(episode):
Все книги на сайте предоставены для ознакомления и защищены авторским правом