@Inject RandomizingTransitRouterFactory(Config config, TransitSchedule schedule) { this.trConfig = new TransitRouterConfig(config); this.schedule = schedule; this.routerNetwork = TransitRouterNetwork.createFromSchedule(schedule, trConfig.getBeelineWalkConnectionDistance()); }
public EventsToTravelDiaries(TransitSchedule transitSchedule, Network network, Config config) { networkModes.addAll(config.qsim().getMainModes()); this.network = network; this.walkSpeed = new TransitRouterConfig(config).getBeelineWalkSpeed(); this.transitSchedule = transitSchedule; this.isTransitScenario = true; }
@Inject TransitRouterImplFactory(final TransitSchedule schedule, final EventsManager events, final Config config) { this(schedule, new TransitRouterConfig( config.planCalcScore(), config.plansCalcRoute(), config.transitRouter(), config.vspExperimental())); events.addHandler((TransitScheduleChangedEventHandler) event -> { routerNetwork = null; preparedTransitSchedule = null; }); }
@Inject RaptorTransitRouterProvider(final TransitSchedule schedule, final Config config) { //TODO : These numbers are set in PConfigGroup. Need to provide a way to set these numbers if someone does not want to use PConfigGroup? double costPerMeterTraveled = 0.; double costPerBoarding = 0.; this.transitRouterConfig = new TransitRouterConfig( config.planCalcScore(), config.plansCalcRoute(), config.transitRouter(), config.vspExperimental()); this.raptorDisutility = new RaptorDisutility(this.transitRouterConfig, costPerBoarding, costPerMeterTraveled); this.schedule = schedule; }
public EventsToTravelDiaries(Scenario scenario) { networkModes.addAll(scenario.getConfig().qsim().getMainModes()); this.network = scenario.getNetwork(); isTransitScenario = scenario.getConfig().transit().isUseTransit(); if (isTransitScenario) { this.transitSchedule = scenario.getTransitSchedule(); this.walkSpeed = new TransitRouterConfig(scenario.getConfig()).getBeelineWalkSpeed(); } }
@Inject public TransitRouterEventsWSFactory(final Scenario scenario, final WaitTime waitTime, final StopStopTime stopStopTime) { this.config = new TransitRouterConfig(scenario.getConfig().planCalcScore(), scenario.getConfig().plansCalcRoute(), scenario.getConfig().transitRouter(), scenario.getConfig().vspExperimental()); routerNetwork = TransitRouterNetworkWW.createFromSchedule(scenario.getNetwork(), scenario.getTransitSchedule(), this.config.getBeelineWalkConnectionDistance()); this.scenario = scenario; this.waitTime = waitTime; this.stopStopTime = stopStopTime; } @Override
public TransitRouterEventsWSVFactory(final Scenario scenario, final WaitTime waitTime, final StopStopTime stopStopTime, final VehicleOccupancy vehicleOccupancy) { this.config = new TransitRouterConfig(scenario.getConfig().planCalcScore(), scenario.getConfig().plansCalcRoute(), scenario.getConfig().transitRouter(), scenario.getConfig().vspExperimental()); routerNetwork = TransitRouterNetworkWW.createFromSchedule(scenario.getNetwork(), scenario.getTransitSchedule(), this.config.getBeelineWalkConnectionDistance()); this.scenario = scenario; this.waitTime = waitTime; this.stopStopTime = stopStopTime; this.vehicleOccupancy = vehicleOccupancy; } @Override
public TransitRouterEventsWLFactory(final MatsimServices controler, final WaitTime waitTime) { this.config = new TransitRouterConfig(controler.getScenario().getConfig().planCalcScore(), controler.getScenario().getConfig().plansCalcRoute(), controler.getScenario().getConfig().transitRouter(), controler.getScenario().getConfig().vspExperimental()); this.network = controler.getScenario().getNetwork(); this.controler = controler; this.waitTime = waitTime; routerNetwork = TransitRouterNetworkWW.createFromSchedule(network, controler.getScenario().getTransitSchedule(), this.config.getBeelineWalkConnectionDistance()); } @Override
@Test public void testFromToSameStop() { Fixture f = new Fixture(); f.init(); TransitRouterConfig trConfig = new TransitRouterConfig(f.scenario.getConfig()); TransitRouter router = createTransitRouter(f.schedule, trConfig, routerType); Coord fromCoord = new Coord((double) 3800, (double) 5100); Coord toCoord = new Coord((double) 4100, (double) 5050); List<Leg> legs = router.calcRoute(new FakeFacility(fromCoord), new FakeFacility(toCoord), 5.0*3600, null); assertEquals(1, legs.size()); assertEquals(TransportMode.transit_walk, legs.get(0).getMode()); double actualTravelTime = 0.0; for (Leg leg : legs) { actualTravelTime += leg.getTravelTime(); } double expectedTravelTime = CoordUtils.calcEuclideanDistance(fromCoord, toCoord) / trConfig.getBeelineWalkSpeed(); assertEquals(expectedTravelTime, actualTravelTime, MatsimTestCase.EPSILON); }
public void testTravelTime() { Fixture f = new Fixture(); f.init(); TransitRouterConfig conf = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental()); TransitRouterNetworkTravelTimeAndDisutility tc = new TransitRouterNetworkTravelTimeAndDisutility(conf); TransitRouterImpl router = new TransitRouterImpl(conf, f.schedule); TransitRouterNetwork routerNet = router.getTransitRouterNetwork(); // find the link connecting C and G on the red line TransitRouterNetworkLink testLink = null; for (TransitRouterNetworkLink link : routerNet.getLinks().values()) { if ((link.getLine() == f.redLine) && (link.fromNode.stop.getStopFacility().getName().equals("C")) && (link.toNode.stop.getStopFacility().getName().equals("G"))) { testLink = link; } } assertEquals(9.0*60, tc.getLinkTravelTime(testLink, 6.0*3600, null, null), MatsimTestCase.EPSILON); }
@Test public void testTransferWalkDistance(){ Fixture f = new Fixture(); f.init(); TransitRouterConfig config = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental()); TransitRouter router = createTransitRouter(f.schedule, config, routerType); Coord fromCoord = new Coord((double) 3800, (double) 5100); Coord toCoord = new Coord((double) 16100, (double) 10050); List<Leg> legs = router.calcRoute(new FakeFacility(fromCoord), new FakeFacility(toCoord), 6.0*3600, null); Leg leg1 = legs.get(1); ExperimentalTransitRoute route1 = (ExperimentalTransitRoute) leg1.getRoute(); Coord coord1 = f.schedule.getFacilities().get(route1.getEgressStopId()).getCoord(); Leg leg3 = legs.get(3); ExperimentalTransitRoute route3 = (ExperimentalTransitRoute) leg3.getRoute(); Coord coord3 = f.schedule.getFacilities().get(route3.getAccessStopId()).getCoord(); double beelineFactor = f.scenario.getConfig().plansCalcRoute().getModeRoutingParams().get(TransportMode.walk).getBeelineDistanceFactor(); assertEquals(CoordUtils.calcEuclideanDistance(coord1, coord3) * beelineFactor, legs.get(2).getRoute().getDistance(), MatsimTestCase.EPSILON); }
public void testTravelTime() { //create the scenario test Fixture f = new Fixture(); f.init(); //create the adapted router TransitRouterConfig conf = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental()); TransitRouterNetworkTravelTimeAndDisutility tc = new TransitRouterNetworkTravelTimeAndDisutility(conf); TransitRouterImpl router = new TransitRouterImpl(conf, f.schedule) ; TransitRouterNetwork routerNet = router.getTransitRouterNetwork(); // find the link connecting C and G on the red line TransitRouterNetworkLink testLink = null; for (TransitRouterNetworkLink link : routerNet.getLinks().values()) { if ((link.getLine() == f.redLine) && (link.fromNode.stop.getStopFacility().getName().equals("C")) && (link.toNode.stop.getStopFacility().getName().equals("G"))) { testLink = link; } } //at 6:00 the link travel time = 540 assertEquals(9.0*60, tc.getLinkTravelTime(testLink, 6.0*3600, null, null), MatsimTestCase.EPSILON); }
@Test public void testSingleLine() { Fixture f = new Fixture(); f.init(); TransitRouterConfig trConfig = new TransitRouterConfig(f.scenario.getConfig()); TransitRouter router = createTransitRouter(f.schedule, trConfig, routerType); Coord fromCoord = new Coord(3800, 5100); Coord toCoord = new Coord(16100, 5050); List<Leg> legs = router.calcRoute(new FakeFacility(fromCoord), new FakeFacility(toCoord), 5.0*3600, null); assertEquals(3, legs.size()); assertEquals(TransportMode.transit_walk, legs.get(0).getMode()); assertEquals(TransportMode.pt, legs.get(1).getMode()); assertEquals(TransportMode.transit_walk, legs.get(2).getMode()); assertTrue("expected TransitRoute in leg.", legs.get(1).getRoute() instanceof ExperimentalTransitRoute); ExperimentalTransitRoute ptRoute = (ExperimentalTransitRoute) legs.get(1).getRoute(); assertEquals(Id.create("0", TransitStopFacility.class), ptRoute.getAccessStopId()); assertEquals(Id.create("6", TransitStopFacility.class), ptRoute.getEgressStopId()); assertEquals(f.blueLine.getId(), ptRoute.getLineId()); assertEquals(Id.create("blue A > I", TransitRoute.class), ptRoute.getRouteId()); double actualTravelTime = 0.0; for (Leg leg : legs) { actualTravelTime += leg.getTravelTime(); } double expectedTravelTime = 29.0 * 60 + // agent takes the *:06 course, arriving in D at *:29 CoordUtils.calcEuclideanDistance(f.schedule.getFacilities().get(Id.create("6", TransitStopFacility.class)).getCoord(), toCoord) / trConfig.getBeelineWalkSpeed(); assertEquals(expectedTravelTime, actualTravelTime, MatsimTestCase.EPSILON); }
@Test public void testCoordFarAway() { Fixture f = new Fixture(); f.init(); final TransitRouterConfig trConfig = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental() ); TransitRouter router = createTransitRouter(f.schedule, trConfig, routerType); double x = +42000; double x1 = -2000; List<Leg> legs = router.calcRoute(new FakeFacility(new Coord(x1, (double) 0)), new FakeFacility(new Coord(x, (double) 0)), 5.5*3600, null); // should map to stops A and I assertEquals(3, legs.size()); assertEquals(TransportMode.transit_walk, legs.get(0).getMode()); assertEquals(TransportMode.pt, legs.get(1).getMode()); assertEquals(TransportMode.transit_walk, legs.get(2).getMode()); assertTrue("expected TransitRoute in leg.", legs.get(1).getRoute() instanceof ExperimentalTransitRoute); ExperimentalTransitRoute ptRoute = (ExperimentalTransitRoute) legs.get(1).getRoute(); assertEquals(Id.create("0", TransitStopFacility.class), ptRoute.getAccessStopId()); assertEquals(Id.create("16", TransitStopFacility.class), ptRoute.getEgressStopId()); assertEquals(f.blueLine.getId(), ptRoute.getLineId()); assertEquals(Id.create("blue A > I", TransitRoute.class), ptRoute.getRouteId()); }
public void testWaitingTime() { Fixture f = new Fixture(); f.init(); TransitRouterConfig conf = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental()); TransitRouterNetworkTravelTimeAndDisutility tc = new TransitRouterNetworkTravelTimeAndDisutility(conf); TransitRouterImpl router = new TransitRouterImpl(conf, f.schedule); TransitRouterNetwork routerNet = router.getTransitRouterNetwork(); // find the link connecting C and D on the blue line TransitRouterNetworkLink testLink = null; for (TransitRouterNetworkLink link : routerNet.getLinks().values()) { if ((link.getLine() == f.blueLine) && (link.fromNode.stop.getStopFacility().getName().equals("C")) && (link.toNode.stop.getStopFacility().getName().equals("D"))) { testLink = link; } } assertEquals(2.0*60 + 7.0*60, tc.getLinkTravelTime(testLink, 6.0*3600, null, null), MatsimTestCase.EPSILON); assertEquals(1.0*60 + 7.0*60, tc.getLinkTravelTime(testLink, 6.0*3600 + 60, null, null), MatsimTestCase.EPSILON); assertEquals(0.0*60 + 7.0*60, tc.getLinkTravelTime(testLink, 6.0*3600 + 120, null, null), MatsimTestCase.EPSILON); assertEquals(20.0*60 -1 + 7.0*60, tc.getLinkTravelTime(testLink, 6.0*3600 + 121, null, null), MatsimTestCase.EPSILON); }
public void testTravelTimeAfterMidnight() { Fixture f = new Fixture(); f.init(); TransitRouterConfig conf = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental()); TransitRouterNetworkTravelTimeAndDisutility tc = new TransitRouterNetworkTravelTimeAndDisutility(conf); TransitRouterImpl router = new TransitRouterImpl(conf, f.schedule); TransitRouterNetwork routerNet = router.getTransitRouterNetwork(); // find the link connecting C and D on the blue line TransitRouterNetworkLink testLink = null; for (TransitRouterNetworkLink link : routerNet.getLinks().values()) { if ((link.getLine() == f.blueLine) && (link.fromNode.stop.getStopFacility().getName().equals("C")) && (link.toNode.stop.getStopFacility().getName().equals("D"))) { testLink = link; } } // planned departure at 25:00, has to wait until 05:22 = 29:22 assertEquals(22.0*60 + 4.0*3600 + 7.0*60, tc.getLinkTravelTime(testLink, 25.0*3600, null, null), MatsimTestCase.EPSILON); // planned departure at 47:00, has to wait until 05:22 = 53:22 assertEquals(22.0*60 + 6.0*3600 + 7.0*60, tc.getLinkTravelTime(testLink, 47.0*3600, null, null), MatsimTestCase.EPSILON); // planned departure at 49:00, has to wait until 05:22 = 53:22, tests explicitly > 2*MIDNIGHT assertEquals(22.0*60 + 4.0*3600 + 7.0*60, tc.getLinkTravelTime(testLink, 49.0*3600, null, null), MatsimTestCase.EPSILON); }
/** * Instantiates a new TransitLeastCostPathTree object with a sample transitSchedule and default configuration. */ public void instantiateNetworkAndTravelDisutility() { String transitScheduleFile = "test/scenarios/pt-tutorial/transitschedule.xml"; Config config = ConfigUtils.createConfig(); Scenario scenario = ScenarioUtils.loadScenario(config); scenario.getConfig().transit().setUseTransit(true); TransitScheduleReader reader = new TransitScheduleReader(scenario); TransitRouterConfig transitRouterConfig = new TransitRouterConfig(scenario.getConfig()); reader.readFile(transitScheduleFile); TransitSchedule transitSchedule = scenario.getTransitSchedule(); network = TransitRouterNetwork.createFromSchedule(transitSchedule, transitRouterConfig.getBeelineWalkConnectionDistance()); PreparedTransitSchedule preparedTransitSchedule = new PreparedTransitSchedule(transitSchedule); travelDisutility = new TransitRouterNetworkTravelTimeAndDisutility(transitRouterConfig, preparedTransitSchedule); }
public void testTravelCostLineSwitch() { Fixture f = new Fixture(); f.init(); TransitRouterConfig conf = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental()); TransitRouterNetworkTravelTimeAndDisutility tc = new TransitRouterNetworkTravelTimeAndDisutility(conf); TransitRouterImpl router = new TransitRouterImpl(conf, f.schedule) ; TransitRouterNetwork routerNet = router.getTransitRouterNetwork(); // find the link connecting C and D on the blue line TransitRouterNetworkLink testLink = null; for (TransitRouterNetworkLink link : routerNet.getLinks().values()) { if ((link.getLine() == null) && (link.fromNode.stop.getStopFacility().getName().equals("C")) && (link.toNode.stop.getStopFacility().getName().equals("C"))) { testLink = link; } } double oldCost = - conf.getUtilityOfLineSwitch_utl(); double cost1 = tc.getLinkTravelDisutility(testLink, 7.0*3600, null, null, null); conf.setUtilityOfLineSwitch_utl(0.0); double cost2 = tc.getLinkTravelDisutility(testLink, 6.0*3600, null, null, null); // use different time because of internal caching effects assertEquals(oldCost, cost1 - cost2, MatsimTestCase.EPSILON); conf.setUtilityOfLineSwitch_utl(-40.125); double cost3 = tc.getLinkTravelDisutility(testLink, 5.0*3600, null, null, null); assertEquals(40.125, cost3 - cost2, MatsimTestCase.EPSILON); }
@Test public void testDirectWalkCheaper() { Fixture f = new Fixture(); f.init(); TransitRouterConfig trConfig = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental()); TransitRouter router = createTransitRouter(f.schedule, trConfig, routerType); Coord fromCoord = new Coord((double) 4000, (double) 3000); Coord toCoord = new Coord((double) 8000, (double) 3000); List<Leg> legs = router.calcRoute(new FakeFacility(fromCoord), new FakeFacility(toCoord), 5.0*3600, null); assertEquals(1, legs.size()); assertEquals(TransportMode.transit_walk, legs.get(0).getMode()); double actualTravelTime = 0.0; for (Leg leg : legs) { actualTravelTime += leg.getTravelTime(); } double expectedTravelTime = CoordUtils.calcEuclideanDistance(fromCoord, toCoord) / trConfig.getBeelineWalkSpeed(); assertEquals(expectedTravelTime, actualTravelTime, MatsimTestCase.EPSILON); }
@Test public void testSingleLine_DifferentWaitingTime() { Fixture f = new Fixture(); f.init(); TransitRouterConfig trConfig = new TransitRouterConfig(f.scenario.getConfig().planCalcScore(), f.scenario.getConfig().plansCalcRoute(), f.scenario.getConfig().transitRouter(), f.scenario.getConfig().vspExperimental()); TransitRouter router = createTransitRouter(f.schedule, trConfig, routerType); Coord fromCoord = new Coord((double) 4000, (double) 5002); Coord toCoord = new Coord((double) 8000, (double) 5002); double inVehicleTime = 7.0*60; // travel time from A to B for (int min = 0; min < 30; min += 3) { List<Leg> legs = router.calcRoute(new FakeFacility(fromCoord), new FakeFacility(toCoord), 5.0*3600 + min*60, null); assertEquals(3, legs.size()); // walk-pt-walk double actualTravelTime = 0.0; for (Leg leg : legs) { actualTravelTime += leg.getTravelTime(); } double waitingTime = ((46 - min) % 20) * 60; // departures at *:06 and *:26 and *:46 assertEquals("expected different waiting time at 05:"+min, waitingTime, actualTravelTime - inVehicleTime, MatsimTestCase.EPSILON); } }