Общение в сети с несколькими контактами в Anylogic - PullRequest
0 голосов
/ 10 июля 2020

Я определил агента Person и популяцию Person, "живущих" внутри среды агента Main. Мне интересно, есть ли в anylogi c какой-то механизм для определения многоуровневых сетей и отправки сообщений только на конкретном уровне c, т.е. я хочу определить для агентов-лиц некоторые отношения, такие как «семейные связи», если агенты в одном семействе (см. рисунок, каждый связанный компонент является семейством), «рабочие места», если агенты работают в одном месте, и т. д. c. Из справочного руководства я понял, что можно создать несколько ссылок пользовательских подключений .

Что мне не ясно, так это то, как ссылаться на конкретное отношение c, когда я отправляю сообщения между агентов, т.е. Я бы отправил сообщения от агента X только подключенным агентам Y1, ..., Y2 для отношения "семейные соединения", игнорируя подключенных агентов для отношения "рабочие соединения" .

Из api do c я вижу только такие методы, как getConnections() (или send()), чтобы вернуть все подключенные агенты без возможности указать объект ссылок подключения (также известный как c сетевой уровень). введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 11 июля 2020

если вы используете ссылку на членов семьи, вы можете использовать ссылку на объект агентов, например, называть его familyLink и объединить всю свою семью. У вас будет еще один независимый workerLink.

вы подключаете своих агентов, выполняя familyLink.connectTo (agent); где агент - это человек, который является членом семьи.

для отправки сообщений всей вашей семье вы можете:

familyLink.sendToAllConnected(msg);
0 голосов
/ 10 июля 2020

Вы можете использовать параметр для определения уровня агентов (например, Person.layer = "XXX"), а затем создать фильтр для лиц, которые должны получить сообщение:

для (Person p: PopulationOfPerson. stream (). filter (predicate) .collect (Collectors.toList ())) {/// отправить сообщение на p; }

...