Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 蒙特卡罗树搜索的实现_Optimization_Artificial Intelligence_Simulation_Chess_Montecarlo - Fatal编程技术网

Optimization 蒙特卡罗树搜索的实现

Optimization 蒙特卡罗树搜索的实现,optimization,artificial-intelligence,simulation,chess,montecarlo,Optimization,Artificial Intelligence,Simulation,Chess,Montecarlo,我理解MCT背后的理论,但这是我的问题。游戏中的蒙特卡罗方法要求从当前状态模拟游戏,直到达到终端状态。为了使搜索收敛到Minimax(实际的理想移动序列),必须模拟数千甚至数百万个游戏 我现在这样做的方式是使用相同的移动生成函数,我将用于正常的minimax搜索,以及相同的makemove函数,并在每次移动后检查是否获胜。在象棋或跳棋这样的复杂游戏中(甚至在简单的游戏中),这些都是非常昂贵的操作。我的问题是:有没有更好的方法来实现游戏模拟,从而降低成本?我可以不执行完整的移动生成,并且每次都不检

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

我现在这样做的方式是使用相同的移动生成函数,我将用于正常的minimax搜索,以及相同的makemove函数,并在每次移动后检查是否获胜。在象棋或跳棋这样的复杂游戏中(甚至在简单的游戏中),这些都是非常昂贵的操作。我的问题是:有没有更好的方法来实现游戏模拟,从而降低成本?我可以不执行完整的移动生成,并且每次都不检查胜利吗?有没有其他方法可以提高模拟时间

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

不,你不能真正避免移动生成和检查终端游戏状态。如果不生成移动,则也不能选择要播放的移动(显然需要执行此操作才能推进模拟)。如果你不检查终端游戏状态。。。你将得到与合法游戏不符的模拟,并且你不必要地继续模拟太长时间

加快移动生成 在某些游戏中,通过只生成一些动作,可以选择动作而不生成所有动作。例如,在国际象棋中,我想你可以先随机选择一个棋子移动,然后只为该棋子生成移动,然后随机选择其中一个。这将比为所有棋子生成所有合法移动,然后随机选择其中一个更快。但是,它也会在你的移动选择中引入不同的偏差,你最终在模拟中玩的移动的概率分布将不同于所有合法移动的统一分布。很难说这是好是坏,但肯定是不同的

提前结束模拟 MCTS的优点之一是,它不一定需要非终端博弈状态的启发式评估函数。但是,如果您愿意,您仍然可以使用一个。您可以提前结束模拟(在到达终端状态之前),然后使用启发式评估函数评估这些状态。如果要保证在无限长的处理时间内收敛到最佳解决方案,则需要确保只限制播放阶段的步骤数,而不是选择阶段的步骤数。在实践中,您往往没有无限的处理时间,因此这种差异不会太大(尽管如此,我仍然怀疑做出这种区分会有一个小的改进)

优化实现
当然,也可以简单地优化移动生成/终端游戏状态检查/升级功能。在没有看到代码的情况下,很难判断这里还有多少改进空间。但是,例如,基于比特板的状态表示将产生比简单/直接表示更有效的功能

如果我没有误解MCT,那么它就不能保证提供最佳解决方案,只能提供一个好的解决方案。因此,搜索的精细度取决于您。顺便说一下,你既没有C++也没有java问题,所以请删除那些标签。@ ULRICECKHART不,MCTS保证提供最佳的解决方案(即,如果你使用一个正确的选择策略,比如UCB1,就像UCT1最常见的变体,如果你有无限的处理时间),那么答案很好。我已经在使用bit板了,所以我认为我不能再加快速度了,但是其他的建议非常有用。