final void init() { if (getTransitRoute() != null) { this.stopIterator = getTransitRoute().getStops().listIterator(); this.nextStop = (stopIterator.hasNext() ? stopIterator.next() : null); } else { this.nextStop = null; } this.nextLinkIndex = 0; }
final Set<Id<TransitStopFacility>> getStopsUsed(Collection<TransitRoute> routes) { Set<Id<TransitStopFacility>> stopsUsed = new TreeSet<>(); for (TransitRoute route : routes) { for (TransitRouteStop stop : route.getStops()) { stopsUsed.add(stop.getStopFacility().getId()); } } return stopsUsed; }
/** * Create a simple hash unique for a certain sequence of stops. * * @param transitRoute * @return */ private static String getHashForRoute(TransitRoute transitRoute){ StringBuffer strB = null; for (TransitRouteStop transitStop : transitRoute.getStops()) { if (strB == null) { strB = new StringBuffer(); } else { strB.append("-"); } strB.append(transitStop.getStopFacility().getId().toString()); } return strB.toString(); }
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; }
@Deprecated /** * Always returns first occurence of the TransitStopFacility in the route. * * @param line * @param route * @param stopFacility * @param departure * @return */ public int getLoadAtDeparture(final TransitLine line, final TransitRoute route, final TransitStopFacility stopFacility, final Departure departure) { for (int i = 0; i < route.getStops().size(); i++) { if (route.getStops().get(i).getStopFacility().getId().equals(stopFacility.getId())) { return getLoadAtDeparture(line, route, i, departure); } } return -1; }
@Override public double handleTransitStop(final TransitStopFacility stop, final double now) { // yy can't make this final because of tests. kai, oct'12 assertExpectedStop(stop); processEventVehicleArrives(stop, now); TransitRoute route = this.getTransitRoute(); List<TransitRouteStop> stopsToCome = route.getStops().subList(stopIterator.nextIndex(), route.getStops().size()); /* * If there are passengers leaving or entering, the stop time must be not greater than 1.0 in order to let them (de-)board every second. * If a stopTime greater than 1.0 is used, this method is not necessarily triggered by the qsim, so (de-)boarding will not happen. Dg, 10-2012 */ double stopTime = this.accessEgress.calculateStopTimeAndTriggerBoarding(getTransitRoute(), getTransitLine(), this.vehicle, stop, stopsToCome, now); if(stopTime == 0.0){ stopTime = longerStopTimeIfWeAreAheadOfSchedule(now, stopTime); } if (stopTime == 0.0) { depart(now); } return stopTime; }
private double getDepartureOffsetFromRoute(TransitRoute transitRoute, Id<TransitStopFacility> accessStopId) { for (TransitRouteStop routeStop : transitRoute.getStops()) { if (accessStopId.equals(routeStop.getStopFacility().getId())) { return routeStop.getDepartureOffset(); } } log.error("Stop " + accessStopId + " not found in route " + transitRoute.getId()); // returning what??? return -1.0; }
private TransitLine createTransitLine(Id<TransitLine> lineId, double startTime, double endTime, int numberOfVehicles, ArrayList<TransitStopFacility> stopsToBeServed, Id<TransitRoute> routeId){ // initialize TransitLine line = this.scheduleWithStopsOnly.getFactory().createTransitLine(lineId); routeId = Id.create(lineId + "-" + routeId, TransitRoute.class); TransitRoute transitRoute = createRoute(routeId, stopsToBeServed); // register route line.addRoute(transitRoute); // add departures int n = 0; /* After finishing one tour, vehicles wait the driver rest time and then start the next tour immediately. * So, headway is a function of the number of vehicles and the time spent on one tour of the TransitRoute. */ int headway = (int) (transitRoute.getStops().get(transitRoute.getStops().size() - 1).getDepartureOffset() + this.driverRestTime) / numberOfVehicles; for (int i = 0; i < numberOfVehicles; i++) { for (double j = startTime + i * headway; j <= endTime; ) { Departure departure = this.scheduleWithStopsOnly.getFactory().createDeparture(Id.create(n, Departure.class), j); departure.setVehicleId(Id.create(transitRoute.getId().toString() + "-" + i, Vehicle.class)); transitRoute.addDeparture(departure); j += transitRoute.getStops().get(transitRoute.getStops().size() - 1).getDepartureOffset() + this.driverRestTime; n++; } } // log.info("added " + n + " departures"); return line; }
private double getArrivalOffsetFromRoute(TransitRoute transitRoute, Id<TransitStopFacility> egressStopId) { for (TransitRouteStop routeStop : transitRoute.getStops()) { if (egressStopId.equals(routeStop.getStopFacility().getId())) { return routeStop.getArrivalOffset(); } } log.error("Stop " + egressStopId + " not found in route " + transitRoute.getId()); // returning what??? return -1.0; }
private TransitLine createTransitLine(Id<TransitLine> pLineId, double startTime, double endTime, int numberOfVehicles, ArrayList<TransitStopFacility> stopsToBeServed, Id<TransitRoute> routeId){ // initialize TransitLine line = this.scheduleWithStopsOnly.getFactory().createTransitLine(pLineId); routeId = Id.create(pLineId + "-" + routeId, TransitRoute.class); TransitRoute transitRoute = createRoute(routeId, stopsToBeServed); // register route line.addRoute(transitRoute); // add departures int n = 0; /* After finishing one tour, vehicles wait the driver rest time and then start the next tour immediately. * So, headway is a function of the number of vehicles and the time spent on one tour of the TransitRoute. */ int headway = (int) (transitRoute.getStops().get(transitRoute.getStops().size() - 1).getDepartureOffset() + this.driverRestTime) / numberOfVehicles; for (int i = 0; i < numberOfVehicles; i++) { for (double j = startTime + i * headway; j <= endTime; ) { Departure departure = this.scheduleWithStopsOnly.getFactory().createDeparture(Id.create(n, Departure.class), j); departure.setVehicleId(Id.create(transitRoute.getId().toString() + "-" + i, Vehicle.class)); transitRoute.addDeparture(departure); j += transitRoute.getStops().get(transitRoute.getStops().size() - 1).getDepartureOffset() + this.driverRestTime; n++; } } // log.info("added " + n + " departures"); return line; }
public void createNetwork() { List<Tuple<TransitLine, TransitRoute>> toBeRemoved = new LinkedList<Tuple<TransitLine, TransitRoute>>(); for (TransitLine tLine : this.schedule.getTransitLines().values()) { for (TransitRoute tRoute : tLine.getRoutes().values()) { ArrayList<Id<Link>> routeLinks = new ArrayList<Id<Link>>(); TransitRouteStop prevStop = null; for (TransitRouteStop stop : tRoute.getStops()) { Link link = getNetworkLink(prevStop, stop); routeLinks.add(link.getId()); prevStop = stop; } if (routeLinks.size() > 0) { NetworkRoute route = RouteUtils.createNetworkRoute(routeLinks, this.network); tRoute.setRoute(route); } else { System.err.println("Line " + tLine.getId() + " route " + tRoute.getId() + " has less than two stops. Removing this route from schedule."); toBeRemoved.add(new Tuple<TransitLine, TransitRoute>(tLine, tRoute)); } } } for (Tuple<TransitLine, TransitRoute> remove : toBeRemoved) { remove.getFirst().removeRoute(remove.getSecond()); } }
@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 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; }
ArrayList<TransitRouteStop> stops = new ArrayList<TransitRouteStop>(route.getStops()); int stopCount = stops.size();
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; }
private void writeTransitRoute(final TransitRoute route) throws UncheckedIOException { List<Tuple<String, String>> attributes = new ArrayList<Tuple<String, String>>(1); attributes.add(this.createTuple(Constants.ID, route.getId().toString())); this.writeStartTag(Constants.TRANSIT_ROUTE, attributes); if (route.getDescription() != null) { this.writeStartTag(Constants.DESCRIPTION, null); this.writeContent(route.getDescription(), false); this.writeEndTag(Constants.DESCRIPTION); } this.writeStartTag(Constants.TRANSPORT_MODE, null); this.writeContent(route.getTransportMode(), false); this.writeEndTag(Constants.TRANSPORT_MODE); this.writeRouteProfile(route.getStops()); this.writeRoute(route.getRoute()); this.writeDepartures(route.getDepartures()); this.writeEndTag(Constants.TRANSIT_ROUTE); }
public void testInitialization() { Id<TransitRoute> id = Id.create(9791, TransitRoute.class); Link fromLink = new FakeLink(Id.create(10, Link.class), null, null); Link toLink = new FakeLink(Id.create(5, Link.class), null, null); NetworkRoute route = RouteUtils.createLinkNetworkRouteImpl(fromLink.getId(), toLink.getId()); List<TransitRouteStop> stops = new ArrayList<TransitRouteStop>(); TransitRouteStop stop = new TransitRouteStopImpl(null, 50, 60); stops.add(stop); TransitRoute tRoute = createTransitRoute(id, route, stops, "train"); assertEquals("wrong id.", id.toString(), tRoute.getId().toString()); assertEquals("wrong route.", route, tRoute.getRoute()); assertEquals(stops.size(), tRoute.getStops().size()); assertEquals(stop, tRoute.getStops().get(0)); assertEquals("train", tRoute.getTransportMode()); }
private void writeTransitRoute(final TransitRoute route) throws IOException, UncheckedIOException { List<Tuple<String, String>> attributes = new ArrayList<>(1); attributes.add(createTuple(Constants.ID, route.getId().toString())); this.writeStartTag(Constants.TRANSIT_ROUTE, attributes); if (!AttributesUtils.isEmpty(route.getAttributes())) { this.writer.write(NL); this.attributesWriter.writeAttributes("\t\t\t", this.writer, route.getAttributes()); } if (route.getDescription() != null) { this.writeStartTag(Constants.DESCRIPTION, null); this.writeContent(route.getDescription(), false); this.writeEndTag(Constants.DESCRIPTION); } this.writeStartTag(Constants.TRANSPORT_MODE, null); this.writeContent(route.getTransportMode(), false); this.writeEndTag(Constants.TRANSPORT_MODE); this.writeRouteProfile(route.getStops()); this.writeRoute(route.getRoute()); this.writeDepartures(route.getDepartures()); this.writeEndTag(Constants.TRANSIT_ROUTE); }
@Test public void testCreateTransitRoute() { TransitScheduleFactory builder = createTransitScheduleBuilder(); Id<TransitRoute> id = Id.create(2, TransitRoute.class); NetworkRoute route = RouteUtils.createLinkNetworkRouteImpl(Id.create(3, Link.class), Id.create(4, Link.class)); List<TransitRouteStop> stops = new ArrayList<TransitRouteStop>(); TransitRouteStop stop1 = new TransitRouteStopImpl(null, 50, 60); stops.add(stop1); String mode = TransportMode.pt; TransitRoute tRoute = builder.createTransitRoute(id, route, stops, mode); Assert.assertEquals(id, tRoute.getId()); Assert.assertEquals(route, tRoute.getRoute()); Assert.assertEquals(1, tRoute.getStops().size()); Assert.assertEquals(stop1, tRoute.getStops().get(0)); Assert.assertEquals(mode, tRoute.getTransportMode()); }