BicycleTravelDisutilityV2(Network network, TravelDisutility timeDistanceDisutility, BicycleConfigGroup bicycleConfigGroup, PlanCalcScoreConfigGroup cnScoringGroup) { this.timeDistanceDisutility = timeDistanceDisutility; final PlanCalcScoreConfigGroup.ModeParams bicycleParams = cnScoringGroup.getModes().get("bicycle"); if (bicycleParams == null) { throw new NullPointerException("Bicycle is not part of the valid mode parameters " + cnScoringGroup.getModes().keySet()); } this.marginalCostOfInfrastructure_m = -(bicycleConfigGroup.getMarginalUtilityOfInfrastructure_m()); this.marginalCostOfComfort_m = -(bicycleConfigGroup.getMarginalUtilityOfComfort_m()); this.marginalCostOfGradient_m_100m = -(bicycleConfigGroup.getMarginalUtilityOfGradient_m_100m()); // TODO Needed as long as network mode filtering kicks out attributes; remove when possible, dz, sep'17 // Also see comments in BicycleTravelDisutilityFactory this.network = network; }
public TravelTimeBasedTravelDisutility(final TravelTime timeCalculator, PlanCalcScoreConfigGroup cnScoringGroup) { this.timeCalculator = timeCalculator; /* Usually, the travel-utility should be negative (it's a disutility) * but the cost should be positive. Thus negate the utility. */ this.marginalCostOfTime = (-cnScoringGroup.getModes().get(TransportMode.car).getMarginalUtilityOfTraveling() / 3600.0) + (cnScoringGroup.getPerforming_utils_hr() / 3600.0); }
private void logWarningsIfNecessary(final PlanCalcScoreConfigGroup cnScoringGroup) { if ( wrnCnt < 1 ) { wrnCnt++ ; if ( cnScoringGroup.getModes().get( mode ).getMonetaryDistanceRate() > 0. ) { log.warn("Monetary distance cost rate needs to be NEGATIVE to produce the normal " + "behavior; just found positive. Continuing anyway.") ; } final Set<String> monoSubpopKeyset = Collections.singleton( null ); if ( !cnScoringGroup.getScoringParametersPerSubpopulation().keySet().equals( monoSubpopKeyset ) ) { log.warn( "Scoring parameters are defined for different subpopulations." + " The routing disutility will only consider the ones of the default subpopulation."); log.warn( "This warning can safely be ignored if disutility of traveling only depends on travel time."); } } }
public FreespeedTravelTimeAndDisutility(PlanCalcScoreConfigGroup cnScoringGroup){ this(cnScoringGroup.getModes().get(TransportMode.car).getMarginalUtilityOfTraveling() / 3600.0, cnScoringGroup.getPerforming_utils_hr() / 3600.0, // cnScoringGroup.getMarginalUtlOfDistanceCar()); cnScoringGroup.getModes().get(TransportMode.car).getMonetaryDistanceRate() *cnScoringGroup.getMarginalUtilityOfMoney()); }
BicycleTravelDisutility(BicycleConfigGroup bicycleConfigGroup, PlanCalcScoreConfigGroup cnScoringGroup, PlansCalcRouteConfigGroup plansCalcRouteConfigGroup, TravelTime timeCalculator, double normalization) { final PlanCalcScoreConfigGroup.ModeParams bicycleParams = cnScoringGroup.getModes().get("bicycle"); if (bicycleParams == null) { throw new NullPointerException("Bicycle is not part of the valid mode parameters " + cnScoringGroup.getModes().keySet()); } this.marginalCostOfDistance_m = -(bicycleParams.getMonetaryDistanceRate() * cnScoringGroup.getMarginalUtilityOfMoney()) - bicycleParams.getMarginalUtilityOfDistance(); this.marginalCostOfTime_s = -(bicycleParams.getMarginalUtilityOfTraveling() / 3600.0) + cnScoringGroup.getPerforming_utils_hr() / 3600.0; this.marginalCostOfInfrastructure_m = -(bicycleConfigGroup.getMarginalUtilityOfInfrastructure_m()); this.marginalCostOfComfort_m = -(bicycleConfigGroup.getMarginalUtilityOfComfort_m()); this.marginalCostOfGradient_m_100m = -(bicycleConfigGroup.getMarginalUtilityOfGradient_m_100m()); this.timeCalculator = timeCalculator; this.normalization = normalization; this.sigma = plansCalcRouteConfigGroup.getRoutingRandomness(); this.random = sigma != 0 ? MatsimRandom.getLocalInstance() : null; }
public NetworkModeAccessibilityExpContributionCalculator(final TravelTime travelTime, final TravelDisutilityFactory travelDisutilityFactory, final Scenario scenario, final Network network) { this.network = network; final PlanCalcScoreConfigGroup planCalcScoreConfigGroup = scenario.getConfig().planCalcScore(); this.scheme = (RoadPricingScheme) scenario.getScenarioElement( RoadPricingScheme.ELEMENT_NAME ); this.travelTime = travelTime; Gbl.assertNotNull(travelDisutilityFactory); TravelDisutility travelDisutility = travelDisutilityFactory.createTravelDisutility(travelTime); this.lcpt = new LeastCostPathTreeExtended(travelTime, travelDisutility, this.scheme); if ( planCalcScoreConfigGroup.getOrCreateModeParams(TransportMode.car).getMarginalUtilityOfDistance() != 0. ) { log.error( "marginal utility of distance for car different from zero but not used in accessibility computations"); } logitScaleParameter = planCalcScoreConfigGroup.getBrainExpBeta() ; betaCarTT = planCalcScoreConfigGroup.getModes().get(TransportMode.car).getMarginalUtilityOfTraveling() - planCalcScoreConfigGroup.getPerforming_utils_hr(); betaCarTD = planCalcScoreConfigGroup.getMarginalUtilityOfMoney() * planCalcScoreConfigGroup.getModes().get(TransportMode.car).getMonetaryDistanceRate(); betaCarTMC = - planCalcScoreConfigGroup.getMarginalUtilityOfMoney() ; constCar = planCalcScoreConfigGroup.getModes().get(TransportMode.car).getConstant(); betaWalkTT = planCalcScoreConfigGroup.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() - planCalcScoreConfigGroup.getPerforming_utils_hr(); betaWalkTD = planCalcScoreConfigGroup.getModes().get(TransportMode.walk).getMarginalUtilityOfDistance(); this.walkSpeed_m_s = scenario.getConfig().plansCalcRoute().getTeleportedModeSpeeds().get(TransportMode.walk); }
public ConstantSpeedAccessibilityExpContributionCalculator(final String mode, Config config, Network network) { this.network = network; final PlanCalcScoreConfigGroup planCalcScoreConfigGroup = config.planCalcScore() ; if (planCalcScoreConfigGroup.getOrCreateModeParams(mode).getMonetaryDistanceRate() != 0.) { LOG.error("Monetary distance cost rate for " + mode + " different from zero, but not used in accessibility computations"); } logitScaleParameter = planCalcScoreConfigGroup.getBrainExpBeta(); if (config.plansCalcRoute().getTeleportedModeSpeeds().get(mode) == null) { LOG.error("No teleported mode speed for mode " + mode + " set."); } this.modeSpeed_m_h = config.plansCalcRoute().getTeleportedModeSpeeds().get(mode) * 3600.; final PlanCalcScoreConfigGroup.ModeParams modeParams = planCalcScoreConfigGroup.getOrCreateModeParams(mode); betaModeTT = modeParams.getMarginalUtilityOfTraveling() - planCalcScoreConfigGroup.getPerforming_utils_hr(); betaModeTD = modeParams.getMarginalUtilityOfDistance(); constMode = modeParams.getConstant(); betaWalkTT = planCalcScoreConfigGroup.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() - planCalcScoreConfigGroup.getPerforming_utils_hr(); betaWalkTD = planCalcScoreConfigGroup.getModes().get(TransportMode.walk).getMarginalUtilityOfDistance(); this.walkSpeed_m_h = config.plansCalcRoute().getTeleportedModeSpeeds().get(TransportMode.walk) * 3600; }
private static CharyparNagelLegScoring createScoringOnlyConstants(final Network network) { final PlanCalcScoreConfigGroup conf = new PlanCalcScoreConfigGroup(); conf.getModes().get(TransportMode.car).setMarginalUtilityOfTraveling(0.); conf.getModes().get(TransportMode.car).setDailyUtilityConstant(-10000.); conf.getModes().get(TransportMode.car).setDailyMonetaryConstant(-2345.); conf.getModes().get(TransportMode.bike).setMarginalUtilityOfTraveling(0.); conf.getModes().get(TransportMode.bike).setDailyUtilityConstant(-.078); conf.getModes().get(TransportMode.bike).setDailyMonetaryConstant(-0.6); final ScenarioConfigGroup scenarioConfig = new ScenarioConfigGroup(); return new CharyparNagelLegScoring( new ScoringParameters.Builder(conf, conf.getScoringParameters(null), scenarioConfig).build(), network); }
private CharyparNagelLegScoring createDefaultPlusConstants(Network network) { final PlanCalcScoreConfigGroup conf = new PlanCalcScoreConfigGroup(); conf.getModes().get(TransportMode.car).setDailyUtilityConstant(-10000.); conf.getModes().get(TransportMode.car).setDailyMonetaryConstant(-2345.); conf.getModes().get(TransportMode.bike).setDailyUtilityConstant(-.078); conf.getModes().get(TransportMode.bike).setDailyMonetaryConstant(-0.6); final ScenarioConfigGroup scenarioConfig = new ScenarioConfigGroup(); return new CharyparNagelLegScoring( new ScoringParameters.Builder(conf, conf.getScoringParameters(null), scenarioConfig).build(), network); }
private static CharyparNagelLegScoring createScoring( final int seed, final Network network) { final Random random = new Random( seed ); final PlanCalcScoreConfigGroup conf = new PlanCalcScoreConfigGroup(); conf.setMarginalUtlOfWaitingPt_utils_hr( random.nextDouble() * 1000 ); conf.getModes().get(TransportMode.pt).setMonetaryDistanceRate(random.nextDouble() * 1000); conf.getModes().get(TransportMode.pt).setMarginalUtilityOfTraveling(random.nextDouble() * 1000); conf.setUtilityOfLineSwitch( random.nextDouble() * 1000 ); final ScenarioConfigGroup scenarioConfig = new ScenarioConfigGroup(); return new CharyparNagelLegScoring( new ScoringParameters.Builder(conf, conf.getScoringParameters(null), scenarioConfig).build(), network); }
@Test public void testTravelingAndConstantCar() { Fixture f = new Fixture(); final double traveling = -6.0; f.config.planCalcScore().getModes().get(TransportMode.car).setMarginalUtilityOfTraveling(traveling); assertEquals(-3.0, calcScore(f), EPSILON); double constantCar = -6.0; f.config.planCalcScore().getModes().get(TransportMode.car).setConstant(constantCar); assertEquals(-9.0, calcScore(f), EPSILON); }
@Test public void testTravelingPtAndConstantPt() { Fixture f = new Fixture(); final double travelingPt = -9.0; f.config.planCalcScore().getModes().get(TransportMode.pt).setMarginalUtilityOfTraveling(travelingPt); assertEquals(-2.25, calcScore(f), EPSILON); double constantPt = -3.0; f.config.planCalcScore().getModes().get(TransportMode.pt).setConstant(constantPt); assertEquals(-5.25, calcScore(f), EPSILON); }
@Test public void testTravelingWalkAndConstantWalk() { Fixture f = new Fixture(); final double travelingWalk = -18.0; f.config.planCalcScore().getModes().get(TransportMode.walk).setMarginalUtilityOfTraveling(travelingWalk); assertEquals(-9.0, calcScore(f), EPSILON ) ; double constantWalk = -1.0; f.config.planCalcScore().getModes().get(TransportMode.walk).setConstant(constantWalk); assertEquals(-10.0, calcScore(f), EPSILON); }
@Test public void testTravelingBikeAndConstantBike(){ Fixture f = new Fixture(); final double travelingBike = -6.0; f.config.planCalcScore().getModes().get(TransportMode.bike).setMarginalUtilityOfTraveling(travelingBike); assertEquals(-1.5, calcScore(f), EPSILON ) ; double constantBike = -2.0; f.config.planCalcScore().getModes().get(TransportMode.bike).setConstant(constantBike); assertEquals(-3.5, calcScore(f), EPSILON); }
@Test public void testDistanceCostScoringCar() { Fixture f = new Fixture(); // test 1 where marginalUtitityOfMoney is fixed to 1.0 f.config.planCalcScore().setMarginalUtilityOfMoney(1.0); // this.config.charyparNagelScoring().setMarginalUtlOfDistanceCar(-0.00001); double monetaryDistanceRateCar1 = -0.00001; f.config.planCalcScore().getModes().get(TransportMode.car).setMonetaryDistanceRate(monetaryDistanceRateCar1); assertEquals(-0.25, calcScore(f), EPSILON); // test 2 where MonetaryDistanceCostRate is fixed to -1.0 double monetaryDistanceRateCar = -1.0; f.config.planCalcScore().getModes().get(TransportMode.car).setMonetaryDistanceRate(monetaryDistanceRateCar); f.config.planCalcScore().setMarginalUtilityOfMoney(0.5); assertEquals(-12500.0, calcScore(f), EPSILON); }
@Test public void testDistanceCostScoringPt() { Fixture f = new Fixture(); // test 1 where marginalUtitityOfMoney is fixed to 1.0 f.config.planCalcScore().setMarginalUtilityOfMoney(1.0); // this.config.charyparNagelScoring().setMarginalUtlOfDistancePt(-0.00001); double monetaryDistanceRatePt1 = -0.00001; f.config.planCalcScore().getModes().get(TransportMode.pt).setMonetaryDistanceRate(monetaryDistanceRatePt1); assertEquals(-0.20, calcScore(f), EPSILON); // test 2 where MonetaryDistanceCostRate is fixed to -1.0 double monetaryDistanceRatePt = -1.0; f.config.planCalcScore().getModes().get(TransportMode.pt).setMonetaryDistanceRate(monetaryDistanceRatePt); f.config.planCalcScore().setMarginalUtilityOfMoney(0.5); assertEquals(-10000.0, calcScore(f), EPSILON); }
@Test public void testCheckPlanCalcScore_TravelingWalk() { Config config = new Config(); config.addCoreModules(); config.planCalcScore().getModes().get(TransportMode.walk).setMarginalUtilityOfTraveling(3.0); LogCounter logger = new LogCounter(Level.WARN); try { logger.activiate(); new ConfigConsistencyCheckerImpl().checkPlanCalcScore(config); Assert.assertEquals(1, logger.getWarnCount()); } finally { // make sure counter is deactivated at the end logger.deactiviate(); } }
@Test public void testCheckPlanCalcScore_TravelingPt() { Config config = new Config(); config.addCoreModules(); config.planCalcScore().getModes().get(TransportMode.pt).setMarginalUtilityOfTraveling(3.0); LogCounter logger = new LogCounter(Level.WARN); try { logger.activiate(); new ConfigConsistencyCheckerImpl().checkPlanCalcScore(config); Assert.assertEquals(1, logger.getWarnCount()); } finally { // make sure counter is deactivated at the end logger.deactiviate(); } }
@Test public void testCheckPlanCalcScore_TravelingBike() { Config config = new Config(); config.addCoreModules(); config.planCalcScore().getModes().get(TransportMode.bike).setMarginalUtilityOfTraveling(3.0); LogCounter logger = new LogCounter(Level.WARN); try { logger.activiate(); new ConfigConsistencyCheckerImpl().checkPlanCalcScore(config); Assert.assertEquals(1, logger.getWarnCount()); } finally { // make sure counter is deactivated at the end logger.deactiviate(); } }
@Test public void testCheckPlanCalcScore_Traveling() { Config config = new Config(); config.addCoreModules(); config.planCalcScore().getModes().get(TransportMode.car).setMarginalUtilityOfTraveling(3.0); LogCounter logger = new LogCounter(Level.WARN); try { logger.activiate(); new ConfigConsistencyCheckerImpl().checkPlanCalcScore(config); Assert.assertEquals(1, logger.getWarnCount()); } finally { // make sure counter is deactivated at the end logger.deactiviate(); } }