Я работаю над проблемой коммивояжера. Учитывая, что все агенты пересекают один и тот же граф, чтобы найти свой собственный путь отдельно, я пытаюсь распараллелить действия агентов по поиску пути. задача для каждой итерации, все агенты начинают с начального узла, чтобы найти свои пути, и собирают все пути, чтобы найти лучший путь в текущей итерации.
Я использую pathos.multiprocessing.
класс агента имеет метод traverse, как,
class Agent:
def find_a_path(self, graph):
# here is the logic to find a path by traversing the graph
return found_path
Я создаю вспомогательную функцию, чтобы обернуть метод
def do_agent_find_a_path(agent, graph):
return agent.find_a_path(graph)
затем создайте пул и используйте amap, передавая вспомогательную функцию, список экземпляров агента и тот же граф,
pool = ProcessPool(nodes = 10)
res = pool.amap(do_agent_find_a_path, agents, [graph] * len(agents))
но процессы создаются последовательно и работают очень медленно. Я хотел бы получить некоторые инструкции о том, как правильно / достойно использовать пафос в этой ситуации.
спасибо!
UPDATE:
Я использую пафос 0.2.3 в Ubuntu,
Name: pathos
Version: 0.2.3
Summary: parallel graph management and execution in heterogeneous computing
Home-page: https://pypi.org/project/pathos
Author: Mike McKerns
Я получаю следующую ошибку с примером кода TreadPool:
>import pathos
>pathos.pools.ThreadPool().iumap(lambda x:x*x, [1,2,3,4])
Traceback (most recent call last):
File "/opt/anaconda/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-5-f8f5e7774646>", line 1, in <module>
pathos.pools.ThreadPool().iumap(lambda x:x*x, [1,2,3,4])
AttributeError: 'ThreadPool' object has no attribute 'iumap'```