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):
G = gamma * G + reward
if not any((s == state and a == action) for s, a, _ in episode[:-1]):
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-значениях.
– Выводится статистика побед, ничьих и поражений.
Этот пример демонстрирует использование методов Монте-Карло для оценки стратегий на основе эпизодических возвратов в задаче блэкджека. Агент учится принимать оптимальные решения, основываясь на накопленном опыте из большого числа эпизодов.
Deep Q-Learning
Deep Q-Learning – это расширение Q-обучения, которое использует глубокие нейронные сети для представления и обновления Q-значений. Это позволяет агентам принимать более сложные и информированные решения в средах с высоким уровнем сложности и большим количеством состояний и действий. В традиционном Q-обучении Q-таблица используется СКАЧАТЬ