#python #python-3.x #parallel-processing #reinforcement-learning #monte-carlo-tree-search
#python #python-3.x #параллельная обработка #подкрепление-обучение #поиск по дереву методом Монте-Карло
Вопрос:
У меня есть реализация поиска по дереву Монте-Карло, которую мне нужно оптимизировать. Итак, я подумал о распараллеливании фазы развертывания. Как это сделать? (Есть ли пример кода). Есть ли какие-либо модули python и т.д., которые вы бы порекомендовали?
Я прошу прощения, если это неподходящее место для публикации этого.
Комментарии:
1. Пакет многопроцессорной обработки — хорошее место для начала. docs.python.org/3.7/library/multiprocessing.html
2. Это интересно, спасибо! рассмотрим это.
Ответ №1:
вы не предоставили демонстрационный код, поэтому трудно полностью решить вашу проблему
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
...
Итак, если вы можете предоставить демонстрационный код, проблема станет более понятной.
И, кстати, вы всегда можете заменить a for loop
на multiprocessing
вот так:
Мы видим эту ситуацию: для цикла
# 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: сопоставление лямбда-выражение
# 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
есть четыре способа сделать одну вещь пакетно