Подключиться к ближайшему агенту в коллекции
Итак, у меня есть несколько разных типов агентов: человек, фабрика, больница, дом, доктор. Теперь все эти агенты, кроме 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);
Вот как это должно быть сделано... что вы будете делать с этим позже... Я не знаю