public void setLine(TransitLine line) { this.line = line; this.vehicleIds = new TreeSet<>(); for (TransitRoute route : this.line.getRoutes().values()) { for (Departure departure : route.getDepartures().values()) { this.vehicleIds.add(departure.getVehicleId()); } } this.nVehicles = this.vehicleIds.size(); }
private static void printStatistic(TransitSchedule transitSchedule){ int nStops = 0; int nLines = 0; int nRoutes = 0; int nDepartures = 0; nStops = transitSchedule.getFacilities().values().size(); for (TransitLine transitLine : transitSchedule.getTransitLines().values()) { nLines++; for (TransitRoute transitRoute : transitLine.getRoutes().values()) { nRoutes++; nDepartures += transitRoute.getDepartures().size(); } } log.info("Transit schedule stats: " + nStops + " stops, " + nLines + " lines, " + nRoutes + " routes, " + nDepartures + " departures."); }
public final double scoreRouteDesign(PPlan pPlan) { double routeDesignScore = 0.0; if (pPlan.getLine().getRoutes().size() != 1) { log.error("Found a PPlan which has either no TransitRoute or multiple" + "TransitRoutes instead of exactly one TransitRoute. " + "This does not seem to make sense. Aborting!"); /* * A PPlan without a TransitRoute does not seem to make sense. A PPlan with * multiple TransitRoutes does not seem to make sense either as a PPlan * specifies stopsToBeServed, operation time start and end and the number of * vehicles, so it is not clear how one TransitRoute could differ from other * TransitRoutes of the same plan. */ new RuntimeException(); } TransitRoute route = pPlan.getLine().getRoutes().values().iterator().next(); for (RouteDesignScoringFunction scoringFunction : scoringFunctions) { routeDesignScore += scoringFunction.getScore(pPlan, route); } return routeDesignScore; }
private void createUmlaufStuecke() { this.umlaufStuecke = new ArrayList<>(); log.info("Generating UmlaufStuecke"); int cnt = 0; for (TransitLine line : transitLines) { for (TransitRoute route : line.getRoutes().values()) { Gbl.assertNotNull(route.getRoute()); // will fail much later if this is null. kai, may'17 for (Departure departure : route.getDepartures().values()) { UmlaufStueck umlaufStueck = new UmlaufStueck(line, route, departure); umlaufStuecke.add(umlaufStueck); cnt++; printStatus(cnt); } } } Collections.sort(this.umlaufStuecke, departureTimeComparator); }
public VehicleOccupancyCalculator(final TransitSchedule transitSchedule, final Vehicles vehicles, final int timeSlot, final int totalTime) { this.timeSlot = timeSlot; for(TransitLine line:transitSchedule.getTransitLines().values()) for(TransitRoute route:line.getRoutes().values()) { Map<Id<TransitStopFacility>, VehicleOccupancyData> routeMap = new HashMap<Id<TransitStopFacility>, VehicleOccupancyData>(100); vehicleOccupancy.put(new Tuple<Id<TransitLine>, Id<TransitRoute>>(line.getId(), route.getId()), routeMap); for(int s=0; s<route.getStops().size()-1; s++) { routeMap.put(route.getStops().get(s).getStopFacility().getId(), new VehicleOccupancyDataArray((int) (totalTime/timeSlot)+1)); } } this.vehicles = vehicles; }
void updateCurrentTransitLine(){ this.currentTransitLine = this.routeProvider.createEmptyLineFromOperator(id); for (PPlan plan : this.getAllPlans()) { for (TransitRoute route : plan.getLine().getRoutes().values()) { this.currentTransitLine.addRoute(route); } } }
private void writeTransitLine(final TransitLine line) throws UncheckedIOException { List<Tuple<String, String>> attributes = new ArrayList<Tuple<String, String>>(1); attributes.add(this.createTuple(Constants.ID, line.getId().toString())); if (line.getName() != null) { attributes.add(this.createTuple(Constants.NAME, line.getName())); } this.writeStartTag(Constants.TRANSIT_LINE, attributes); for (TransitRoute route : line.getRoutes().values()) { writeTransitRoute(route); } this.writeEndTag(Constants.TRANSIT_LINE); }
for (TransitRoute transitRoute : oldLine.getRoutes().values()) { String routeHash = getHashForRoute(transitRoute);
private void writeTransitLine(final TransitLine line) throws IOException, UncheckedIOException { List<Tuple<String, String>> attributes = new ArrayList<>(1); attributes.add(createTuple(Constants.ID, line.getId().toString())); if (line.getName() != null) { attributes.add(createTuple(Constants.NAME, line.getName())); } this.writeStartTag(Constants.TRANSIT_LINE, attributes); if (!AttributesUtils.isEmpty(line.getAttributes())) { this.writer.write(NL); this.attributesWriter.writeAttributes("\t\t", this.writer, line.getAttributes()); } for (TransitRoute route : line.getRoutes().values()) { writeTransitRoute(route); } this.writeEndTag(Constants.TRANSIT_LINE); }
@Override public void notifyAfterMobsim(final AfterMobsimEvent event) { int it = event.getIteration(); // Get all stations of all analyzed lines and invoke the method write to get all information of them Set<Id<TransitStopFacility>> stopIds = new HashSet<>(); for ( String pseudoLineId : this.cadytsConfig.getCalibratedItems()) { Id<TransitLine> lineId = Id.create(pseudoLineId, TransitLine.class); TransitLine line = scenario.getTransitSchedule().getTransitLines().get(lineId); for (TransitRoute route : line.getRoutes().values()) { for (TransitRouteStop stop : route.getStops()) { stopIds.add(stop.getStopFacility().getId()); } } } String outFile = controlerIO.getIterationFilename(it, OCCUPANCYANALYSIS_FILENAME); this.cadytsPtOccupAnalyzer.writeResultsForSelectedStopIds(outFile, this.occupCounts, stopIds); }
public void testAddRoute() { TransitLine tLine = createTransitLine(Id.create("0891", TransitLine.class)); TransitRoute route1 = new TransitRouteImpl(Id.create("1", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); TransitRoute route2 = new TransitRouteImpl(Id.create("2", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); assertEquals(0, tLine.getRoutes().size()); tLine.addRoute(route1); assertEquals(1, tLine.getRoutes().size()); assertNotNull(tLine.getRoutes().get(route1.getId())); tLine.addRoute(route2); assertEquals(2, tLine.getRoutes().size()); assertNotNull(tLine.getRoutes().get(route1.getId())); assertNotNull(tLine.getRoutes().get(route2.getId())); }
@Override public Trip findTrip(Leg prevLeg, double earliestDepartureTime_s) { ExperimentalTransitRoute route = (ExperimentalTransitRoute) prevLeg.getRoute(); TransitLine line = this.transitLines.get(route.getLineId()); TransitRoute transitRoute = line.getRoutes().get(route.getRouteId()); final double accessTime_s = earliestDepartureTime_s + this.waitTimes.getRouteStopWaitTime(route.getLineId(), transitRoute.getId(), route.getAccessStopId(), earliestDepartureTime_s); final double egressTime_s = accessTime_s + this.findTransitTravelTime(route, accessTime_s); return new Trip(null, accessTime_s, egressTime_s); }
public void run() { VehiclesFactory vb = this.vehicles.getFactory(); VehicleType vehicleType = vb.createVehicleType(Id.create("defaultTransitVehicleType", VehicleType.class)); VehicleCapacity capacity = new VehicleCapacityImpl(); capacity.setSeats(Integer.valueOf(101)); capacity.setStandingRoom(Integer.valueOf(0)); vehicleType.setCapacity(capacity); this.vehicles.addVehicleType(vehicleType); long vehId = 0; for (TransitLine line : this.schedule.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { for (Departure departure : route.getDepartures().values()) { Vehicle veh = vb.createVehicle(Id.create("tr_" + Long.toString(vehId++), Vehicle.class), vehicleType); this.vehicles.addVehicle(veh); departure.setVehicleId(veh.getId()); } } } } }
public void testGetRoutesImmutable() { TransitLine tLine = createTransitLine(Id.create("1980", TransitLine.class)); TransitRoute route1 = new TransitRouteImpl(Id.create("11", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); try { tLine.getRoutes().put(route1.getId(), route1); fail("missing exception"); } catch (UnsupportedOperationException e) { log.info("catched expected exception.", e); } }
public static ValidationResult validateUsedStopsHaveLinkId(final TransitSchedule schedule) { ValidationResult result = new ValidationResult(); for (TransitLine line : schedule.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { for (TransitRouteStop stop : route.getStops()) { Id<Link> linkId = stop.getStopFacility().getLinkId(); if (linkId == null) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR,"Transit Stop Facility " + stop.getStopFacility().getId() + " has no linkId, but is used by transit line " + line.getId() + ", route " + route.getId(), ValidationResult.Type.HAS_NO_LINK_REF, Collections.singleton(stop.getStopFacility().getId()))); } } } } return result; }
public void testRemoveRoute() { TransitLine tLine = createTransitLine(Id.create("1980", TransitLine.class)); TransitRoute route1 = new TransitRouteImpl(Id.create("11", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); TransitRoute route2 = new TransitRouteImpl(Id.create("5", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); assertEquals(0, tLine.getRoutes().size()); tLine.addRoute(route1); tLine.addRoute(route2); assertEquals(2, tLine.getRoutes().size()); assertNotNull(tLine.getRoutes().get(route1.getId())); assertNotNull(tLine.getRoutes().get(route2.getId())); assertTrue(tLine.removeRoute(route1)); assertEquals(1, tLine.getRoutes().size()); assertNull(tLine.getRoutes().get(route1.getId())); assertNotNull(tLine.getRoutes().get(route2.getId())); assertTrue(tLine.removeRoute(route2)); assertEquals(0, tLine.getRoutes().size()); tLine.addRoute(route1); assertEquals(1, tLine.getRoutes().size()); assertFalse(tLine.removeRoute(route2)); assertEquals(1, tLine.getRoutes().size()); assertNotNull(tLine.getRoutes().get(route1.getId())); }
public static ValidationResult validateAllStopsExist(final TransitSchedule schedule) { ValidationResult result = new ValidationResult(); for (TransitLine line : schedule.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { for (TransitRouteStop stop : route.getStops()) { if (stop.getStopFacility() == null) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + " contains a stop (dep-offset=" + stop.getDepartureOffset() + ") without stop-facility. Most likely, a wrong id was specified in the file.", ValidationResult.Type.HAS_MISSING_STOP_FACILITY, Collections.singletonList(route.getId()))); } else if (schedule.getFacilities().get(stop.getStopFacility().getId()) == null) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + " contains a stop (stop-facility " + stop.getStopFacility().getId() + ") that is not contained in the list of all stop facilities.", ValidationResult.Type.HAS_MISSING_STOP_FACILITY, Collections.singletonList(route.getId()))); } } } } return result; }
@Override public ArrayList<Umlauf> build() { int id = 0; ArrayList<Umlauf> umlaeufe = new ArrayList<Umlauf>(); for (TransitLine line : transitLines) { for (TransitRoute route : line.getRoutes().values()) { Gbl.assertNotNull(route.getRoute()); // will fail much later if this is null. kai, may'17 for (Departure departure : route.getDepartures().values()) { UmlaufStueck umlaufStueck = new UmlaufStueck(line, route, departure); Umlauf umlauf = new UmlaufImpl(Id.create(id++, Umlauf.class)); umlauf.getUmlaufStuecke().add(umlaufStueck); umlaeufe.add(umlauf); } } } return umlaeufe; }
@Override public void score(Map<Id<Vehicle>, PScoreContainer> pScores, SubsidyI subsidy, RouteDesignScoringManager routeDesignScoringManager) { this.setScoreLastIteration(this.getScore()); this.setScore(0); // score all plans for (PPlan plan : this.getAllPlans()) { scorePlan(pScores, plan, routeDesignScoringManager); if (subsidy != null) { Id<PPlan> pplanId = Id.create(plan.getLine().getId().toString() + "-" + plan.getId().toString(), PPlan.class); double subsidyAmount = subsidy.getSubsidy(pplanId); double newPlanScore = subsidyAmount + plan.getScore(); plan.setScore(newPlanScore); } this.setScore(this.getScore() + plan.getScore()); for (TransitRoute route : plan.getLine().getRoutes().values()) { route.setDescription(plan.toString(this.budget + this.getScore())); } } processScore(); }
@Test public void testPtTutorialWithError() { Scenario scenario = ScenarioUtils.loadScenario(ConfigUtils.loadConfig("test/scenarios/pt-tutorial/0.config.xml")); TransitLine transitLine = scenario.getTransitSchedule().getTransitLines().get(Id.create("Blue Line", TransitLine.class)); transitLine.getRoutes().get(Id.create("3to1", TransitRoute.class)).getRoute().setLinkIds(Id.createLinkId("33"), Collections.<Id<Link>>emptyList(), Id.createLinkId("11")); TransitScheduleValidator.ValidationResult validationResult = TransitScheduleValidator.validateAll(scenario.getTransitSchedule(), scenario.getNetwork()); Assert.assertThat(validationResult.getIssues(), containsInAnyOrder(Matchers.allOf( hasProperty("severity", Matchers.equalTo(TransitScheduleValidator.ValidationResult.Severity.ERROR)), hasProperty("entities", containsInAnyOrder(Matchers.equalTo(Id.create("2b", TransitStopFacility.class))))))); }