Сразу же отметим, что взаимодействие агентов может быть легко реализовано с помощью обычных средств взаимодействия объектов в AnyLogic (вызов методов, посылка сообщений через порты, соединение постоянно изменяющихся переменных и т.д.). В этом случае Вам не нужно будет даже объявлять Ваши активные объекты агентами и добавлять их в одну и ту же среду. Если же Вы сделаете это, то Вы сможете использовать еще один, куда более удобный, способ взаимодействия агентов: посылку сообщений посредством следующих методов среды:
send( Object msg, Agent dest ) - посылает сообщение указанному агенту
send( Object msg, int mode ) - посылает сообщение одному или группе агентов, в зависимости от выбранного режима (задается параметром mode)
deliver( Object msg, Agent dest ) - немедленно доставляет сообщение указанному агенту
deliver( Object msg, int mode ) - немедленно доставляет сообщение одному или группе агентов, в зависимости от выбранного режима (задается параметром mode)
Разница между методами send() и deliver() заключается в следующем: send() планирует доставку/получение с помощью отдельного события, которое будет выполнено сразу после окончание текущего события (спустя нулевое модельное время), в то время, как deliver() выполняет доставку/получение прямо в теле текущего события. Если при обработке полученного сообщения получатели будут пытаться взаимодействовать с другими агентами, то использование метода deliver() может привести к нежелательным зацикливаниям, и поэтому рекомендуется использовать метод send().
Параметр режима mode может иметь следующие значения:
ALL - сообщение будет доставлено всем агентам, обитающим в среде
ALL_CONNECTED - сообщение будет доставлено всем связанным агентам
ALL_NEIGHBORS - (только в дискретном пространстве) сообщение будет доставлено всем агентам, находящимся в соседних ячейках, в соответствии с текущей моделью соседства
RANDOM - сообщение будет доставлено случайно выбранному агенту из среды обитания данного агента (это может быть в том числе и агент, который и послал это сообщение)
RANDOM_CONNECTED - сообщение будет доставлено случайно выбранному связанному агенту (если таковой будет)
RANDOM_NEIGHBOR - (только в дискретном пространстве) сообщение будет доставлено случайно выбранному соседу
Как только сообщение будет доставлено агенту, будет выполнено Действие при получении сообщения.этого агента.
Чтобы задать реакцию агента на получение сообщения
Если, например, Вы хотите перенаправить сообщение в диаграмму состояний агента, Вам нужно будет написать здесь:
statechart.receiveMessage( msg );
Полное описание программного интерфейса класса Agent можно найти здесь.