Я пытаюсь понять Q-Learning,
Мой текущий алгоритм работает следующим образом:
1. Ведется справочная таблица, которая сопоставляет состояние с информацией о его немедленном вознаграждении и полезности для каждого доступного действия.
2. В каждом состоянии проверяйте, содержится ли оно в таблице поиска, и инициализируйте его, если нет (с утилитой по умолчанию, равной 0).
3. Выберите действие с вероятностью:
(*ϵ* = 0>ϵ>1 - probability of taking a random action)
1-ϵ = Choosing the state-action pair with the highest utility.
ϵ = Choosing a random move.
ϵ decreases over time.
4. Обновление полезности текущего состояния на основе:
Q(st, at) += a[rt+1, + d.max(Q(st+1, a)) - Q(st,at)]
В настоящее время я играю со своим агентом против простого эвристического игрока, который всегда делает ход, который даст ему наилучшее немедленное вознаграждение.
Результаты. Результаты очень плохие, даже после пары сотен игр агент Q-Learning проигрывает намного больше, чем выигрывает. Кроме того, изменение винрейта практически отсутствует, особенно после достижения пары сотен игр.
Я что-то упускаю? Я реализовал пару агентов:
(механическое заучивание, TD(0), TD(лямбда), Q-обучение)
Но все они, похоже, дают одинаковые, разочаровывающие результаты.