@Inject RandomizingTransitRouterFactory(Config config, TransitSchedule schedule) { this.trConfig = new TransitRouterConfig(config); this.schedule = schedule; this.routerNetwork = TransitRouterNetwork.createFromSchedule(schedule, trConfig.getBeelineWalkConnectionDistance()); }
public static TransitRouterNetwork createFromSchedule(final TransitSchedule schedule, final double maxBeelineWalkConnectionDistance) { log.info("start creating transit network"); final TransitRouterNetwork network = new TransitRouterNetwork(); final Counter linkCounter = new Counter(" link #"); final Counter nodeCounter = new Counter(" node #"); TransitRouterNetworkNode prevNode = null; for (TransitRouteStop stop : route.getStops()) { TransitRouterNetworkNode node = network.createNode(stop, route, line); nodeCounter.incCounter(); if (prevNode != null) { network.createLink(prevNode, node, route, line); linkCounter.incCounter(); network.finishInit(); // not nice to call "finishInit" here before we added all links... for (TransitRouterNetworkNode node : network.getNodes().values()) { if (node.getInLinks().size() > 0) { // only add links from this node to other nodes if agents actually can arrive here for (TransitRouterNetworkNode node2 : network.getNearestNodes(node.stop.getStopFacility().getCoord(), maxBeelineWalkConnectionDistance)) { if ((node != node2) && (node2.getOutLinks().size() > 0)) { // only add links to other nodes when agents can depart there if ((node.line != node2.line) || (node.stop.getStopFacility() != node2.stop.getStopFacility())) { network.createLink(tuple.getFirst(), tuple.getSecond(), null, null); linkCounter.incCounter(); log.info(" # nodes: " + network.getNodes().size()); log.info(" # links total: " + network.getLinks().size()); log.info(" # transfer links: " + toBeAdded.size());
private Map<Node, InitialNode> locateWrappedNearestTransitNodes(Person person, Coord coord, double departureTime) { Collection<TransitRouterNetwork.TransitRouterNetworkNode> nearestNodes = getTransitRouterNetwork().getNearestNodes( coord, this.getConfig().getSearchRadius()); if (nearestNodes.size() < 2) { // also enlarge search area if only one stop found, maybe a second one is near the border of the search area TransitRouterNetwork.TransitRouterNetworkNode nearestNode = this.getTransitRouterNetwork() .getNearestNode(coord); if (nearestNode != null) { // transit schedule might be completely empty! double distance = CoordUtils.calcEuclideanDistance(coord, nearestNode.stop.getStopFacility().getCoord()); nearestNodes = this.getTransitRouterNetwork() .getNearestNodes(coord, distance + this.getConfig().getExtensionRadius()); } } Map<Node, InitialNode> wrappedNearestNodes = new LinkedHashMap<>(); for (TransitRouterNetwork.TransitRouterNetworkNode node : nearestNodes) { Coord toCoord = node.stop.getStopFacility().getCoord(); double initialTime = getWalkTime(person, coord, toCoord); double initialCost = getWalkDisutility(person, coord, toCoord); wrappedNearestNodes.put(node, new InitialNode(initialCost, initialTime + departureTime)); } return wrappedNearestNodes; }
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); }
/** * Get the very next transitNode. * @param person Which person we are routing for. For default leave null. * @param coord The origin of the tree. * @param departureTime The time the person departures at the origin. * @return the next transitNode. */ private Map<Node, InitialNode> locateWrappedNearestTransitNode(Person person, Coord coord, double departureTime) { TransitRouterNetwork.TransitRouterNetworkNode nearestNode = network.getNearestNode(coord); Map<Node, InitialNode> wrappedNearestNodes = new LinkedHashMap<>(); Coord toCoord = nearestNode.stop.getStopFacility().getCoord(); double initialTime = travelDisutility.getWalkTravelTime(person, coord, toCoord); double initialCost = travelDisutility.getWalkTravelDisutility(person, coord, toCoord); wrappedNearestNodes.put(nearestNode, new InitialNode(initialCost, initialTime + departureTime)); return wrappedNearestNodes; }
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); }
@Override public TransitRouter get() { if (this.routerNetwork == null) { this.routerNetwork = TransitRouterNetwork.createFromSchedule(transitSchedule, this.config.getBeelineWalkConnectionDistance()); } if (this.preparedTransitSchedule == null) { this.preparedTransitSchedule = new PreparedTransitSchedule(transitSchedule); } TransitRouterNetworkTravelTimeAndDisutility ttCalculator = new TransitRouterNetworkTravelTimeAndDisutility(this.config, this.preparedTransitSchedule); return new TransitRouterImpl(this.config, this.preparedTransitSchedule, this.routerNetwork, ttCalculator, ttCalculator); }
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); }
public TransitRouterImpl(final TransitRouterConfig trConfig, final TransitSchedule schedule) { super(trConfig); this.transitNetwork = TransitRouterNetwork.createFromSchedule(schedule, trConfig.getBeelineWalkConnectionDistance()); this.preparedTransitSchedule = new PreparedTransitSchedule(schedule); TransitRouterNetworkTravelTimeAndDisutility transitRouterNetworkTravelTimeAndDisutility = new TransitRouterNetworkTravelTimeAndDisutility( trConfig, new PreparedTransitSchedule(schedule)); this.travelDisutility = transitRouterNetworkTravelTimeAndDisutility; this.travelTime = transitRouterNetworkTravelTimeAndDisutility; setTransitTravelDisutility(this.travelDisutility); this.cacheTree = trConfig.isCacheTree(); }
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); }
TransitRouterNetwork transitNetwork = TransitRouterNetwork.createFromSchedule(scenario.getTransitSchedule(), trConfig.getBeelineWalkConnectionDistance());
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); }
/** * 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); }
for (TransitRouterNetworkLink link : routerNet.getLinks().values()) { if ((link.getLine() == null) && (link.fromNode.stop.getStopFacility().getName().equals("C")) &&
for (TransitRouterNetworkLink link : routerNet.getLinks().values()) { if ((link.getLine() == null) && (link.fromNode.stop.getStopFacility().getName().equals("C")) &&
for (TransitRouterNetworkLink link : routerNet.getLinks().values()) { if ((link.getLine() == f.blueLine) && (link.fromNode.stop.getStopFacility().getName().equals("C")) &&
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"))) {