Связи агентов и сети

Взаимодействие агентов в агентных моделях может быть реализовано различными способами (см. Взаимодействие агентов). Если связи между агентами достаточно постоянны, то агенту нужно запоминать тех агентов, которые состоят с ним в какой-то связи. Смысл таких связей может быть, например, следующим: друг, коллега, родитель, ребенок и т.д. Одним из способов хранения связей агента является хранение их в простых переменных или коллекциях. Например, если у человека есть родители, супруг(а) и дети, то соответствующий агент должен иметь три связи, заданные с помощью следующих переменных:

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 "отшельниками" с небольшим числом соединений

Тип сети и ее параметры задаются в свойствах среды.

  Чтобы задать тип сети

  1. На вкладке Дополнительные панели свойств среды выберите требуемый тип сети из выпадающего списка Тип сети.
  2. Если Вы хотите, чтобы сеть создавалась при запуске модели, установите флажок Применить при запуске.
  3. Задайте значения параметров, специфичных для данного типа сети, с помощью элементов управления, находящихся под полем Тип сети.

Тип сети может быть также изменен динамически во время выполнения модели посредством программного интерфейса среды, например, с помощью методов:

environment.setNetworkRingLattice( 5 ); //устанавливает принятый по умолчанию тип сети, агенты при этом не (пере)соединяются
environment.applyNetwork(); //(пере)соединяет агентов согласно текущему типу сети.