Artificial intelligence 蒙特卡罗树搜索改进

Artificial intelligence 蒙特卡罗树搜索改进,artificial-intelligence,monte-carlo-tree-search,Artificial Intelligence,Monte Carlo Tree Search,我试图在游戏中实现MCTS算法。我每次移动只能使用大约0.33秒。在这段时间里,我可以从包含大约500个子节点的开始状态为每个孩子生成一到两个游戏。我的模拟不是随机的,但当然我不能根据1或2个模拟做出正确的选择。在游戏中,树变得越来越小,我可以说我的选择是基于更多的模拟 因此,我的问题在于最初的几步。有没有办法改进MCTS算法,使其能够模拟更多的游戏,或者我应该使用另一种算法?有没有可能为状态提供一些启发式评估函数?我意识到,MCTS的一个主要好处是,理论上你不需要它,但是:如果你能创建一个合理

我试图在游戏中实现MCTS算法。我每次移动只能使用大约0.33秒。在这段时间里,我可以从包含大约500个子节点的开始状态为每个孩子生成一到两个游戏。我的模拟不是随机的,但当然我不能根据1或2个模拟做出正确的选择。在游戏中,树变得越来越小,我可以说我的选择是基于更多的模拟


因此,我的问题在于最初的几步。有没有办法改进MCTS算法,使其能够模拟更多的游戏,或者我应该使用另一种算法?

有没有可能为状态提供一些启发式评估函数?我意识到,MCTS的一个主要好处是,理论上你不需要它,但是:如果你能创建一个合理的评估函数,这将允许你在模拟达到最终游戏状态之前提前停止模拟。然后,您可以备份对这种非终端游戏状态的评估,而不仅仅是赢或输。如果像这样提前停止模拟,则可以运行更多模拟(因为每个单独的模拟花费的时间更少)

除此之外,您还需要尝试找到“概括”的方法。如果您运行一个模拟,您应该尝试查看是否还可以从该模拟中提取一些有用的信息,用于树中未经过的其他节点。在这方面你可能需要考虑的增强例子是AMAF、RAVE、渐进历史、N-gram选择技术。

你知道你的表现瓶颈在哪里吗?您可以使用探查器对此进行调查。如果您的大部分处理时间都花在与游戏相关的功能上(移动生成、从一个状态前进到下一个状态等),那么您肯定知道您可以进行的模拟数量有限。然后,您应该尝试实现增强功能,使每个单独的模拟尽可能提供信息。例如,这可能意味着使用非常好的、计算昂贵的求值函数。如果游戏代码本身已经进行了很好的优化,并且速度很快,那么将额外的计算时间转移到诸如求值函数之类的事情上会对模拟计数造成更大的伤害,并且可能会带来更少的回报


关于这最后一个想法的更多信息,可能有兴趣浏览一下我在my上写的一些东西,这也是一个实时环境,有一个非常昂贵的计算游戏,这意味着模拟计数受到严重限制(但分支因子比你的情况中看起来小得多)。我在这方面的出版物的Pdf文件也可以在线获得。

这是什么游戏?大约500个子节点?你不是在每次移动后从头开始重建树吗?如果顶层节点(紧跟根节点之后的节点)有足够的子节点和模拟,那么子节点中的1或2个选择可能就足够了。“我应该使用其他算法吗?”这在很大程度上取决于游戏。例如,MCTS不适合下棋,但适合围棋。