Как получить атрибут агента разных рангов?

В одной части моей агентной модели я собираю всех агентов одного типа из разных рангов с помощью 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(...)
Другие вопросы по тегам