Поиск дерева Монте-Карло - "самая многообещающая" функция перемещения
Я пытался реализовать игру TTS-Tac-Toe Hello-World MCTS, но столкнулся с проблемой.
При моделировании игры и выборе "самого многообещающего" (эксплуатирующего / исследующего) узла я учитываю только общее количество выигрышей (часть "эксплойт") - это вызывает определенную проблему, полученный алгоритм вообще не является защитным. В результате при выборе между
- ход, который приводит к (100 ничьих; 10 поражений)
- ход, в результате которого (1 победа; 109 поражений)
выбирается худший (1; 109), потому что моя функция uct жадно считает avg побед вместо "value".
Правильно ли я идентифицирую эту проблему? Должен ли я перейти от "avg wins" к какой-либо другой метрике значения, которая учитывает все типы результатов?
Любой совет приветствуется, спасибо
1 ответ
Так как крестики-нолики - это игра с нулевой суммой (значение состояния для одного игрока всегда равно отрицательному значению для противника), ваша функция счета также должна отражать это.
Это означает, что при вычислении средних баллов вы должны использовать значения, подобные следующим:
- +1 за каждую победу
- 0 за каждый розыгрыш
- -1 за каждую потерю
В вашем примере это привело бы к следующим средним баллам:
- ход, который приводит к (100 ничьих; 10 поражений): ср. оценка =
-10/110 = -0.0909...
- ход, в результате которого (1 победа; 109 поражений): ср. оценка =
-108/110 = -0.98181...
Таким образом, первый вариант будет рассматриваться как лучший вариант