蒙特卡洛树搜索改进

时间:2017-09-01 19:33:14

标签: artificial-intelligence monte-carlo-tree-search

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

所以我的问题出在前几步。有没有办法改进MCTS算法,以便它可以模拟更多的游戏,还是应该使用其他算法?

1 个答案:

答案 0 :(得分:1)

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

除此之外,您还想尝试寻找方法来概括“#”;'。如果您运行一个模拟,您应该尝试查看是否还可以从该模拟中为树中您未经过的其他节点提取一些有用的信息。您可能希望在这种精神中考虑的增强功能示例包括AMAF,RAVE,Progressive History,N-Gram Selection Technique。

您是否碰巧知道瓶颈对您的表现有何影响?您可以使用分析器对此进行调查。如果你的大部分处理时间花费在与游戏相关的功能上(移动生成,从一个状态前进到下一个状态等),你肯定知道你的模拟数量会受到限制吗?可以做。然后,您应该尝试实施增强功能,使每个单独的模拟尽可能提供信息。例如,这可以意味着使用非常好的,计算上昂贵的评估函数。如果游戏代码本身已经非常优化和快速,那么将额外的计算时间转移到评估函数之类的东西将对您的模拟计数更有害,并且可能会减少回报。

关于这最后一个想法的更多信息,看看我在MCTS-based agent in General Video Game AI上编写的一些内容可能会很有趣,这也是一个计算成本非常高的游戏的实时环境,这意味着模拟很重要受到严重限制(但分支因子比你的情况要小得多)。我的出版物的pdf文件也可在线获取。