ram*_*ssa 5 algorithm simulation artificial-intelligence montecarlo monte-carlo-tree-search
我在一定程度上理解算法的工作原理.我不完全理解的是算法是如何在实践中实际实现的.
我有兴趣了解一个相当复杂的游戏(也许是象棋)的最佳方法.即递归方法?异步?同时?平行?分散式?数据结构和/或数据库?
- 我们期望在一台机器上看到什么类型的限制?(我们可以同时在多个核心上运行......也许是gpu?)
- 如果每个分支都会产生一个全新的游戏,(这可能达到数百万)我们如何保持整个系统的稳定?我们如何重用已经播放的分支?
递归方法?异步?同时?平行?分散式?数据结构和/或数据库
while循环的更明显的实现很好.minimax,您实际上需要显式构建树并将其存储在内存中(它在算法运行时逐渐构建).因此,您需要一个通用的树数据结构,Nodes其中包含一个后继/子列表Nodes,以及一个返回父项的指针Node(模拟结果的反向传播所需).我们希望在一台机器上看到什么类型的限制?(我们可以同时在多个核心上运行......也许是gpu?)
运行多个核心可以做到(参见上面关于并行化的要点).我没有看到算法的任何部分特别适合GPU实现(没有大型矩阵乘法或类似的东西),因此GPU不太可能有趣.
如果每个分支都会产生一个全新的游戏,(这可能会达到数百万)我们如何保持整个系统的稳定?我们如何重用已经播放的分支?
在最常描述的实现中,算法在扩展阶段(在选择阶段之后遇到的第一个节点)中每次迭代/模拟仅创建一个新节点以存储在存储器中.在同一模拟的播放阶段生成的所有其他游戏状态根本不会将任何节点存储在存储器中.这样可以检查内存使用情况,这意味着您的树只会相对缓慢地增长(每个模拟的节点速率为1个节点).它确实意味着您对先前模拟的分支的重复使用稍微减少,因为您不会存储您在内存中看到的所有内容.您可以选择为扩展阶段实施不同的策略(例如,为在播出阶段生成的所有游戏状态创建新节点).如果你这样做,你将不得不仔细监视内存使用情况.