蒙特卡罗树搜索的时间复杂度是多少?

时间:2016-01-11 14:43:02

标签: algorithm tree time-complexity montecarlo tree-search

我不确定这个问题是应该放在stackoverflow还是cs.stackexchange.com上,所以如果我应该移动它,请告诉我。

我正在努力寻找蒙特卡罗树搜索(MCTS)的时间复杂度。谷歌搜索没有帮助,所以我试图看看我自己计算得多远。

它为n次迭代执行了四个步骤,或者在时间用完之前执行了四个步骤。所以我们会有

  

O(N *(选择+扩张+仿真+反向传播))

扩展只会将子项添加到当前选定的节点。假设你没有使用单链表或类似的东西存储树儿,这可能会在不变的时间发生,所以我们可以排除它:

  

O(N *(选择+模拟+反向传播))

给定分支因子bt树中的节点总数,我假设选择阶段在O中运行(b * log b t ),因为树的深度是log b t,并且在每个深度,我们都会超过b个孩子。

所以我们的时间复杂度变得

  

为O(n *(B *日志<子> B'/子> T +模拟+反向传播))

反向传播也需要与树的深度成比例的时间,因此变为:

  

为O(n *(B *日志<子> B'/子> T +模拟+ b *的日志<子> B'/子> t))的

但现在我不确定如何将模拟阶段添加到此。

1 个答案:

答案 0 :(得分:0)

  

在我们选择要扩展的节点之后,我们将节点扩展为m   随机的孩子,而不是一个孩子。而且,而不是   只模拟一次子状态,我们模拟每个子状态   k次。

  • m是节点的子节点数
  • k是孩子的模拟次数
  

算法的运行时可以简单地计算为O(mkI / C)   其中m和k与之前相同,而我是数字   迭代和C是可用的核心数。

参考:

http://stanford.edu/~rezab/dao/projects/montecarlo_search_tree_report.pdf