蒙特卡罗树搜索达到内存限制时该怎么办

时间:2013-04-19 08:16:51

标签: artificial-intelligence montecarlo

我对最近在游戏中应用的蒙特卡罗树搜索感兴趣。

我已经阅读了几篇论文,但我使用了“蒙特卡罗树搜索”Chaslot,G的博士论文,因为我发现更容易理解蒙特卡罗树搜索的基础知识

我试过编码,并坚持某些问题。该算法尝试将每个模拟的一个节点扩展到游戏树中。这很快升级为内存问题。我已经快速阅读了这篇论文,但似乎没有解释该技术如果遇到某些内存限制会怎么做。

如果达到某个内存限制,你可以建议该技术应该做些什么吗?

你可以在这里看到论文: http://www.unimaas.nl/games/files/phd/Chaslot_thesis.pdf

3 个答案:

答案 0 :(得分:3)

一种非常有效的方法是使树更慢地生长。也就是说,每次到达叶节点时,不是展开树,而是在它至少具有 k 次访问时展开它。这将显着减缓树的增长,并且通常不会降低性能。 Fuego Go计划的一位作者告诉我,他尝试了这种方法,并且在实践中运作良好。

这个想法最初在本文中描述:

Remi Coulom。 monte-carlo树搜索中的高效选择性和备份操作符。在计算机和游戏中,第72-83页。施普林格,2007年。

它也用于:

Max Roschke和Nathan Sturtevant。 UCT增强中国跳棋使用终局数据库,IJCAI计算机游戏研讨会,2013年。

答案 1 :(得分:1)

您可以丢弃所有节点,其访问次数小于最近未访问的某个阈值(之前有多少播放)。 这是一个快速但不高效的解决方案。 最好也实施渐进式扩展。

答案 2 :(得分:0)

论文Memory Bounded Monte Carlo Tree Search评估了针对该问题的各种解决方案:

  • 停止:当您达到内存限制时,您将停止算法
  • 发育迟缓:达到内存限制时您将停止生长树(但会不断更新)
  • 合奏:当您达到内存限制时(在最后融合结果),您可以保留结果并从一棵空树重新开始搜索
  • 平移:当达到内存限制时,您将摆脱除根节点及其直接子节点之外的所有节点,并从新的基础重新开始搜索
  • 垃圾回收:达到内存限制时,将删除所有未访问给定次数的节点
  • 回收:添加节点时,将删除最长时间未访问的节点