我有一个蒙特卡洛树搜索实现,我需要优化。因此,我考虑了并行化的推出阶段。怎么做?(是否有代码示例)。有您推荐的python模块等吗?
如果这个地方不适合发这个,我很抱歉。
发布于 2022-04-17 13:15:12
你没有给出演示代码,所以很难完全解决你的问题
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
...
所以如果你能给出一个演示代码,问题就会更清楚。
顺便说一句,您可以将for loop
替换为multiprocessing
,如下所示:
我们看到了这种情况: 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]
方法2:清单理解
# 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]
方法3: 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]
如你所见,for loop
,multiprocessing
,list comprehensive
,map+lambda
是一件事的四种方式。
https://stackoverflow.com/questions/55579331
复制相似问题