蒙特卡罗树搜索实施

时间:2018-01-18 04:57:59

标签: optimization artificial-intelligence simulation chess montecarlo

我理解MCTS背后的理论,但这是我的问题。游戏中的蒙特卡罗方法需要从当前状态模拟游戏直到达到终端状态。为了使搜索收敛到Minimax(实际的理想移动序列),必须模拟数千甚至数百万的游戏。

我现在这样做的方法是使用我用于普通极小极大搜索的相同移动生成函数,以及相同的make-move函数以及每次移动后检查胜利。在像国际象棋或西洋跳棋这样的复杂游戏中(甚至在简单的游戏中),这些都是非常昂贵的操作。我的问题是:是否有更好的方法来实施游戏模拟以降低成本?我可以不执行完整移动生成,而不是每次都检查胜利吗?任何其他改善模拟时间的方法

1 个答案:

答案 0 :(得分:1)

  

我的问题是:是否有更好的方法来实施游戏模拟以降低成本?我可以不执行完整移动生成,而不是每次都检查胜利吗?

不,你不能真正避免移动生成和检查终端游戏状态。如果你没有产生动作,你就不能选择要移动的动作(显然你需要做的是推进模拟)。如果您没有检查终端游戏状态......您将获得与法律游戏不对应的模拟,并且您不必要地继续模拟太久。

加快移动生成

在某些游戏中,通过仅生成一些动作,可以选择移动而不生成所有移动。例如,在国际象棋中,我想你可以先随机选择一块移动,然后只生成该块的移动并随机选择其中一条。这比为所有作品生成所有合法移动更快,然后随机选择其中一个。但是,它还会在您的移动选择中引入不同的偏差,您最终在模拟中播放的移动的概率分布将不同于所有合法移动的均匀分布。很难说这是好还是坏,但绝对不同。

提前结束模拟

MCTS的一个优点是它不一定需要非终端游戏状态的启发式评估功能。但是,如果您愿意,您仍然可以使用一个。您可以提前结束模拟(在到达终端状态之前),然后使用启发式评估函数来评估这些状态。如果您希望在给定无限量的处理时间的情况下保证收敛到最佳解决方案,那么您需要确保仅限制您在播出阶段所采取的步骤数量上限,而不是在选择阶段。在实践中,你往往没有无限的处理时间,所以这种差异并不重要(我仍然怀疑在这方面做出了一点改进)

优化实施

当然,也可以简单地优化移动生成/终端游戏状态检查/提前功能。如果没有看到您的代码,很难说这里有多少改进空间。但是,例如,基于位板的状态表示将导致比天真/直接表示更有效的功能