分数在 0 和 n 之间时蒙特卡罗树搜索的 UCB 公式

Posted

技术标签:

【中文标题】分数在 0 和 n 之间时蒙特卡罗树搜索的 UCB 公式【英文标题】:UCB formula for monte carlo tree search when score is between 0 and n 【发布时间】:2019-12-13 00:21:16 【问题描述】:

我正在使用蒙特卡罗树搜索实现一个播放 2048 年的 AI。根据***https://en.wikipedia.org/wiki/Monte_Carlo_tree_search 和我在扩展步骤中检查的所有其他来源,您应该使用UCB 公式来确定访问哪个节点wi/ni + c*sqrt(ln(N)/ni)。当最后的分数是01(赢或输)时,这个公式很有效,但是,这个公式在 2048 年不起作用,因为分数是介于0n 之间的值我们想要最大化。

有谁知道当分数介于0n 之间时,MCTS 中哪个是用于 UCB 的最佳公式,以便我可以在 2048 游戏中使用它?

谢谢。

【问题讨论】:

这个问题在这里可能是题外话。 ai.stackexchange.com 会更合适,因为它不是关于特定的编程问题,而是关于算法背后的概念。 【参考方案1】:

2048 的最高分似乎是somewhere near 4000000 points。

因此,您只需将可能的最高分数扩展到1

game_score / 3932156

压缩[0, 1] 范围很常见。

一个可能的问题是最大可能分数和最可能分数之间的差异。在 2048 中,分数可能远低于最大值,并且简单的缩放会在一个狭窄的范围内产生大多数分数(而很少使用到 1 的其余范围)。

这可能会在 UCT 计算中产生意想不到的后果,因为由于这种挤压(在不切实际的最高可能分数下),节点看起来比它们应有的更相似。

您必须尝试:它也会发生,而不是挤压精度影响最小(请查看 Using Domain knowledge to Improve Monte-Carlo Tree Search Performance in Parameterized Poker Squares - Robert Arrington, Clay Langley and Steven Bogaerts 了解更多详细信息)。

【讨论】:

使用对数刻度可以避免大多数归一化分数接近 0 的问题。 在实践中使用最大理论分数的“完全”归一化可能很糟糕(如果在实践中实际奖励往往会小得多)。根据您观察到的情况动态规范化可能会更好,这也可以在搜索树内部本地完成(基于不同子树中的不同边界进行规范化)。例如,参见this paper 中第 21 页的顶部(以及整篇论文后面关于规范化的更多讨论)

以上是关于分数在 0 和 n 之间时蒙特卡罗树搜索的 UCB 公式的主要内容,如果未能解决你的问题,请参考以下文章

蒙特卡罗树搜索

蒙特卡洛树搜索介绍

为啥蒙特卡洛树搜索会重置树

蒙特卡洛树搜索介绍

蒙特卡洛树搜索介绍

蒙特卡洛树搜索在实践中是如何实现的