Допущения
- У вас есть население Станция -Агенты с именем станции
- У вас есть население Пассажир -Агенты по имени пассажиры
- У вас есть население Трамвай -Агенты по имени Трамваи
- У вас естьнаселение Дом -Агенты по имени дома
Шаг за шагом
Добавить к Tram -Агент переменной nextStation типа Станция , в которой moveTo-Block всегда сохраняет текущую станцию прибытия
Добавить Пассажир -Агент параметр типа Дом с именем Дом , где при запуске модели Дом -Агент заполняется
Создайте функцию с именем getNearestStation , с входным параметром типа Passenger и выходом типа Station :
//initialize with first station
Station nearestStation = stations.get(0);
double distanceToNearestStation = passenger.home.distanceByRoute(nearestStation);
double currentDistance;
for(Station station:stations){
currentDistance = passenger.home.distanceByRoute(station);
//save it if you find a closer station
if( currentDistance < distanceToNearestStation){
nearestStation = station;
distanceToNearestStation = passenger.home.distanceByRoute(station);
}
}
return nearestStation;
Вместо агента Station вы также можете использовать GISPoint как для своей переменной NextStation внутри трамвая, так и для кода getNearestStation.
Добавьте Dropoff-Block к вашей потоковой диаграмме и установите следующие условия:
getNearestStation(agent).equals(container.nextStation)
Дополнительное примечание
Чтобы сделать вычисление расстояния менее частым, выполняйте getNearestStation только один раз при инициализации каждого пассажира и сохраняйте его в переменной, вместо того, чтобы вычислять его при каждом прохождениивыпадающий блок.