#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), и мне удалось заставить его работать так, как я намеревался.