public BestReplyDestinationChoice(Provider<TripRouter> tripRouterProvider, DestinationChoiceContext lcContext, ObjectAttributes personsMaxDCScoreUnscaled, ScoringFunctionFactory scoringFunctionFactory, Map<String, TravelTime> travelTimes, Map<String, TravelDisutilityFactory> travelDisutilities) {
super(lcContext.getScenario().getConfig().global());
this.tripRouterProvider = tripRouterProvider;
this.scoringFunctionFactory = scoringFunctionFactory;
this.travelTimes = travelTimes;
this.travelDisutilities = travelDisutilities;
this.dccg = (DestinationChoiceConfigGroup) lcContext.getScenario().getConfig().getModule(DestinationChoiceConfigGroup.GROUP_NAME);
if (!DestinationChoiceConfigGroup.Algotype.bestResponse.equals(this.dccg.getAlgorithm())) {
throw new RuntimeException("wrong class for selected location choice algorithm type; aborting ...") ;
}
this.lcContext = lcContext;
this.scenario = lcContext.getScenario();
this.personsMaxEpsUnscaled = personsMaxDCScoreUnscaled;
this.forwardMultiNodeDijsktaFactory = new FastMultiNodeDijkstraFactory(true);
this.backwardMultiNodeDijsktaFactory = new BackwardFastMultiNodeDijkstraFactory(true);
this.nearestLinks = new HashMap<>();
for (ActivityFacility facility : this.scenario.getActivityFacilities().getFacilities().values()) {
if (facility.getLinkId() != null)
this.nearestLinks.put(facility.getId(), facility.getLinkId());
else
this.nearestLinks.put(facility.getId(), NetworkUtils.getNearestLink(scenario.getNetwork(),
facility.getCoord()).getId());
}
initLocal();
}