【问题标题】:How does Monte Carlo Search Tree work?蒙特卡洛搜索树如何工作?
【发布时间】:2017-05-28 18:55:31
【问题描述】:

尝试使用 YouTube 视频和类似这样的论文来学习 MCST。

http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/grand-challenge.pdf

但是,除了高级理论解释之外,我没有太多运气理解细节。以下是上述论文的一些引述和我的问题。

  1. 选择阶段:MCTS 迭代选择当前状态得分最高的子节点。如果当前状态是根节点,那么这些孩子最初是从哪里来的?你不会有一棵只有一个根节点的树吗?只有一个根节点,您是否会立即进入扩展和模拟阶段?

  2. 如果 MCTS 在选择阶段选择得分最高的子节点,那么您在沿着树的各个层级下去时永远不会探索其他子节点甚至可能是全新的子节点?

  3. 节点的扩展阶段如何发生?上图中,为什么不选择叶子节点,而是决定给叶子节点添加兄弟节点?

  4. 在模拟阶段,随机策略用于为双方玩家选择合法移动,直到游戏结束。这种随机策略是否是一种硬编码行为,并且您基本上是在模拟中掷骰子以选择每个玩家之间轮流直到结束的可能动作之一?

  5. 我理解的方式是从单个根节点开始,并通过重复上述阶段将树构造到一定深度。然后你选择第二级得分最高的孩子作为你的下一步行动。您愿意构建的树的大小基本上是您对 AI 响应能力的硬性要求,对吧?因为在构建树的过程中,游戏会停止并计算这棵树。

【问题讨论】:

    标签: montecarlo monte-carlo-tree-search


    【解决方案1】:
    1. 选择阶段:MCTS 迭代选择当前状态得分最高的子节点。如果当前状态是根节点,那么这些孩子最初是从哪里来的?你不会有一棵只有一个根节点的树吗?只有一个根节点,您是否会立即进入扩展和模拟阶段?

    选择步骤通常不会在树中确实存在的节点中进行实际选择(通过扩展步骤创建)。通常会在与当前节点匹配的游戏状态的所有可能后继状态中进行选择。

    因此,在一开始,当您只有一个根节点时,您会希望选择步骤仍然能够从所有可能的后续游戏状态中选择一个(即使它们没有匹配的节点在树上)。通常,对于尚未访问过的游戏状态(树中还没有节点),您会想要一个非常高的分数(无限或一些非常大的常数)。这样,您的选择步骤将始终在尚无匹配节点的任何状态中随机选择,并且仅在所有可能的游戏状态在树中都已具有匹配节点的情况下才真正使用探索与利用的权衡.

    1. 如果 MCTS 在选择阶段选择得分最高的子节点,那么您在沿着树的层级向下走时永远不会探索其他子节点甚至可能是全新的子节点?

    选择步骤使用的“分数”通常不应只是通过该节点的所有模拟结果的平均值。它通常应该是一个由两部分组成的分数;一个“探索”部分,对于相对不经常访问的节点来说很高,以及一个“利用”部分,对于到目前为止看起来不错的节点(其中许多模拟通过该节点以胜利结束)对于允许选择移动的玩家)。这在您链接的论文的第 3.4 节中进行了描述。 W(s, a) / N(s, a) 是开发部分(简单的平均分),B(s, a) 是探索部分。

    1. 节点的扩展阶段如何发生?上图中,为什么不选择叶子节点,而是决定给叶子节点添加兄弟节点?

    扩展步骤通常被实现为简单地添加一个与选择步骤选择的最终游戏状态相对应的节点(按照我对您的第一个问题的回答,选择步骤将始终以选择一个从未出现过的游戏状态结束之前选择)。

    1. 在模拟阶段,随机策略用于为双方玩家选择合法移动,直到游戏结束。这种随机策略是否是一种硬编码行为,并且您基本上是在模拟中掷骰子以选择每个玩家之间轮流进行的可能动作之一,直到结束?

    最直接(也可能是最常见)的实现确实是完全随机播放。不过,也可以以不同的方式执行此操作。例如,您可以使用启发式方法对某些操作产生偏见。通常,完全随机播放速度更快,允许您在相同的处理时间内运行更多模拟。但是,这通常也意味着每个单独的模拟信息量较少,这意味着您实际上需要运行更多模拟才能使 MCTS 发挥良好的作用。

    1. 我理解的方式是从单个根节点开始,通过重复上述阶段,将树构造到一定深度。然后你选择第二级得分最高的孩子作为你的下一步行动。您愿意构建的树的大小基本上是您对 AI 响应能力的硬性要求,对吧?因为在构建树时,游戏会停止并计算这棵树。

    MCTS 不会统一探索树的所有部分到相同的深度。它倾向于探索看起来有趣的部分(强动作),而不是看起来无趣的部分(弱动作)。因此,通常您不会真正使用深度限制。相反,您将使用时间限制(例如,继续运行迭代,直到您花费 1 秒、5 秒或 1 分钟,或者您允许的任何处理时间),或迭代计数限制(例如,允许它运行 10K 或 50K 或您喜欢的任意数量的模拟)。

    【讨论】:

      【解决方案2】:

      基本上,蒙特卡洛是:随机尝试多次(*),然后在大多数情况下保持导致最佳结果的移动。

      (*) : 次数和深度取决于你想要达到的决定的速度。

      因此,根节点始终是当前游戏状态,直系子节点是您的可能的移动。 如果您可以进行 2 次移动(是/否,左/右,...),那么您有 2 个子节点。

      如果你不能做任何动作(这可能取决于游戏),那么你没有任何决定要做,那么蒙特卡洛对这个动作毫无用处。

      如果您有 X 个可能的移动(国际象棋游戏),那么每个可能的移动都是一个直接子节点。

      然后,(在 2 人游戏中),每一关都在交替“你的动作”、“对手的动作”等等。

      如何遍历树应该是随机的(统一的)。

      你的移动1(子1级的随机移动)

      他的着法4(次级2的随机着法)

      你的移动 3(子级别 3 的随机移动)-> 赢了

      选择一个参考最大深度并评估你输赢的次数(或者如果游戏在 X 深度后没有结束,则有一些评估函数)。

      您重复操作 Y 次(相当大),然后选择直接子节点(又名:您的移动),这会导致您在大多数情况下获胜。

      这是为了评估您现在应该采取的行动。在此之后,对手移动,又轮到你了。所以你必须重新创建一棵树,根节点是新的当前情况,并重做蒙特卡洛技术来猜测你最好的可能举动是什么。以此类推。

      【讨论】:

      • 感谢您对 MCST 的一般解释,但这种高级解释都可以从我链接的资源中获得。我所追求的是那些我现在不明白的具体问题,因为我决定为游戏编写一个 AI。
      猜你喜欢
      • 2017-08-12
      • 2018-06-27
      • 2020-04-09
      • 2012-02-21
      • 2018-05-03
      • 1970-01-01
      • 2020-03-13
      • 2014-07-11
      • 1970-01-01
      相关资源
      最近更新 更多