Как получить атрибут агента разных рангов?
В одной части моей агентной модели я собираю всех агентов одного типа из разных рангов с помощью MPI.COMM_WORLD.gather. Затем я пытаюсь отправить собранных агентов в функцию, которая должна выполнить некоторые вычисления над собранными агентами. Эти агенты относятся к разным рангам, и когда я пытаюсь получить атрибут агента, вызвав агента с помощью ctx.agent(id, type, Rank), я сталкиваюсь с ошибкой, поскольку self.context распределяется по разным рангам. Мой код выглядит следующим образом:
self.context = ctx.SharedContext(comm)
new_data=MPI.COMM_WORLD.gather(data, root=0)
if self.rank==0:
function(new_data, self.context)
Как собрать весь self.context разных рангов в одно место и отправить в функцию?
Кроме того, я пытался использовать request_agents следующим образом, но не смог заставить его работать:
if self.rank==0:
self.context.request_agents(((1,0,3),3),creart_agent)
...
1 ответ
if self.rank==0:
self.context.request_agents(((1,0,3),3),creart_agent)
...
Этот второй фрагмент кода не будет работать, поскольку он вызывается только с нулевого ранга. Функция request_agents — это коллективная операция, которую необходимо вызывать со всех рангов.
Вместо этого вы можете позвонить как
self.context.request_agents(...)