我不确定这个问题是应该放在stackoverflow还是cs.stackexchange.com上,所以如果我应该移动它,请告诉我。
我正在努力寻找蒙特卡罗树搜索(MCTS)的时间复杂度。谷歌搜索没有帮助,所以我试图看看我自己计算得多远。
它为n
次迭代执行了四个步骤,或者在时间用完之前执行了四个步骤。所以我们会有
O(N *(选择+扩张+仿真+反向传播))
扩展只会将子项添加到当前选定的节点。假设你没有使用单链表或类似的东西存储树儿,这可能会在不变的时间发生,所以我们可以排除它:
O(N *(选择+模拟+反向传播))
给定分支因子b
和t
树中的节点总数,我假设选择阶段在O中运行(b * log b t ),因为树的深度是log b t,并且在每个深度,我们都会超过b个孩子。
所以我们的时间复杂度变得
为O(n *(B *日志<子> B'/子> T +模拟+反向传播))
反向传播也需要与树的深度成比例的时间,因此变为:
为O(n *(B *日志<子> B'/子> T +模拟+ b *的日志<子> B'/子> t))的
但现在我不确定如何将模拟阶段添加到此。
答案 0 :(得分:0)
在我们选择要扩展的节点之后,我们将节点扩展为m 随机的孩子,而不是一个孩子。而且,而不是 只模拟一次子状态,我们模拟每个子状态 k次。
算法的运行时可以简单地计算为O(mkI / C) 其中m和k与之前相同,而我是数字 迭代和C是可用的核心数。
参考:
http://stanford.edu/~rezab/dao/projects/montecarlo_search_tree_report.pdf