Подключиться к ближайшему агенту в коллекции

Итак, у меня есть несколько разных типов агентов: человек, фабрика, больница, дом, доктор. Теперь все эти агенты, кроме Person, подключены через сеть, в то время как начальный размер населения Person = 0.

Теперь, когда модель запускается, агенты Person будут генерироваться с заданной скоростью. Я хочу, чтобы каждый экземпляр Person определял, какой экземпляр Factory, Hospital или Home является ближайшим, а затем устанавливает связь с этим конкретным агентом.

Как бы я это сделал?

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

Hospital nearestHospital = this.getNearestAgent(main.Hospital); this.connectTo(nearestHospital);

Но я не смог позволить экземплярам Персона определять ближайший экземпляр Больницы, Фабрики, Дома одновременно.

1 ответ

Решение

В вашем агенте Person вы должны создать 3 ссылки на агентов, как вы можете видеть на следующем рисунке: Вы найдете их в палитре Agent.

Персональный агент

После этого вам придется самостоятельно создавать связи для больницы, дома и на заводе. (так как они разные агенты)

Hospital nearestHospital = this.getNearestAgent(main.hospitals);
Home nearestHome = this.getNearestAgent(main.homes);
Factory nearestFactory = this.getNearestAgent(main.factories);
double distanceToHospital=distanceTo(nearestHospital);
double distanceToHome=distanceTo(nearestHome);
double distanceToFactory=distanceTo(nearestFactory);

hospitalLink.disconnectFromAll();
homeLink.disconnectFromAll();
factoryLink.disconnectFromAll();

if(distanceToHospital<distanceToHome && distanceToHospital<distanceToFactory)
   hospitalLink.connectTo(neareastHospital);
else if(distanceToHome < distanceToFactory)
   homeLink.connectTo(neareastHome);
else
   factoryLink.connectTo(nearestFactory);

Вот как это должно быть сделано... что вы будете делать с этим позже... Я не знаю

Другие вопросы по тегам