并行化 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]
- for循环
- 多处理
- 列表理解
- map + lambda 表达式
如你所见,for loop
、multiprocessing
、list comprehensive
、map+lambda
是批量做一件事情的四种方式
我有一个 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]
- for循环
- 多处理
- 列表理解
- map + lambda 表达式
如你所见,for loop
、multiprocessing
、list comprehensive
、map+lambda
是批量做一件事情的四种方式