许多游戏有多个通往相同状态的路径。在 MCTS 中处理此问题的适当方法是什么?
如果状态在树中出现一次,但有多个父节点,那么似乎很难定义反向传播:我们是否只沿着让我们“这个”时间到达那里的路径反向传播?或者我们是否将信息整合到任何地方?或者也许沿着“第一”路径?
如果状态在树中出现一次,但只有一个父级,那么我们忽略了其中一个路径,但这没关系,因为根据定义,这是同一个状态?
如果状态在树中出现两次,我们不是在浪费大量资源多次思考它吗?
许多游戏有多个通往相同状态的路径。在 MCTS 中处理此问题的适当方法是什么?
如果状态在树中出现一次,但有多个父节点,那么似乎很难定义反向传播:我们是否只沿着让我们“这个”时间到达那里的路径反向传播?或者我们是否将信息整合到任何地方?或者也许沿着“第一”路径?
如果状态在树中出现一次,但只有一个父级,那么我们忽略了其中一个路径,但这没关系,因为根据定义,这是同一个状态?
如果状态在树中出现两次,我们不是在浪费大量资源多次思考它吗?
如果状态在树中出现两次,我们不是在浪费大量资源多次思考它吗?
你说得对。在 MCTS 出现之前的几十年里,在 MCTS 之前的游戏中使用的经典极小极大树搜索算法(alpha-beta 搜索等)中也注意到了同样的问题。解决方案也大致相同;换位表。
在 MCTS 的情况下,算法使用的通常与节点(或其输入边)相关的统计数据可以存储在转置表的条目中。我的意思是诸如访问次数和反向传播分数的总和(或平均值)之类的东西。
关于它如何工作的简要描述以及对更广泛相关文献的参考,可以在著名的 2012 年关于 MCTS 的调查论文的第 5.2.4 小节中找到。
这确实要求您可以有效地(增量地)计算您遇到的状态的哈希值,这可能并不总是那么容易(通常应该是可能的,取决于您的问题域的详细信息)。在 MCTS 中使用转置也不能保证实际提高性能。它确实带来了计算开销,并且在转置非常罕见的游戏中,简单地忽略它们并使用常规树结构可能更有效。
树中的节点必须有一个父节点,否则它违反了树的定义。同样在我看来,当你做 MCTS 时没有“相同”的状态。因为你保留了你如何到达那里的历史。因此,您第二次访问“相同”状态时,它将具有不同的历史路径和单亲。