artificial-intelligence - 带有评分系统的 MCTS UCT

标签 artificial-intelligence montecarlo

我正在尝试通过蒙特卡罗树搜索解决 2048 的变体。我发现 UCT 是一种在探索/开发之间进行权衡的好方法。

我唯一的问题是我见过的所有版本都假设得分是胜率。我怎样才能让它适应一个游戏,其中分数是最后一个状态的棋盘值(value),因此从 1-MAX 开始而不是胜利。

score formula

我可以通过除以 MAX 使用常数 c 来标准化分数,但是它会在游戏早期过重探索(因为你的平均分数很差)并在游戏后期过重开发。

最佳答案

事实上,大多数文献都假设您的游戏是 输或赢并给予评分 0 或 1 ,这将变成 胜率当平均超过玩的游戏次数时。然后探索参数 C 通常设置为 sqrt(2),这对于强盗问题中的 UCB 是最佳的。

要了解什么是好的 C 语言,您必须退后一步,看看 UCT 真正在做什么。如果你的树中的一个节点在它的一次部署中得分特别差,那么漏洞利用表明你不应该再次选择它。但是你只玩过一次那个节点,所以它可能只是 倒霉 .为了承认这一点,你给那个节点一个奖金。多少?足以使它成为一个可行的选择 即使它的平均分数是最低的,而其他节点的平均分数可能是最高的 .因为如果有足够的播放次数,可能会发现您的坏节点的一次推出确实是侥幸,而该节点实际上非常可靠,得分很高。当然,如果你得到更多糟糕的分数,那么它可能不是运气不好,所以它不值得更多的推出。

因此,对于从 0 到 1 的分数,sqrt(2) 的 C 是一个很好的值。如果您的游戏有最高可达到的分数,那么您可以 标准化您的分数 通过除以最大值并将您的分数强制为 0-1 范围以适应 sqrt(2) 的 C。或者你不标准化分数而是 将 C 乘以您的最高分 .效果是一样的:UCT 探索奖励足够大,可以让你的劣势节点进行一些推广,并有机会证明自己。

还有另一种方式动态设置 C 这给了我很好的结果。在玩游戏时,您可以跟踪您在每个节点(和子树)中见过的最高和最低分数。这是分数范围可能,这给了你一个暗示 C 应该有多大,以便给没有充分探索的失败节点一个公平的机会。每次我下降到树中并选择一个新的根时,我都会将 C 调整为 sqrt(2) * 分数范围 为新根。此外,随着部署完成并且他们的分数变成新的最高或最低分数,我以相同的方式调整 C。通过在演奏时以这种方式不断调整 C 以及在选择新根时,您可以保持 C 收敛所需的大小 但是 尽可能小以快速收敛 .请注意,最低分数与最高分数一样重要:如果每次推出至少会产生某个分数,那么 C 将不需要克服它。只有最大值和最小值之间的差异才重要。

关于artificial-intelligence - 带有评分系统的 MCTS UCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664993/

相关文章:

python - Tensorflow 可以计算积分近似的梯度吗?

performance - Julia 中的矢量比较速度更快

algorithm - 为步步高找到公平

algorithm - 没有树的极小极大

python - 运行时错误: both arguments to matmul need to be at least 1d but they are 0d and 2d

artificial-intelligence - 请帮助我选择正确的分类器

algorithm - 机器学习算法

python - Python 中的伊辛模型

c++ - 检测两幅图像之间的差异

c++ - 为什么当我选择 >250000 个样本点时,程序不起作用?