private void cleanSchedule() { for (TransitLine line : this.schedule.getTransitLines().values()) { Set<TransitRoute> toRemove = new HashSet<>(); for (TransitRoute transitRoute : line.getRoutes().values()) { boolean removeRoute = false; NetworkRoute networkRoute = transitRoute.getRoute(); if (networkRoute.getStartLinkId() == null || networkRoute.getEndLinkId() == null) { removeRoute = true; } for (Id<Link> linkId : transitRoute.getRoute().getLinkIds()) { if (linkId == null) { removeRoute = true; } } if (removeRoute) { log.error( "NetworkRoute for " + transitRoute.getId().toString() + " incomplete. Remove route."); toRemove.add(transitRoute); } } if (!toRemove.isEmpty()) { for (TransitRoute transitRoute : toRemove) { line.removeRoute(transitRoute); } } } }
public static TransitSchedule removeRoutesWithoutDepartures(TransitSchedule transitSchedule) { log.info("Removing all routes without any departure"); TransitSchedule tS = TransitScheduleCleaner.makeTransitScheduleModifiable(transitSchedule); printStatistic(tS); StringBuffer sB = new StringBuffer(); int nOfRouteRemoved = 0; for (TransitLine line : tS.getTransitLines().values()) { List<TransitRoute> routesToRemove = new LinkedList<TransitRoute>(); for (TransitRoute route : line.getRoutes().values()) { if (route.getDepartures().size() == 0) { routesToRemove.add(route); } } for (TransitRoute transitRoute : routesToRemove) { line.removeRoute(transitRoute); sB.append(line.getId() + "-" + transitRoute.getId()); sB.append(", "); nOfRouteRemoved++; } } printStatistic(tS); log.info("Removed " + nOfRouteRemoved + " routes from transitSchedule: " + sB.toString()); return tS; }
/** * @param schedule * @return */ public static TransitSchedule removeRoutesWithOnlyOneRouteStop(TransitSchedule schedule) { log.info("Removing transitRoutes with only one stop..."); TransitSchedule tS = TransitScheduleCleaner.makeTransitScheduleModifiable(schedule); Set<Id> routeIds; for (TransitLine line : tS.getTransitLines().values()) { routeIds = new HashSet<Id>(); for (TransitRoute route : line.getRoutes().values()) { // a transitRoute with only one stop makes no sense if (route.getStops().size() < 2) { routeIds.add(route.getId()); } } // remove identified routes for (Id id : routeIds) { line.removeRoute(line.getRoutes().get(id)); } // log only if something has been done if (routeIds.size() > 0) { log.info( "Following TransitRoutes are removed from TransitLine: " + line.getId() + ". " + routeIds.toString()); } } return tS; }
public TransitLine createSingleTransitLine(Id<Vehicle> driverId) { // initialize TransitLine line = this.tS.getFactory().createTransitLine(Id.create(driverId, TransitLine.class)); TransitStopFacility startStop = getRandomTransitStop(); TransitStopFacility endStop = getRandomTransitStop(); TransitRoute transitRoute_H = createRoute(Id.create(driverId + "_H", TransitRoute.class), startStop, endStop); TransitRoute transitRoute_R = createRoute(Id.create(driverId + "_R", TransitRoute.class), endStop, startStop); // register route line.addRoute(transitRoute_H); line.addRoute(transitRoute_R); // add departures int n = 0; for (double j = 0.0; j < 24 * 3600; ) { Departure departure = this.tS.getFactory().createDeparture(Id.create(n, Departure.class), j); departure.setVehicleId(driverId); transitRoute_H.addDeparture(departure); j += transitRoute_H.getStop(endStop).getDepartureOffset() + 5 * 60; n++; departure = this.tS.getFactory().createDeparture(Id.create(n, Departure.class), j); departure.setVehicleId(driverId); transitRoute_R.addDeparture(departure); j += transitRoute_R.getStop(startStop).getDepartureOffset() + 5 * 60; n++; } return line; }
/** * By applying a routing algorithm (e.g. shortest path or OSM-extraction) route from station to * station for each pt-line. * * <p>Writes the resulting schedule into this.schedule. */ protected void createPTRoutes() { log.info("Creating pt routes..."); Counter counter = new Counter("route # "); this.router = new PTLRFastAStarLandmarksSimpleRouting(this.network); for (TransitLine line : this.schedule.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { counter.incCounter(); assignRoute(route); } } counter.printCounter(); log.info(" Add artificial links and nodes..."); for (ArtificiallyConnectedStopFacility newFacility : artificiallyConnectedStopFacilities.values()) { this.network.addNode(newFacility.myNode); } for (ArtificiallyConnectedStopFacility newFacility : artificiallyConnectedStopFacilities.values()) { this.network.addLink(newFacility.myLink); for (Link newLink : newFacility.getLinks()) { this.network.addLink(newLink); } } for (Link newLink : artificiallyAddedLinks.values()) { this.network.addLink(newLink); } log.info(" Add artificial links and nodes... done."); log.info("Creating pt routes... done."); }
public WaitTimeStuckCalculator( final Population population, final TransitSchedule transitSchedule, final int timeSlot, final int totalTime) { this.population = population; this.timeSlot = timeSlot; for (TransitLine line : transitSchedule.getTransitLines().values()) for (TransitRoute route : line.getRoutes().values()) { double[] sortedDepartures = new double[route.getDepartures().size()]; int d = 0; for (Departure departure : route.getDepartures().values()) sortedDepartures[d++] = departure.getDepartureTime(); Arrays.sort(sortedDepartures); Map<Id<TransitStopFacility>, WaitTimeData> stopsMap = new HashMap<Id<TransitStopFacility>, WaitTimeData>(100); Map<Id<TransitStopFacility>, double[]> stopsScheduledMap = new HashMap<Id<TransitStopFacility>, double[]>(100); for (TransitRouteStop stop : route.getStops()) { stopsMap.put( stop.getStopFacility().getId(), new WaitTimeDataArray(totalTime / timeSlot + 1)); double[] cacheWaitTimes = new double[totalTime / timeSlot + 1]; for (int i = 0; i < cacheWaitTimes.length; i++) { double endTime = timeSlot * (i + 1); if (endTime > 24 * 3600) endTime -= 24 * 3600; cacheWaitTimes[i] = Time.UNDEFINED_TIME; SORTED_DEPARTURES: for (double departure : sortedDepartures) { double arrivalTime = departure + (stop.getArrivalOffset() != Time.UNDEFINED_TIME ? stop.getArrivalOffset() : stop.getDepartureOffset()); if (arrivalTime >= endTime) { cacheWaitTimes[i] = arrivalTime - endTime; break SORTED_DEPARTURES; } } if (cacheWaitTimes[i] == Time.UNDEFINED_TIME) cacheWaitTimes[i] = sortedDepartures[0] + 24 * 3600 + (stop.getArrivalOffset() != Time.UNDEFINED_TIME ? stop.getArrivalOffset() : stop.getDepartureOffset()) - endTime; } stopsScheduledMap.put(stop.getStopFacility().getId(), cacheWaitTimes); } Tuple<Id<TransitLine>, Id<TransitRoute>> key = new Tuple<Id<TransitLine>, Id<TransitRoute>>(line.getId(), route.getId()); waitTimes.put(key, stopsMap); scheduledWaitTimes.put(key, stopsScheduledMap); } }
public static TransitSchedule removeAllRoutesWithMissingLinksFromSchedule( TransitSchedule transitSchedule, Network network) { log.info("Removing stops and routes with missing links from the schedule"); TransitSchedule tS = TransitScheduleCleaner.makeTransitScheduleModifiable(transitSchedule); printStatistic(tS); int removedRoutes = 0; // Remove routes with missing links for (TransitLine transitLine : tS.getTransitLines().values()) { Set<TransitRoute> transitRouteToBeRemoved = new HashSet<TransitRoute>(); for (TransitRoute transitRoute : transitLine.getRoutes().values()) { // Remove Route, when links are missing in the network if (network.getLinks().get(transitRoute.getRoute().getStartLinkId()) == null) { transitRouteToBeRemoved.add(transitRoute); continue; } for (Id linkId : transitRoute.getRoute().getLinkIds()) { if (network.getLinks().get(linkId) == null) { transitRouteToBeRemoved.add(transitRoute); break; } } if (network.getLinks().get(transitRoute.getRoute().getEndLinkId()) == null) { transitRouteToBeRemoved.add(transitRoute); continue; } // Remove route, if one of its stops, has a missing link for (TransitRouteStop transitRouteStop : transitRoute.getStops()) { if (network.getLinks().get(transitRouteStop.getStopFacility().getLinkId()) == null) { transitRouteToBeRemoved.add(transitRoute); break; } } } for (TransitRoute transitRoute : transitRouteToBeRemoved) { if (transitLine.removeRoute(transitRoute) == true) { removedRoutes++; } } } log.info("Removed " + removedRoutes + " routes due to missing links or stops"); printStatistic(tS); return tS; }
private static Population getPopulationTypesTransitLine(Scenario scenario, String[] args) { scenario.getConfig().transit().setUseTransit(true); (new TransitScheduleReader(scenario)).readFile(args[4]); TransitLine line = scenario.getTransitSchedule().getTransitLines().get(Id.create(args[5], TransitLine.class)); MutableScenario sc = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); Population population = PopulationUtils.createPopulation(sc.getConfig(), sc.getNetwork()); for (Person person : scenario.getPopulation().getPersons().values()) if (isRelatedWithLine(person, line)) population.addPerson(new PersonImplPops(person, Id.create(line.getId(), Population.class))); else population.addPerson(new PersonImplPops(person, PersonImplPops.DEFAULT_POP_ID)); return population; }
/** * Adding TransportMode.pt flags to all links referred by transit schedule * * @param transitSchedule The transit schedule. * @param network The network to be tagged. * @return */ public static Network tagTransitLinksInNetwork(TransitSchedule transitSchedule, Network network) { log.info("Tagging pt network links"); if (transitSchedule == null) { log.info("No transit schedule given. Returning unmodified network..."); return network; } for (TransitStopFacility stopFacitlity : transitSchedule.getFacilities().values()) { Set<String> allowedModes = new TreeSet<String>(network.getLinks().get(stopFacitlity.getLinkId()).getAllowedModes()); allowedModes.add(TransportMode.pt); network.getLinks().get(stopFacitlity.getLinkId()).setAllowedModes(allowedModes); } for (TransitLine transitLine : transitSchedule.getTransitLines().values()) { for (TransitRoute transitRoute : transitLine.getRoutes().values()) { NetworkRoute route = transitRoute.getRoute(); Set<String> allowedModes; allowedModes = new TreeSet<String>(network.getLinks().get(route.getStartLinkId()).getAllowedModes()); allowedModes.add(TransportMode.pt); network.getLinks().get(route.getStartLinkId()).setAllowedModes(allowedModes); for (Id linkId : route.getLinkIds()) { allowedModes = new TreeSet<String>(network.getLinks().get(linkId).getAllowedModes()); allowedModes.add(TransportMode.pt); network.getLinks().get(linkId).setAllowedModes(allowedModes); } allowedModes = new TreeSet<String>(network.getLinks().get(route.getEndLinkId()).getAllowedModes()); allowedModes.add(TransportMode.pt); network.getLinks().get(route.getEndLinkId()).setAllowedModes(allowedModes); } } int taggedLinks = 0; for (Link link : network.getLinks().values()) { if (link.getAllowedModes().contains(TransportMode.pt)) { taggedLinks++; } } log.info("Finished - " + taggedLinks + " links were tagged"); return network; }
private final void createVehicleLinkSpeedAttributes() { for (TransitLine transitLine : scenario.getTransitSchedule().getTransitLines().values()) { for (TransitRoute transitRoute : transitLine.getRoutes().values()) { Set<Id> vehIds = new HashSet<Id>(); for (Departure departure : transitRoute.getDepartures().values()) { vehIds.add(departure.getVehicleId()); } Iterator<TransitRouteStop> iterator = transitRoute.getStops().iterator(); double departure = iterator.next().getDepartureOffset(); while (iterator.hasNext()) { TransitRouteStop routeStop = iterator.next(); double arrival = routeStop.getArrivalOffset(); Link link = scenario.getNetwork().getLinks().get(routeStop.getStopFacility().getLinkId()); double speed = link.getLength() / (arrival - departure); if (speed >= 200.0) { System.out.println( "line=" + transitLine.getId() + ";route=" + transitRoute.getId() + "stop=" + routeStop.getStopFacility().getId() + ": lLenth=" + link.getLength() + ";arr=" + arrival + ";dep=" + departure + ""); } for (Id vehId : vehIds) { this.vehicleAttributes.putAttribute(vehId.toString(), link.getId().toString(), speed); } departure = routeStop.getDepartureOffset(); } } } }
@Override public boolean getEnterTransitRoute( final TransitLine line, final TransitRoute transitRoute, final List<TransitRouteStop> stopsToCome, TransitVehicle transitVehicle) { ExperimentalTransitRoute route = (ExperimentalTransitRoute) getCurrentLeg().getRoute(); if (line.getId().equals(route.getLineId())) { return containsId(stopsToCome, route.getEgressStopId()); } else { return false; } }
private void writeVehicles(String vehiclesOutFile) { VehiclesFactory vehFactory = this.veh.getFactory(); VehicleType vehType = vehFactory.createVehicleType(Id.create("defaultTransitVehicleType", VehicleType.class)); VehicleCapacity capacity = new VehicleCapacityImpl(); capacity.setSeats(Integer.valueOf(8)); capacity.setStandingRoom(Integer.valueOf(0)); vehType.setCapacity(capacity); this.veh.addVehicleType(vehType); for (TransitLine line : this.tS.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { for (Departure departure : route.getDepartures().values()) { Vehicle vehicle = vehFactory.createVehicle(departure.getVehicleId(), vehType); this.veh.addVehicle(vehicle); } } } VehicleWriterV1 writer = new VehicleWriterV1(this.veh); writer.writeFile(vehiclesOutFile); }
private void removeNonUsedStopFacilities() { // Collect all used stop facilities: Set<Id<TransitStopFacility>> usedStopFacilities = new HashSet<>(); for (TransitLine line : this.schedule.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { for (TransitRouteStop stop : route.getStops()) { usedStopFacilities.add(stop.getStopFacility().getId()); } } } // Check all stop facilities if not used: Set<TransitStopFacility> unusedStopFacilites = new HashSet<>(); for (Id<TransitStopFacility> facilityId : this.schedule.getFacilities().keySet()) { if (!usedStopFacilities.contains(facilityId)) { unusedStopFacilites.add(this.schedule.getFacilities().get(facilityId)); } } // Remove all stop facilities not used: for (TransitStopFacility facility : unusedStopFacilites) { this.schedule.removeStopFacility(facility); } }
/** * Add to any link that is passed by any route a "pt" in the modes, if it hasn't already one... */ private void prepareNetwork() { Map<Id<Link>, ? extends Link> networkLinks = network.getLinks(); Set<Id<Link>> transitLinks = new HashSet<>(); for (TransitLine line : this.schedule.getTransitLines().values()) { for (TransitRoute transitRoute : line.getRoutes().values()) { NetworkRoute networkRoute = transitRoute.getRoute(); transitLinks.add(networkRoute.getStartLinkId()); for (Id<Link> linkId : transitRoute.getRoute().getLinkIds()) { transitLinks.add(linkId); } transitLinks.add(networkRoute.getEndLinkId()); } } for (Id<Link> transitLinkId : transitLinks) { Link transitLink = networkLinks.get(transitLinkId); if (!transitLink.getAllowedModes().contains(TransportMode.pt)) { Set<String> modes = new HashSet<>(); modes.addAll(transitLink.getAllowedModes()); modes.add(TransportMode.pt); transitLink.setAllowedModes(modes); } } }
public static TransitSchedule removeStopsNotUsed(TransitSchedule transitSchedule) { log.info("Removing stops not used"); TransitSchedule tS = TransitScheduleCleaner.makeTransitScheduleModifiable(transitSchedule); printStatistic(tS); Set<Id> stopsInUse = new TreeSet<Id>(); Set<Id> stopsToBeRemoved = new TreeSet<Id>(); for (TransitLine transitLine : tS.getTransitLines().values()) { for (TransitRoute transitRoute : transitLine.getRoutes().values()) { for (TransitRouteStop stop : transitRoute.getStops()) { stopsInUse.add(stop.getStopFacility().getId()); } } } for (TransitStopFacility transitStopFacility : tS.getFacilities().values()) { if (!stopsInUse.contains(transitStopFacility.getId())) { stopsToBeRemoved.add(transitStopFacility.getId()); } } StringBuffer sB = new StringBuffer(); for (Id transitStopFacilityId : stopsToBeRemoved) { tS.getFacilities().remove(transitStopFacilityId); sB.append(transitStopFacilityId.toString() + ", "); } printStatistic(tS); log.info( "Removed " + stopsToBeRemoved.size() + " stops from transitSchedule: " + sB.toString()); return tS; }
private static boolean isRelatedWithLine(Person person, TransitLine line) { ExperimentalTransitRouteFactory factory = new ExperimentalTransitRouteFactory(); for (Plan plan : person.getPlans()) for (PlanElement planElement : plan.getPlanElements()) if (planElement instanceof Leg && ((Leg) planElement).getRoute() instanceof Route) { Route origRoute = ((Leg) planElement).getRoute(); ExperimentalTransitRoute route = (ExperimentalTransitRoute) factory.createRoute(origRoute.getStartLinkId(), origRoute.getEndLinkId()); route.setStartLinkId(origRoute.getStartLinkId()); route.setEndLinkId(origRoute.getEndLinkId()); route.setRouteDescription(origRoute.getRouteDescription()); for (TransitRoute transitRoute : line.getRoutes().values()) for (TransitRouteStop stop : transitRoute.getStops()) if (stop.getStopFacility().getId().equals(route.getAccessStopId()) || stop.getStopFacility().getId().equals(route.getEgressStopId())) return true; } return false; }
private final void convertSchedules( OTTDataContainer dataContainer, ObjectAttributes trainTypes, boolean isPerformance) { TransitScheduleFactory scheduleFactory = scenario.getTransitSchedule().getFactory(); VehiclesFactory vehiclesFactory = ((ScenarioImpl) scenario).getVehicles().getFactory(); VehicleType vehicleType = vehiclesFactory.createVehicleType(new IdImpl(WagonSimConstants.DEFAULT_VEHICLE_TYPE)); VehicleCapacity vehicleCapacity = vehiclesFactory.createVehicleCapacity(); // we do not use this capacity. Therefore it should infinite, otherwise this capacity may exceed // before ``our'' capacities are exceeded // dr, oct'13 vehicleCapacity.setSeats(999999); vehicleCapacity.setStandingRoom(999999); // we defined the vehicle-enter/leave-time is implicit included in transfer-times which // are defined in the transitrouterconfig (for handling see // WagonSimTripRouterFactoryImpl#WagonSimRouterWrapper) // dr, oct'13 vehicleType.setAccessTime(0); vehicleType.setEgressTime(0); vehicleType.setCapacity(vehicleCapacity); ((ScenarioImpl) scenario).getVehicles().addVehicleType(vehicleType); Date startDate = extractStartDate(dataContainer, isPerformance); System.out.println("startDate=" + startDate.toString()); for (Locomotive locomotive : dataContainer.locomotives.values()) { Departure departure = null; List<TransitRouteStop> transitRouteStops = new ArrayList<TransitRouteStop>(); for (StationData stationData : locomotive.trips.values()) { TransitStopFacility stopFacility = scenario.getTransitSchedule().getFacilities().get(stationData.stationId); if (stopFacility == null) { throw new RuntimeException( "locomotive id=" + locomotive.id + ": station id=" + stationData.stationId + " not found. Bailing out."); } double arrivalDelay = Double.NaN; double departureDelay = Double.NaN; if (departure == null) { double lineDepartureOffset = (stationData.departure.getTime() - startDate.getTime()) / 1000.0; if (!isPerformance) { lineDepartureOffset -= stationData.delayDeparture; } departure = scheduleFactory.createDeparture(locomotive.id, lineDepartureOffset); arrivalDelay = 0.0; } else { arrivalDelay = (stationData.arrival.getTime() - startDate.getTime()) / 1000.0 - departure.getDepartureTime(); if (!isPerformance) { arrivalDelay -= stationData.delayArrival; } } departureDelay = (stationData.departure.getTime() - startDate.getTime()) / 1000.0 - departure.getDepartureTime(); if (!isPerformance) { departureDelay -= stationData.delayDeparture; } if (departureDelay < arrivalDelay) { throw new RuntimeException( "locomotive id=" + locomotive.id + ": arrival=" + stationData.arrival.toString() + " does not fit with departure=" + stationData.departure.toString() + ". (" + departureDelay + "<" + arrivalDelay + ") Bailing out."); } TransitRouteStop stop = scheduleFactory.createTransitRouteStop(stopFacility, arrivalDelay, departureDelay); stop.setAwaitDepartureTime(true); transitRouteStops.add(stop); } if (transitRouteStops.size() > 1) { // check if train type is given if (trainTypes.getAttribute(locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_SPEED) == null) { throw new RuntimeException( "locomotive id=" + locomotive.id + ": type=" + locomotive.type + " is not defined by the train type table. Bailing out."); } TransitLine line = scheduleFactory.createTransitLine(locomotive.id); scenario.getTransitSchedule().addTransitLine(line); TransitRoute route = scheduleFactory.createTransitRoute( line.getId(), null, transitRouteStops, TransportMode.pt); line.addRoute(route); Vehicle vehicle = vehiclesFactory.createVehicle(route.getId(), vehicleType); ((ScenarioImpl) scenario).getVehicles().addVehicle(vehicle); departure.setVehicleId(vehicle.getId()); route.addDeparture(departure); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_TYPE, locomotive.type); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_SPEED, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_SPEED)); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_WEIGHT, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_WEIGHT)); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_LENGTH, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_LENGTH)); // the next day vehicle = vehiclesFactory.createVehicle(new IdImpl(route.getId() + ".1"), vehicleType); ((ScenarioImpl) scenario).getVehicles().addVehicle(vehicle); departure = scheduleFactory.createDeparture( vehicle.getId(), departure.getDepartureTime() + 24 * 3600); departure.setVehicleId(vehicle.getId()); route.addDeparture(departure); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_TYPE, locomotive.type); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_SPEED, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_SPEED)); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_WEIGHT, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_WEIGHT)); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_LENGTH, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_LENGTH)); // the day after the next day vehicle = vehiclesFactory.createVehicle(new IdImpl(route.getId() + ".2"), vehicleType); ((ScenarioImpl) scenario).getVehicles().addVehicle(vehicle); departure = scheduleFactory.createDeparture( vehicle.getId(), departure.getDepartureTime() + 24 * 3600); departure.setVehicleId(vehicle.getId()); route.addDeparture(departure); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_TYPE, locomotive.type); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_SPEED, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_SPEED)); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_WEIGHT, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_WEIGHT)); this.vehicleAttributes.putAttribute( vehicle.getId().toString(), WagonSimConstants.TRAIN_MAX_LENGTH, (Double) trainTypes.getAttribute( locomotive.type.toString(), WagonSimConstants.TRAIN_MAX_LENGTH)); } else if (transitRouteStops.size() == 1) { System.out.println( "locomotive id=" + locomotive.id + ": only one station given. Therefore, no transitLine created."); } else { System.out.println( "locomotive id=" + locomotive.id + ": no station is given. Therefore, no transitLine created."); } } }
public void testTransitRouteCopy() { Config config = super.loadConfig(null); config.scenario().setUseTransit(true); config.scenario().setUseVehicles(true); ScenarioImpl scenario = (ScenarioImpl) ScenarioUtils.createScenario(config); Id<Node> nodeId1 = Id.create("1", Node.class); Id<Node> nodeId2 = Id.create("2", Node.class); Id<Node> nodeId3 = Id.create("3", Node.class); Id<Link> linkId1 = Id.create("1", Link.class); Id<Link> linkId2 = Id.create("2", Link.class); // build network Network network = scenario.getNetwork(); NetworkFactory nBuilder = network.getFactory(); Node node1 = nBuilder.createNode(nodeId1, scenario.createCoord(0, 0)); Node node2 = nBuilder.createNode(nodeId2, scenario.createCoord(1000, 0)); Node node3 = nBuilder.createNode(nodeId3, scenario.createCoord(2000, 0)); network.addNode(node1); network.addNode(node2); network.addNode(node3); Link link1 = nBuilder.createLink(linkId1, node1, node2); Link link2 = nBuilder.createLink(linkId2, node2, node3); network.addLink(link1); network.addLink(link2); // build schedule TransitSchedule schedule = scenario.getTransitSchedule(); TransitScheduleFactory sBuilder = schedule.getFactory(); TransitStopFacility stopF1 = sBuilder.createTransitStopFacility( Id.create("1", TransitStopFacility.class), scenario.createCoord(1000.0, 0), false); TransitStopFacility stopF2 = sBuilder.createTransitStopFacility( Id.create("2", TransitStopFacility.class), scenario.createCoord(2000.0, 0), false); stopF1.setLinkId(link1.getId()); stopF2.setLinkId(link2.getId()); schedule.addStopFacility(stopF1); schedule.addStopFacility(stopF2); TransitLine tLine1 = sBuilder.createTransitLine(Id.create("1", TransitLine.class)); TransitRouteStop stop1 = sBuilder.createTransitRouteStop(stopF1, 0, 0); TransitRouteStop stop2 = sBuilder.createTransitRouteStop(stopF2, 100, 100); ArrayList<TransitRouteStop> stops = new ArrayList<TransitRouteStop>(); stops.add(stop1); stops.add(stop2); NetworkRoute netRoute = new LinkNetworkRouteImpl(link1.getId(), link2.getId()); netRoute.setLinkIds(link1.getId(), Collections.<Id<Link>>emptyList(), link2.getId()); TransitRoute tRoute1 = sBuilder.createTransitRoute(Id.create("1", TransitRoute.class), netRoute, stops, "bus"); tRoute1.addDeparture(sBuilder.createDeparture(Id.create("1", Departure.class), 7.0 * 3600)); tLine1.addRoute(tRoute1); schedule.addTransitLine(tLine1); // build vehicles new CreateVehiclesForSchedule(schedule, scenario.getVehicles()).run(); // build population Population population = scenario.getPopulation(); PopulationFactory pBuilder = population.getFactory(); Person person1 = pBuilder.createPerson(Id.create("1", Person.class)); Plan plan = pBuilder.createPlan(); Activity homeAct = pBuilder.createActivityFromLinkId("h", linkId1); homeAct.setEndTime(7.0 * 3600); plan.addActivity(homeAct); Leg leg = pBuilder.createLeg(TransportMode.pt); ExperimentalTransitRoute tRoute = new ExperimentalTransitRoute(stopF1, tLine1, tRoute1, stopF2); leg.setRoute(tRoute); plan.addLeg(leg); plan.addActivity(pBuilder.createActivityFromLinkId("w", linkId2)); person1.addPlan(plan); population.addPerson(person1); // prepare config config.controler().setFirstIteration(0); config.controler().setLastIteration(1); ActivityParams params = new ActivityParams("h"); params.setTypicalDuration(16.0 * 3600); config.planCalcScore().addActivityParams(params); params = new ActivityParams("w"); params.setTypicalDuration(8.0 * 3600); config.planCalcScore().addActivityParams(params); StrategySettings tam = new StrategySettings(Id.create(1, StrategySettings.class)); tam.setStrategyName("TimeAllocationMutator"); tam.setWeight(1.0); config.strategy().addStrategySettings(tam); // run Controler controler = new Controler(scenario); controler.getConfig().controler().setWriteEventsInterval(0); controler.setCreateGraphs(false); controler.run(); // checks assertEquals(1, population.getPersons().size()); assertEquals(2, person1.getPlans().size()); assertEquals( ExperimentalTransitRoute.class, ((Leg) person1.getPlans().get(0).getPlanElements().get(1)).getRoute().getClass()); assertEquals( ExperimentalTransitRoute.class, ((Leg) person1.getPlans().get(1).getPlanElements().get(1)).getRoute().getClass()); }