蒙特卡罗搜索树如何运作?

时间:2017-05-28 18:55:31

标签: montecarlo monte-carlo-tree-search

尝试使用YouTube视频和论文来学习MCST。

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

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

enter image description here

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

  2. 如果MCTS在选择阶段选择了得分最高的子节点,那么在沿着树的水平下降时,你永远不会探索其他孩子甚至可能是一个全新的孩子吗?

  3. 节点的扩展阶段如何?在上图中,为什么不选择叶节点但是决定在叶节点上添加一个兄弟节点?

  4. 在模拟阶段,随机策略用于为两个玩家选择合法移动,直到游戏终止。这个随机政策是一个硬编码的行为,你基本上是在模拟中掷骰子来选择在每个玩家之间轮流的可能动作之一直到结束?

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

2 个答案:

答案 0 :(得分:1)

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

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

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

  
      
  1. 如果MCTS在选择阶段选择得分最高的子节点,那么在从树的水平向下时,你永远不会探索其他孩子,甚至可能是一个全新的孩子?
  2.   

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

  
      
  1. 节点的扩展阶段如何?在上图中,为什么不选择叶节点但是决定在叶节点上添加一个兄弟节点?
  2.   

扩展步骤通常用于简单地添加与选择步骤选择的最终游戏状态相对应的节点(按照我对第一个问题的回答,选择步骤将始终选择一个从未进行过的游戏状态选择之前)。

  
      
  1. 在模拟阶段,随机策略用于为两个玩家选择合法移动,直到游戏终止。这个随机政策是一种硬编码行为,你基本上是在模拟中掷骰子来选择在每个玩家之间轮流直到结束的可能动作之一吗?
  2.   

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

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

MCTS不会将树的所有部分均匀地探索到相同的深度。它倾向于探索看起来有趣(强烈的动作)的部分比看起来不感兴趣的部分(弱动作)更深。所以,通常你不会真正使用深度限制。相反,您将使用时间限制(例如,继续运行迭代,直到您花费1秒,或5秒,或1分钟,或您允许的任何处理时间),或迭代计数限制(例如,允许它运行10K或50K或你喜欢的任何数量的模拟。

答案 1 :(得分:0)

基本上,蒙特卡罗是:随机尝试多次(*),然后保持最佳结果的举动。

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

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

如果你不能做任何动作(可能会发生取决于游戏),那么你没有任何决定,那么Montec Carlo对于这一举动毫无用处。

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

然后,(在2人游戏中),evey等级交替“你的动作”,“对手移动”等等。

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

  

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

     

他的举动4(次级2的随机移动)

     

你的举动3(子级别3的随机移动) - >赢得yay

选择参考最大深度并评估您赢或输的次数(如果在X深度之后游戏没有完成,则会有很多评价函数。)

您重复操作Y次(非常大)并选择直接子节点(又名:您的移动),这会导致您在大多数时间内获胜。

这是为了评估你应该做哪一步现在。在此之后,对手移动,轮到你了。所以你必须重新创建一个树,根节点是新的当前情况,并重做蒙特卡罗技术来猜测你最好的移动是什么。等等。