AnyLogic
Развернуть
Размер шрифта

Стандартные сети агентов

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

Списки взаимодействий используются, когда агент посылает сообщения своим контактам, см. Взаимодействие агентов.

AnyLogic предоставляет встроенный механизм поддержки "плоских" связей, таких, как друзья, социальные контакты и т.д. Любой агент может иметь определенное число связей — ссылок на других агентов, обитающих в той же среде. Если вам необходимо создать больше сетей взаимодействий, вы можете добавить больше связей агентов.

Стандартные взаимодействия агентов задаются автоматически с помощью среды.

Стандартные типы сетей

AnyLogic поддерживает несколько типов сетей агентов:

  • Случайное (Agent.NETWORK_RANDOM) — агенты соединяются случайно, у каждого агента устанавливается заданное количество связей
  • Согласно расстоянию (Agent.NETWORK_ALL_IN_RANGE) — друг с другом соединяются те агенты, расстояние между которыми не больше заданного радиуса соединения (только в непрерывном пространстве)
  • Решеточно упорядоченное кольцо (Agent.NETWORK_RING_LATTICE) — связи агентов образуют кольцо, в котором каждый агент соединяется с заданным количеством ближайших агентов
  • Малый мир (Agent.NETWORK_SMALL_WORLD) — представляет собой решеточно упорядоченное кольцо, где некоторые связи были разорваны и установлены с удаленными агентами
  • Безразмерная (Agent.NETWORK_SCALE_FREE) — некоторые агенты являются "хабами" (или концентраторами) с множествами соединений, а некоторые являются "отшельниками" с небольшим числом соединений. Подход описан в научной статье Barabasi, A. L. and R. Albert. 1999. Emergence of scaling in random networks. Science 286(5439): 509-512. Детальное описание алгоритма соединения вы можете найти в Википедии.

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

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

  1. Откройте секцию Пространство и сеть панели Свойства того типа агентов, где обитают ваши агенты (например, Main).
  2. Выберите требуемый тип сети из выпадающего списка Тип сети.
  3. Если вы хотите, чтобы сеть создавалась при запуске модели, установите флажок Применить при запуске.
  4. Задайте значения параметров, специфичных для данного типа сети, с помощью элементов управления, находящихся под полем Тип сети.
Демо-модель: Agent Network and Layouts Demo Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Управление связями агентов

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

Списки взаимодействий используются, когда агент посылает сообщения своим контактам. Если вам необходимо создать больше сетей взаимодействий, вы можете добавить больше связей агентов.

AnyLogic предоставляет следующие методы для установления связей между агентами:

Функция Описание
List<Agent> getConnections() Возвращает список всех связанных агентов или null, если связей установлено не было.
int getConnectionsNumber() Возвращает количество связанных агентов.
Agent getConnectedAgent(int index) Возвращает связанного агента с заданным номером index.
connectTo(Agent a) Добавляет указанного агента в список связей этого агента и наоборот.
boolean isConnectedTo(Agent a) Проверяет, связан ли этот агент с указанным агентом.
boolean disconnectFrom(Agent a) Отсоединяет этого агента от указанного агента, возвращает false, если они не были связаны.
disconnectFromAll() Отсоединяет этого агента от всех других агентов.

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

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