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); }
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()); }
public LeastCostPathCalculator asPathCalculator(PlanCalcScoreConfigGroup planCalcScoreConfigGroup) { final double betaWalkTT = planCalcScoreConfigGroup.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() - planCalcScoreConfigGroup.getPerforming_utils_hr(); final double betaWalkTD = planCalcScoreConfigGroup.getModes().get(TransportMode.walk).getMarginalUtilityOfDistance(); final double betaPtTT = planCalcScoreConfigGroup.getModes().get(TransportMode.pt).getMarginalUtilityOfTraveling() - planCalcScoreConfigGroup.getPerforming_utils_hr(); final double betaPtTD = planCalcScoreConfigGroup.getMarginalUtilityOfMoney() * planCalcScoreConfigGroup.getModes().get(TransportMode.pt).getMonetaryDistanceRate(); final double constPt = planCalcScoreConfigGroup.getModes().get(TransportMode.pt).getConstant(); return new LeastCostPathCalculator() { @Override public Path calcLeastCostPath(Node fromNode, Node toNode, double starttime, Person person, Vehicle vehicle) { // travel time with pt: double ptTravelTime_h = getPtTravelTime_seconds(fromNode.getCoord(), toNode.getCoord()) / 3600.; // total walking time including (i) to get to pt stop and (ii) to get from destination pt stop to destination location: double ptTotalWalkTime_h = getTotalWalkTravelTime_seconds(fromNode.getCoord(), toNode.getCoord()) / 3600.; // total travel distance including walking and pt distance from/to origin/destination location: double ptTravelDistance_meter = getTotalWalkTravelDistance_meter(fromNode.getCoord(), toNode.getCoord()); // total walk distance including (i) to get to pt stop and (ii) to get from destination pt stop to destination location: double ptTotalWalkDistance_meter = getPtTravelDistance_meter(fromNode.getCoord(), toNode.getCoord()); return new Path( Arrays.asList(fromNode, toNode), Collections.<Link>emptyList(), getTotalTravelTime_seconds(fromNode.getCoord(), toNode.getCoord()), constPt + (ptTotalWalkTime_h * betaWalkTT) + (ptTravelTime_h * betaPtTT) + (ptTotalWalkDistance_meter * betaWalkTD) + (ptTravelDistance_meter * betaPtTD) ); } }; }
@Override public TravelDisutility createTravelDisutility( final TravelTime travelTime) { logWarningsIfNecessary( cnScoringGroup ); final PlanCalcScoreConfigGroup.ModeParams params = cnScoringGroup.getModes().get( mode ) ; if ( params == null ) { throw new NullPointerException( mode+" is not part of the valid mode parameters "+cnScoringGroup.getModes().keySet() ); } /* Usually, the travel-utility should be negative (it's a disutility) but the cost should be positive. Thus negate the utility.*/ final double marginalCostOfTime_s = (-params.getMarginalUtilityOfTraveling() / 3600.0) + (cnScoringGroup.getPerforming_utils_hr() / 3600.0); final double marginalCostOfDistance_m = - params.getMonetaryDistanceRate() * cnScoringGroup.getMarginalUtilityOfMoney() - params.getMarginalUtilityOfDistance() ; double normalization = 1; if ( sigma != 0. ) { normalization = 1. / Math.exp(this.sigma * this.sigma / 2); if (normalisationWrnCnt < 10) { normalisationWrnCnt++; log.info(" sigma: " + this.sigma + "; resulting normalization: " + normalization); } } return new RandomizingTimeDistanceTravelDisutility( travelTime, marginalCostOfTime_s, marginalCostOfDistance_m, normalization, sigma); }
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; }
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); }
- this.cnScoringGroup.getPerforming_utils_hr(); // default values: -12 = (-6.) - (6.) double VjkWalkTravelTime = walkBetaTT_utils_h * (distance_m / this.walkSpeed_m_h);
/ beelineDistanceFactor ; this.marginalUtilityOfTravelTimeWalk_utl_s = pcsConfig.getModes().get(TransportMode.walk).getMarginalUtilityOfTraveling() /3600.0 - pcsConfig.getPerforming_utils_hr()/3600. ; this.marginalUtilityOfTravelTimeTransit_utl_s = pcsConfig.getModes().get(TransportMode.pt).getMarginalUtilityOfTraveling() /3600.0 - pcsConfig.getPerforming_utils_hr()/3600. ; pcsConfig.getModes().get(TransportMode.pt).getMarginalUtilityOfDistance(); this.marginalUtilityOfWaitingPt_utl_s = pcsConfig.getMarginalUtlOfWaitingPt_utils_hr() / 3600.0 - pcsConfig.getPerforming_utils_hr()/3600. ;
@Override public void updateTolls() { final double vtts = ( this.congestionInfo.getScenario().getConfig().planCalcScore().getPerforming_utils_hr() - this.congestionInfo.getScenario().getConfig().planCalcScore().getModes().get(TransportMode.car).getMarginalUtilityOfTraveling() ) / this.congestionInfo.getScenario().getConfig().planCalcScore().getMarginalUtilityOfMoney();
betaTime -= this.scenario.getConfig().planCalcScore().getPerforming_utils_hr() ;
@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; } }
System.out.println("score after walk: " + score ) ; double tmpScore = (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s double slope = (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s / zeroUtilityDurationHome_s ; tmpScore = zeroUtilityDurationHome_s * slope ; System.out.println("score after walk: " + score ) ; score += (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s * Math.log((homeAct1End-home3Arr+24.*3600)/zeroUtilityDurationHome_s) ; System.out.println("score after home act: " + score ) ;
double tmpScore = (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s double slope = (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s / zeroUtilityDurationHome_s ; tmpScore = zeroUtilityDurationHome_s * slope ; System.out.println("score after walk: " + score ) ; score += (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s * Math.log((homeAct1End-home3Arr+24.*3600)/zeroUtilityDurationHome_s) ; System.out.println("score after home act: " + score ) ;
System.out.println("score: " + score ) ; score += (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s * Math.log(timeHome/zeroUtilityDurationHome_s) ; System.out.println("score: " + score ) ;
System.out.println("score: " + score ) ; score += (pcs.getPerforming_utils_hr()/3600.) * typicalDuration_s * Math.log(timeHome/zeroUtilityDurationHome_s) ; System.out.println("final score: " + score ) ;
Assert.assertEquals( "wrong performing_utils_hr "+msg, initialGroup.getPerforming_utils_hr(), inputConfigGroup.getPerforming_utils_hr(), 1e-7 ); Assert.assertEquals(