Взаимодействие агентов в агентных моделях может быть реализовано различными способами (см. Взаимодействие агентов). Если связи между агентами достаточно постоянны, то агенту нужно запоминать тех агентов, которые состоят с ним в какой-то связи. Смысл таких связей может быть, например, следующим: друг, коллега, родитель, ребенок и т.д. Одним из способов хранения связей агента является хранение их в простых переменных или коллекциях. Например, если у человека есть родители, супруг(а) и дети, то соответствующий агент должен иметь три связи, заданные с помощью следующих переменных:
Person отец
Person мать
Person супруг
<коллекция типа Person> дети
Эти связи можно устанавливать при создании агентов или динамически во время выполнения модели.
AnyLogic предоставляет встроенный механизм поддержки "плоских" связей, таких, как друзья, социальные контакты и т.д. Любой агент (активный объект, объявленный Агентом) может иметь определенное число связей - ссылок на других агентов, обитающих в той же среде. Эти связи всегда двунаправленны: если у агента A в списке соединений значится B, то и у агента B, в свою очередь, в его списке связей будет значиться A. Связями можно управлять самостоятельно с помощью программного интерфейса агента и/или автоматически с помощью среды.
AnyLogic предоставляет следующие методы для установления связей между агентами:
LinkedList<Agent> getConnections() - возвращает список всех связанных агентов или null, если связей установлено не было
int getConnectionsNumber() - возвращает количество связанных агентов
Agent getConnectedAgent( int index ) - возвращает связанного агента с заданным номером index
connectTo( Agent a ) - добавляет указанного агента в список связей этого агента, и наоборот
boolean isConnectedTo( Agent a ) - проверяет, связан ли этот агент с указанным агентом
boolean disconnectFrom( Agent a ) - отсоединяет этого агента от указанного агента, возвращает false, если они не были связаны
disconnectFromAll() - отсоединяет этого агента от всех других агентов
Список связей используется при вызове агентом метода send() или deliver() с параметром ALL_CONNECTED или RANDOM_CONNECTED, см. Взаимодействие агентов.
AnyLogic поддерживает несколько типов сетей агентов:
Случайное (Environment.NETWORK_RANDOM) - агенты соединяются случайно, у каждого агента устанавливается заданное количество связей
Согласно расстоянию (Environment.NETWORK_ALL_IN_RANGE) - друг с другом соединяются те агенты, расстояние между которыми не больше заданного радиуса соединения (только в непрерывном пространстве)
Решеточно упорядоченное кольцо (Environment.NETWORK_RING_LATTICE) - связи агентов образуют кольцо, в котором каждый агент соединяется с заданным количеством ближайших агентов
Малый мир (Environment.NETWORK_SMALL_WORLD) - представляет собой решеточно упорядоченное кольцо, где некоторые связи были разорваны и установлены с удаленными агентами
Безразмерная (Environment.NETWORK_SCALE_FREE) - некоторые агенты являются "хабами" (или концентраторами) с множествами соединений, а некоторые - and some are "отшельниками" с небольшим числом соединений
Тип сети и ее параметры задаются в свойствах среды.
Чтобы задать
тип сети
Тип сети может быть также изменен динамически во время выполнения модели посредством программного интерфейса среды, например, с помощью методов: