Как выбрать ближайшего агента, подключенного через другого агента в сети в AnyLogic?

#java #anylogic

#java #anylogic

Вопрос:

В модели я подключил разные типы агентов в сети через объекты «ссылка на другие агенты». Я использовал функцию для создания сети:

 shopLink.connectTo(this.getNearestAgent(main.shops));
homeLink.connectTo(this.getNearestAgent(main.homes));
  

Таким образом, каждый фабричный агент подключен только к ближайшему магазину и дому. Эта функция вызывается в поле «при запуске» в типе Factory-agent.

введите описание изображения здесь

Давайте предположим, что красными типами агентов являются фабрики, желтыми — магазины, а зелеными — дома. Также предположим, что все фабричные агенты содержат агентов-пользователей, и я хочу отправить агентов-пользователей в ближайший магазин-агент подключен к фабричному агенту. Какой Java-код мне нужно использовать, чтобы выбрать ближайший магазин-агент, подключенный к фабричному агенту?

Комментарии:

1. Я думаю, что это проблема с графом. Поэтому вы можете прочитать это сообщение в блоге . В противном случае было бы полезно узнать, что вы уже делаете? Вы написали какой-нибудь код?

2. поделитесь более подробной информацией о вашей фактической настройке соединений в типе Factory agent, и мы сможем помочь 😉

Ответ №1:

Если ваши агенты Person существуют внутри родительского агента Factory, и у вас есть соединения, как показано, тогда это зависит от того, как ваши соединения настроены на Factory:

(a) Если заводская connections ссылка по умолчанию на объект агентов содержит только соединения с агентами магазина, используйте

getNearestAgent(factory.getConnections())

(b) Если заводские соединения с магазином находятся в специальной ссылке на объект агентов (скажем shopConnections ), тогда используйте

getNearestAgent(factory.shopConnections.getConnections())

(c) Если вы перепутали подключения ко всем другим типам агентов (магазины, фабрики и т. Д.) В connections ссылке Factory по умолчанию на агенты, Вам придется сначала отфильтровать этот список, чтобы включить только агентов магазина, чтобы

(Shop) getNearestAgent(filter(factory.getConnections(), f -> f instanceof Shop))

(Есть тонкости Java с точки зрения того, почему для case (c) требуется (Shop) бит в начале, который является приведением Java, но (a) этого не делает. Это связано с тем фактом, что оба getNearestAgent и getConnections являются универсальными методами, и используется вывод типа.)

Комментарии:

1. Спасибо за подробный ответ, Стюарт. Это очень ценится. Я использую подход (b), и мне удалось заставить его работать так, как я намеревался.