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()); }
@Override public void addParameterSet(final ConfigGroup set) { switch (set.getName()) { case ActivityParams.SET_TYPE: addActivityParams((ActivityParams) set); break; case ModeParams.SET_TYPE: addModeParams((ModeParams) set); break; case ScoringParameterSet.SET_TYPE: addScoringParameters((ScoringParameterSet) set); break; default: throw new IllegalArgumentException(set.getName()); } }
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 PathSizeLogitSelector(final PlanCalcScoreConfigGroup config, final Network network) { this( config.getPathSizeLogitBeta(), config.getBrainExpBeta(), 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); }
Assert.assertEquals( "wrong brainExpBeta "+msg, initialGroup.getBrainExpBeta(), inputConfigGroup.getBrainExpBeta(), 1e-7); Assert.assertEquals( "wrong constantBike "+msg, initialGroup.getModes().get(TransportMode.bike).getConstant(), inputConfigGroup.getModes().get(TransportMode.bike).getConstant(), 1e-7); Assert.assertEquals( "wrong constantCar "+msg, initialGroup.getModes().get(TransportMode.car).getConstant(), inputConfigGroup.getModes().get(TransportMode.car).getConstant(), 1e-7); Assert.assertEquals( "wrong constantOther "+msg, initialGroup.getModes().get(TransportMode.other).getConstant(), inputConfigGroup.getModes().get(TransportMode.other).getConstant(), 1e-7); Assert.assertEquals( "wrong constantPt "+msg, initialGroup.getModes().get(TransportMode.pt).getConstant(), inputConfigGroup.getModes().get(TransportMode.pt).getConstant(), 1e-7); Assert.assertEquals( "wrong constantWalk "+msg, initialGroup.getModes().get(TransportMode.walk).getConstant(), inputConfigGroup.getModes().get(TransportMode.walk).getConstant(),
for(ActivityParams params : pcs.getActivityParams()){ params.setTypicalDurationScoreComputation(typicalDurationScoreComputation); pcs.setWriteExperiencedPlans(true); pcs.getModes().get(TransportMode.pt).setConstant(1.); double typicalDuration_s = pcs.getActivityParams("home").getTypicalDuration() ; double priority = 1. ; ActivityUtilityParameters.Builder builder = new ActivityUtilityParameters.Builder( pcs.getActivityParams("home") ) ; ActivityUtilityParameters params = builder.build() ; double zeroUtilityDurationHome_s = params.getZeroUtilityDuration_h() * 3600. ; double score = pcs.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() * (stop1Arr-homeAct1End)/3600. ; System.out.println("score after walk: " + score ) ; score += pcs.getModes().get(TransportMode.pt).getConstant(); System.out.println("score after addition of pt constant: " + score ) ; score += pcs.getModes().get(TransportMode.pt).getMarginalUtilityOfTraveling() * (enterVeh-ptIA1ActEnd)/3600. ; System.out.println("score after wait: " + score ) ; score += pcs.getModes().get(TransportMode.pt).getMarginalUtilityOfTraveling() * (leaveVeh-enterVeh)/3600. ; System.out.println("score after travel pt: " + score ) ; score += pcs.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() * (home2Arr-ptIA2ActEnd)/3600. ; System.out.println("score after walk: " + score ) ; double tmpScore = (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s
public TransitRouterConfig(final PlanCalcScoreConfigGroup pcsConfig, final PlansCalcRouteConfigGroup pcrConfig, final TransitRouterConfigGroup trConfig, final VspExperimentalConfigGroup vspConfig ) pcsConfig.setLocked(); pcrConfig.setLocked() ; trConfig.setLocked() ; vspConfig.setLocked() ; if (pcsConfig.getScoringParametersPerSubpopulation().size()>1){ Logger.getLogger(getClass()).warn("More than one subpopulation is used in plansCalcScore. " + "This is not currently implemented in the TransitRouter (but should work for scoring)," / beelineDistanceFactor ; this.marginalUtilityOfTravelTimeWalk_utl_s = pcsConfig.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() /3600.0 - pcsConfig.getPerforming_utils_hr()/3600. ; this.marginalUtilityOfTravelDistanceWalk_utl_m = pcsConfig.getMarginalUtilityOfMoney() * pcsConfig.getModes().get(TransportMode.walk).getMonetaryDistanceRate() + pcsConfig.getModes().get(TransportMode.walk).getMarginalUtilityOfDistance(); this.marginalUtilityOfTravelTimeTransit_utl_s = pcsConfig.getModes().get(TransportMode.pt).getMarginalUtilityOfTraveling() /3600.0 - pcsConfig.getPerforming_utils_hr()/3600. ; this.marginalUtilityOfTravelDistanceTransit_utl_m = pcsConfig.getMarginalUtilityOfMoney() * pcsConfig.getModes().get(TransportMode.pt).getMonetaryDistanceRate() + pcsConfig.getModes().get(TransportMode.pt).getMarginalUtilityOfDistance(); this.marginalUtilityOfWaitingPt_utl_s = pcsConfig.getMarginalUtlOfWaitingPt_utils_hr() / 3600.0 - pcsConfig.getPerforming_utils_hr()/3600. ; this.utilityOfLineSwitch_utl = pcsConfig.getUtilityOfLineSwitch();
@Override public double computeContributionOfOpportunity(ActivityFacility origin, final AggregationObject destination, Double departureTime) { Person person = null ; // I think that this is ok ActivityFacilitiesFactory activityFacilitiesFactory = new ActivityFacilitiesFactoryImpl(); ActivityFacility destinationFacility = activityFacilitiesFactory.createActivityFacility(null, destination.getNearestNode().getCoord()); Gbl.assertNotNull(tripRouter); List<? extends PlanElement> plan = tripRouter.calcRoute(mode, origin, destinationFacility, departureTime, person); // Vehicle vehicle = null ; // I think that this is ok double utility = 0.; List<Leg> legs = TripStructureUtils.getLegs(plan); // TODO Doing it like this, the pt interaction (e.g. waiting) times will be omitted! Gbl.assertIf(!legs.isEmpty()); for (Leg leg : legs) { // Add up all utility components of leg utility += leg.getRoute().getDistance() * this.planCalcScoreConfigGroup.getModes().get(leg.getMode()).getMarginalUtilityOfDistance(); utility += leg.getRoute().getTravelTime() * this.planCalcScoreConfigGroup.getModes().get(leg.getMode()).getMarginalUtilityOfTraveling() / 3600.; utility += -leg.getRoute().getTravelTime() * this.planCalcScoreConfigGroup.getPerforming_utils_hr() / 3600.; } // Utility based on opportunities that are attached to destination node double sumExpVjkWalk = destination.getSum(); // exp(beta * a) * exp(beta * b) = exp(beta * (a+b)) return Math.exp(this.planCalcScoreConfigGroup.getBrainExpBeta() * utility) * sumExpVjkWalk; } }
for(ActivityParams params : pcs.getActivityParams()){ params.setTypicalDurationScoreComputation(typicalDurationScoreComputation); pcs.setWriteExperiencedPlans(true); pcs.setMarginalUtlOfWaitingPt_utils_hr(-18.0) ; double typicalDuration_s = pcs.getActivityParams("home").getTypicalDuration() ; double priority = 1. ; ActivityUtilityParameters.Builder builder = new ActivityUtilityParameters.Builder( pcs.getActivityParams("home") ) ; ActivityUtilityParameters params = builder.build() ; double zeroUtilityDurationHome_s = params.getZeroUtilityDuration_h() * 3600. ; double score = pcs.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() * (timeTransitWalk/3600.) ; System.out.println("score: " + score ) ; System.out.println("marginalUtlOfWaitPt: " + pcs.getMarginalUtlOfWaitingPt_utils_hr() ) ; score += pcs.getMarginalUtlOfWaitingPt_utils_hr() * timeTransitWait/3600. ; score += pcs.getModes().get(TransportMode.pt).getMarginalUtilityOfTraveling() * timeTransitInVeh/3600. ; System.out.println("score: " + score ) ; score += pcs.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() * timeTransitWalk2/3600. ; System.out.println("score: " + score ) ; score += (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s * Math.log(timeHome/zeroUtilityDurationHome_s) ; System.out.println("final score: " + score ) ;
TravelDisutilityIncludingToll(final TravelDisutility normalTravelDisutility, final RoadPricingScheme scheme, Config config) { this( normalTravelDisutility, scheme, config.planCalcScore().getMarginalUtilityOfMoney(), 0. ) ; // this is using sigma=0 for backwards compatibility (not sure how often this is needed) }
@Test public void testCheckPlanCalcScore_PtInteractionActivity() { Config config = new Config(); config.addCoreModules(); ActivityParams transitActivityParams = new ActivityParams(PtConstants.TRANSIT_ACTIVITY_TYPE); transitActivityParams.setClosingTime(1.) ; config.planCalcScore().addActivityParams(transitActivityParams); try { new ConfigConsistencyCheckerImpl().checkPlanCalcScore(config); Assert.assertEquals(0,1) ; // should never get here } catch ( Exception ee ){ System.out.println("expected exception") ; } config.vspExperimental().setAbleToOverwritePtInteractionParams(true) ; try { new ConfigConsistencyCheckerImpl().checkPlanCalcScore(config); } catch ( Exception ee ){ Assert.assertEquals(0,1) ; // should never get here } }
@Override public ExpBetaPlanSelector<Plan, Person> get() { return new ExpBetaPlanSelector<>( - config.getBrainExpBeta()); } }
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; }
config.planCalcScore().addActivityParams(homeActivity); config.planCalcScore().addActivityParams(workActivity); bicycle.setMarginalUtilityOfTraveling(-6.0); // util/h bicycle.setMonetaryDistanceRate(0.); config.planCalcScore().addModeParams(bicycle);
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); }
private static ConfigGroup toUnderscoredModule(final PlanCalcScoreConfigGroup initialGroup) { final ConfigGroup module = new ConfigGroup( initialGroup.getName() ); for ( Map.Entry<String, String> e : initialGroup.getParams().entrySet() ) { log.info( "add param "+e.getKey() ); module.addParam( e.getKey() , e.getValue() ); for ( ActivityParams settings : initialGroup.getActivityParams() ) { final String suffix = r.nextBoolean() ? ""+ca++ : settings.getActivityType(); for ( ModeParams settings : initialGroup.getModes().values() ) { final String mode = settings.getMode(); module.addParam( "constant_"+mode , ""+settings.getConstant() ); for ( Map.Entry<String, String> params : initialGroup.getScoringParameters( null ).getParams().entrySet() ) { if ( params.getKey().equals( "subpopulation" ) ) continue; module.addParam( params.getKey() , params.getValue() );
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); }
@Test public void testAddActivityParams() { PlanCalcScoreConfigGroup c = new PlanCalcScoreConfigGroup(); Assert.assertNull(c.getActivityParams("type1")); // Assert.assertEquals(0, c.getActivityParams().size()); Assert.assertEquals(6, c.getActivityParams().size()); // yyyyyy see PlanCalcScoreConfigGroup, where I am currently adding interaction activities hard-wired. kai, feb'16 // yyyyyy and now also the "dummy" activity. kai, jul'17 ActivityParams ap = new ActivityParams("type1"); c.addActivityParams(ap); Assert.assertEquals(ap, c.getActivityParams("type1")); // Assert.assertEquals(1, c.getActivityParams().size()); Assert.assertEquals(7, c.getActivityParams().size()); // yyyyyy see PlanCalcScoreConfigGroup, where I am currently adding interaction activities hard-wired. kai, feb'16 // yyyyyy and now also the "dummy" activity. kai, jul'17 }
config.strategy().addStrategySettings(stratSets); final double traveling = -1200.0; config.planCalcScore().getModes().get(TransportMode.car).setMarginalUtilityOfTraveling(traveling); ActivityParams params = new ActivityParams("home"); params.setTypicalDuration(24.0 * 3600.0); config.planCalcScore().addActivityParams(params); config.qsim().setUseLanes(doCreateLanes);