【问题标题】:Transposition table in Monte Carlo Tree Search algorithm unintended effect on UCT score蒙特卡洛树搜索算法中的转置表对 UCT 分数的意外影响
【发布时间】:2018-10-16 03:00:16
【问题描述】:

所以我使用 UCT 在蒙特卡洛树搜索算法中实现了一个转置表。这允许保持游戏状态的累积奖励值,无论在整个树中遇到的位置和次数。这提高了针对特定游戏状态收集的信息的质量。

唉,我注意到这在 UCT 的开发与探索选择阶段产生了某些问题。简而言之,分配给状态的 UCT 分数考虑了访问父状态的次数与访问子状态(我们正在为其计算 UCT 分数)的次数之间的比率。从这张图中可以看出, 当从转置表中拉入一个状态到树的一个新创建的分支中时,这个比例完全不正常,子状态已经被访问了很多次(来自树中的其他地方)并且父状态被访问的次数要少得多,这在技术上应该是不可能的。

因此,使用转置表并保持状态的累积奖励值有助于算法的利用部分做出更好的选择,但同时它以潜在有害的方式扭曲了算法的利用部分。你知道有什么方法可以解决这个意想不到的问题吗?

【问题讨论】:

  • 交叉发布:stackoverflow.com/q/50194982/781723cs.stackexchange.com/q/91537/755。请do not post the same question on multiple sites。每个社区都应该诚实地回答问题,而不会浪费任何人的时间。
  • 我的错,我不知道这是一个规则。我希望能够领先于“这个问题超出了这个社区的范围,你应该尝试将它发布到另一个社区”的评论,我每发布一个问题就会收到 ;-)
  • 没问题,你不可能知道。您可以选择一个您希望它出现的站点。如果您对它出现在 SO 上感到满意,您不需要做任何事情——只需让您知道未来。如果您希望它出现在 CS.SE 而不是 SO,您可以在此处删除 SO 上的副本,然后标记 CS.SE 上的副本以重新打开。
  • 我希望它出现在最有机会获得一些高质量答案的地方,但我不知道那在哪里,因此我将它发布在两个社区中。我想让我们把它留在这里看看会发生什么。
  • 相关论文:“UCD:有根有向无环图的置信上限”hal.archives-ouvertes.fr/hal-01499672/document

标签: algorithm tree hashmap graph-algorithm monte-carlo-tree-search


【解决方案1】:

我已经实现了以下与国际象棋的 Alpha Zero 风格算法配合得很好:

  • 像使用传统 MCTS 一样构建游戏树。
  • 保持游戏状态的转置表映射为其最大访问次数和值总和。
  • 选择一个动作时,检查它是否在其他地方看到了更大的访问计数,以及平均值为(moveValueSum + transpositionValueSum) / (moveVisits + transpositionVisits)
    • 如果当前操作的访问次数多于转置表中的访问次数,则更新转置表。

这样,我们不会对某个操作的所有访问次数求和,而是仅将操作值与访问次数最多的单个实例进行平均。

【讨论】:

    【解决方案2】:

    直觉上,我希望您会想尝试以下方法。

    对于 UCT 的 exploitation 部分,您需要存储和使用子节点的平均分数 W / V。这个平均值可以通过换位共享。因此,在您的示例中,您不一定要分别共享 W = 300V = 600,而只是共享平均分数 W / V = 300 / 600 = 0.5。这意味着,借助转置,您可以共享更准确的分数估计(基于更大样本量的估计)。

    对于 UCT 的 exploration 部分,我认为您会希望使用父节点(没有转置)而不是子节点的“视角”统计信息节点(这是树中其他地方节点的转置)。在选择要转到哪个子节点时,而不是使用子节点的访问计数,这意味着您将使用父节点中每个 state + action 对收集的访问计数。

    例如,假设我们在您写V: 2, W: 300的节点中(将此节点称为P),我们必须选择一个子节点。更标准的实现将遍历子节点,并使用子节点的访问计数。在您的情况下,我认为最好在节点P 中循环actions,并跟踪这些操作而不是子节点的访问计数。在P 中,您还没有采取导致转置子节点的操作,因此(P + action) 对的访问计数仍为0。


    不过,我个人没有 MCTS + 换位组合的经验,因此您可能希望进行更多研究以了解其他人过去的想法。例如有以下论文:

    【讨论】:

      猜你喜欢
      • 2012-02-21
      • 2018-06-27
      • 2020-04-09
      • 2018-05-03
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2017-06-17
      相关资源
      最近更新 更多