我正在尝试在一个游戏上实现MCTS算法。我每次移动只能使用大约0.33秒。在这段时间内,我可以从start状态为每个孩子生成一到两个游戏,其中包含大约500个子节点。我的模拟不是随机的,但我当然不能基于一两个模拟做出正确的选择。在游戏中,树变得更小,我可以,我的选择是基于更多的模拟。
所以我的问题是在开始的几步中。有没有办法改进MCTS算法,让它可以模拟更多的游戏,或者我应该使用另一种算法?
发布于 2017-11-22 18:32:10
有没有可能提出一些启发式的状态评估函数?我意识到MCTS的主要好处之一是在理论上你不需要这个,但是:如果你能创建一个合理的评估函数,这将允许你在模拟达到终端游戏状态之前提前停止模拟。然后,您可以备份这种非终端游戏状态的评估,而不仅仅是输赢。如果您像这样提前停止模拟,您可能能够运行更多的模拟(因为每个单独的模拟花费的时间更少)。
除此之外,您还需要尝试找到“泛化”的方法。如果您运行一个模拟,您应该尝试看看是否也可以从该模拟中为树中未经过的其他节点提取一些有用的信息。在这种精神下,你可能想要考虑的增强的例子是AMAF,RAVE,渐进式历史,N-Gram选择技术。
您是否恰好知道性能的瓶颈在哪里?您可以使用分析器对此进行调查。如果你的大部分处理时间都花在与游戏相关的功能上(移动生成,从一个状态前进到下一个状态,等等),你肯定知道你可以做的模拟的数量将是有限的。然后,您应该尝试实现增强功能,使每个单独的模拟尽可能具有信息性。例如,这可能意味着使用非常好的、计算昂贵的评估函数。如果游戏代码本身已经进行了很好的优化并且速度很快,那么将额外的计算时间转移到像评估函数这样的东西上会对你的模拟计数造成更大的伤害,可能会带来更少的回报。
有关最后一个想法的更多信息,看看我在MCTS-based agent in General Video Game AI上写的一些东西可能很有趣,这也是一个实时环境,具有非常昂贵的计算成本,这意味着模拟计数受到严格限制(但分支因子比您的情况看起来要小得多)。我在这方面的出版物的Pdf文件也可以在网上找到。
https://stackoverflow.com/questions/46006885
复制相似问题