- 选择阶段:MCTS反复选择当前状态的得分最高的子节点。如果当前状态是根节点,那么这些孩子从哪里来的呢?难道你没有一个只有一个根节点的树开始?只有一个根节点,您是否马上进入扩展和模拟阶段?
选择步骤通常实施不实际这实际上存在于树节点中选择(已经通过扩展步骤中创建)。它通常被ipmlemented选择匹配你当前节点的游戏状态的所有可能的后继状态。因此,在刚开始的时候,当你只有一个根节点时,你会希望你的选择步骤仍然能够从所有可能的后继游戏状态中选择一个(即使它们没有匹配树中的节点)。通常情况下,对于尚未访问过的游戏状态(在树中没有节点),您需要非常高的分数(无限大,或者一些非常大的常数)。这样,你的选择步骤将总是随机地在没有匹配节点的状态中进行选择,并且只有在所有可能的游戏状态在树中具有匹配节点的情况下才真正使用探索与利用权衡。
- 如果MCTS选择在选择阶段得分最高的子节点,你永远探索其他的孩子甚至可能是一个全新的孩子,而下降树的水平?
的“”得分'使用选择步骤通常应不只是模拟通过该节点的去所有结果的平均值。它通常应该是一个由两部分组成的分数;一个“探索”部分,对于已经很少被访问的节点来说是很高的,还有一个“开发”部分,对于目前看起来是很好的移动的节点来说是很高的(这里很多仿真都以一个胜利结束对于允许选择移动的玩家来说)。这在您链接的论文的第3.4节中有描述。 W(s, a)/N(s, a)
是开发部分(简单的平均分数),而B(s, a)
是探索部分。
- 节点的扩展阶段如何发生?在上图中,为什么不选择叶节点,而是决定将叶节点添加到叶节点?
膨胀处理通常被实现简单的添加相应于由选择步骤选择的最后一场比赛状态的节点(以下是我回答你的第一个问题,在选择步骤总是会选择一个游戏结束以前从未选择的状态)。
- 在模拟阶段,使用随机策略为两个玩家选择合法移动,直到游戏结束。这个随机策略是一种硬编码的行为,你基本上在模拟中掷骰子,以便在每个玩家之间轮流选择其中一种可能的动作,直到最后?
最直接的(也可能是最常见的)实现的确是完全随机播放。尽管如此,也可以做到这一点。例如,您可以使用启发式方法为某些操作创建偏向。通常,完全随机播放速度更快,可以让您在相同的处理时间内运行更多模拟。但是,它通常也意味着每个单独的模拟信息都较少,这意味着您实际上需要运行更多的MCTS模拟才能发挥出色。
- 我明白这是你开始在一个根节点和通过重复上述相在构造树到一定深度的方式。然后你选择第二级别中得分最高的孩子作为下一步。你愿意构建的树的大小基本上是你的硬性AI响应要求吗?由于在构建树时,游戏将停止并计算该树。
MCTS不统一探索树的所有部分到相同的深度。它倾向于探索看起来比较有趣的部分(强烈的动作),比看起来没有兴趣的部分(弱动作)更深。所以,通常你不会真的使用深度限制。相反,您可以使用时间限制(例如,持续运行迭代,直到您花费1秒,5秒或1分钟,或者您允许的任何处理时间量)或迭代次数限制(例如,允许它运行10K或50K或任意数量的仿真)。
感谢您对MCST的一般性解释,但这种高级解释都可以从我链接的资源中获得。我所追求的是那些我不明白的具体问题,现在我决定为游戏编写一个AI代码。 – jiminssy