并行化 Monte Carlo 树搜索

Parallelizing Monte Carlo Tree Search

我有一个 Monte Carlo 树搜索实现需要优化。所以我考虑并行化推出阶段。怎么做? (是否有代码示例)。 有什么 python 模块等你会推荐吗?

如果这里不适合post,我深表歉意。

你没有给出演示代码,很难彻底解决你的问题

class MCTS:
    ....
    def _run_search(self):
        ...
        for node in nodes:
            node.reward = self._rollout(node) # rollout
        ...

并且使用 multiprocessing,您可以:

from multiprocessing import Pool
class MCTS:
    ....
    def _run_search(self):
        ...
        with Pool(os.cpu_count()-2) as p:
            result = p.map(self._rollout, nodes)
        # for node in nodes:
        #    node.reward = self._rollout(node) # rollout
        ...

所以如果能给个demo代码,问题就更清楚了

顺便说一下,您总是可以像这样用 multiprocessing 替换 for loop

我们看到这种情况:for循环

# inp
data = [1,2,3,4,5]
def f(x):
    return x**2

# processing (for loop)
result = []
for i in data:
    result.append(f(i))

# out
print(result) # [1,4,9,16,25]

方法0:多处理(随便你~)

# inp
data = [1,2,3,4,5]
def f(x):
    return x**2

# processing (multiprocessing)
with Pool(os.cpu_count()-2) as p:
    result = p.map(f, data)

# out
print(result) # [1,4,9,16,25]

方法二:列表解析

# inp
data = [1,2,3,4,5]
def f(x):
    return x**2

# processing (list comprehension)
result = [f(i) for i in data]

# out
print(result) # [1,4,9,16,25]

方法三:map + lambda表达式

# inp
data = [1,2,3,4,5]
def f(x):
    return x**2

# processing (lambda + map)
result = map(lambda x: f(x), data)

# out
print(result) # [1,4,9,16,25]
  1. for循环
  2. 多处理
  3. 列表理解
  4. map + lambda 表达式

如你所见,for loopmultiprocessinglist comprehensivemap+lambda是批量做一件事情的四种方式