artificial-intelligence - 蒙特卡罗树搜索改进

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

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

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

最佳答案

是否有可能为状态提出一些启发式评估函数?我意识到 MCTS 的主要好处之一是,理论上您不需要这个,但是:如果您无论如何都可以创建一个稍微合理的评估函数,这将允许您在模拟达到终端游戏状态之前尽早停止模拟。然后你可以支持这种非终结游戏状态的评估,而不仅仅是胜利或失败。如果像这样提前停止模拟,您可能能够运行更多模拟(因为每个单独的模拟花费的时间更少)。

除此之外,您还需要尝试找到“概括”的方法。如果您运行一个模拟,您应该尝试看看是否也可以从该模拟中为树中您没有经历过的其他节点提取一些有用的信息。本着这种精神,您可能需要考虑的增强功能示例包括 AMAF、RAVE、Progressive History、N-Gram Selection Technique。

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

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

关于artificial-intelligence - 蒙特卡罗树搜索改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46006885/

相关文章:

go - 如何运行以下 Golang MCTS 示例?

artificial-intelligence - 使用人工智能进行自动编程的搜索技术的类别是什么?

algorithm - 在解决约束问题时需要帮助

azure - 除 Schedule Basis 之外的用于运行 Azure 数据工厂的任何智能

python - Python 中的梯度下降

python - 如何让我的 AI 算法玩 9 板井字游戏?

montecarlo - 蒙特卡罗搜索树是如何工作的?

python - train_on_batch() 在 keras 模型中做了什么?

python - 蒙特卡罗树搜索 Tic-Tac-Toe -- Poor Agent