首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >并行蒙特卡罗树搜索

并行蒙特卡罗树搜索
EN

Stack Overflow用户
提问于 2019-04-08 18:07:45
回答 1查看 332关注 0票数 1

我有一个蒙特卡洛树搜索实现,我需要优化。因此,我考虑了并行化的推出阶段。怎么做?(是否有代码示例)。有您推荐的python模块等吗?

如果这个地方不适合发这个,我很抱歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-17 13:15:12

你没有给出演示代码,所以很难完全解决你的问题

代码语言:javascript
运行
复制
class MCTS:
    ....
    def _run_search(self):
        ...
        for node in nodes:
            node.reward = self._rollout(node) # rollout
        ...

使用multiprocessing,您可以:

代码语言:javascript
运行
复制
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循环

代码语言:javascript
运行
复制
# 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:多处理(您想要的)

代码语言:javascript
运行
复制
# 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:清单理解

代码语言:javascript
运行
复制
# 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表达式

代码语言:javascript
运行
复制
# 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. 用于循环
  2. 多处理
  3. 列表理解
  4. map + lambda表达式

如你所见,for loopmultiprocessinglist comprehensivemap+lambda是一件事的四种方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55579331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档