2

我想并行化我的 MCTS 程序。做这件事有很多种方法:

  1. 叶并行化,其中每个叶都被并行扩展和模拟。
  2. 根并行化,其中每个线程/进程创建一个单独的树,当完成一些模拟时,将树组合起来以提供更好的统计信息
  3. 树并行化,所有线程/进程共享同一棵树,每个线程/进程探索树的不同部分。

(如果我的解释不清楚,请查看这篇关于 MCTS 的评论文章。在第 25 页,详细描述了并行化 MCTS 的不同方法。)


问题:

由于 Python的多处理必须创建单独的子进程,因此 2. 根并行化非常适合,而我假设 3. 树并行化是不可行的。(因为对于树并行化,所有子进程都必须共享同一棵树——这在 Python 中很难做到)

我对么?我浏览了多处理文档,如果我理解正确,似乎可以在某些基本数据类型的子进程之间来回传递信息,但由于速度等原因,非常不鼓励这样做。

如果是这样,Python 中的树并行化将是一个坏主意,对吧?

4

1 回答 1

2

是的,您是正确的,根并行化将是这些变体中最容易实现的。不同的进程基本上能够完全独立地运行。只有在搜索过程结束时,您才必须以您选择的任何方式汇总结果,我认为这在实施时应该不会有问题。

我对 Python 中的多处理非常熟悉,知道当你想要更多的通信(其他两种方法需要的那种通信)时,它会有点痛苦。我对它还不够熟悉,无法 100% 肯定地说它真的“不可能”或“非常不鼓励”,但在实施的难易程度方面肯定存在明显差异。

于 2018-10-01T15:03:50.643 回答