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

Связь с агентами

У каждого агента, обитающего в среде, имеется видимый неудаляемый элемент connections, который задает сеть контактов этого агента и задает настройки взаимодействия.

Тем не менее, вам может понадобиться задать больше сетей контактов или отдельные связи.

Например, если у человека есть родители, супруг(а) и дети, то соответствующий агент может иметь следующие связи с агентами:

Person father
Person mother
Person spouse
<коллекция связей с агентами типа Person> kids

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

Однонаправленные и двунаправленные связи

  • Двунаправленная связь. Примеры: дружба, общий интерес, обмен информацией
  • Однонаправленная связь. Примеры с возможными другими значениями: ребенок-родители, начальник-подчиненный, клиент-продавец, рабочая станция-сервер, производитель-потребитель

Вы можете установить контакты агента с помощью элемента Связь с агентами.

Чтобы создать новую связь с агентами

  1. Перетащите элемент Связь с агентами из палитры Агент на диаграмму агента.
  2. Выделите добавленный элемент в графическом редакторе и в открывшейся панели Свойства укажите Имя связи, например, father.
  3. Выберите, будет ли эта связь одиночной (опция Одиночная связь) или множественной (опция Коллекция связей). Вы заметите, что вид иконки связи меняется в зависимости от выбранной опции.
  4. Вы можете задать отображение связей, соединяющих ваши агенты на анимации модели. Откройте секцию свойств Анимация и выберите опцию Рисовать связь соединения агентов. Далее настройте визуальное отображение связей с помощью свойств: выберите, хотите ли вы рисовать связи позади или поверх агентов, укажите цвет, толщину, стиль линии (сплошная, точечная, пунктирная) и тип и местоположение стрелки.

Свойства

Основные свойства

Имя — Имя связи.

Отображать имя — Если опция выбрана, имя связи отображается на диаграмме агента.

Исключить — Если опция выбрана, связь будет исключена из модели.

Видимость — Если опция выбрана, то фигура будет отображаться на анимации во время исполнения модели.

Тип агента — Выберите тип агента.

Коллекция связей — Если опция выбрана, то связь будет множественной: она будет соединять агента с несколькими другими агентами.

Одиночная связь — Если опция выбрана, связь является одиночной: она соединяет агента только с одним другим агентом.

Сделать двунаправленной/однонаправленной — Щелкните эту кнопку, если хотите сделать связь двунаправленной/однонаправленной. Пример двунаправленной связи: друг. Пример однонаправленной связи: мать.

Взаимодействие

Тип сообщения — Здесь вы можете указать тип сообщений, которые будут получать эти связи. Вам это может понадобиться, чтобы иметь доступ к типу сообщений из кода в поле Действие при получении сообщения. Вы можете выбрать один из часто используемых типов (int, double, boolean, String) из выпадающего списка. Но если ваши сообщения другого класса Java, выберите опцию Другой и укажите тип сообщений в поле справа.

Действие при получении сообщения — Код, выполняемый, когда агент получает сообщение от другого агента (или, возможно, от себя). Отправитель сообщения доступен в коде как sender, а полученное сообщение — как msg.

Перенаправлять сообщение в — Здесь вы можете указать диаграмму состояний получателя сообщения, которую вы хотели бы использовать для обработки сообщения. Для этого поставьте флажок напротив той диаграммы, которой вы хотите обрабатывать сообщения.

Анимация

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

Управление связями динамически

После того, как вы создали связь с агентами, вы должны указать эту связь в агентах.

Эти ссылки могут быть указаны при создании агентов или динамически во время имитации. Вы можете управлять связями "ручным методом" через функции агента, см. дополнительную информацию.

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

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

Пример: father.connectTo(people(0));

Отправление сообщений через связь

Создав и задав связь, вы можете посылать сообщения связанным агентам.

Одиночная связь
Функция Описание
send(Object msg) Отправляет сообщения связанному агенту.
Коллекция связей
Функция Описание
send(Object msg, Agent dest) Отправляет сообщение по указанной связи.
sendToAllConnected(Object msg) Отправляет сообщения всем связанным агентам.
sendToRandomConnected(Object msg) Отправляет сообщение случайно выбранному связанному агенту.

Пример:

Например, чтобы отправить сообщение "Hi!" связи с именем father, вызовите father.send("Hi!")

Как мы можем улучшить эту статью?