@Override public void notifyAfterMobsim(AfterMobsimEvent event) { // change signal green split every INTERVAL iteration if (event.getIteration() % INTERVAL == 0 && event.getIteration() != scenario.getConfig().controler().getFirstIteration()){ computeDelays(event); LOG.info("+++ Iteration " + event.getIteration() + ". Update signal green split..."); updateSignals(); } }
/** * Notifies all ControlerAfterMobsimListeners * */ public void fireControlerAfterMobsimEvent(final int iteration) { AfterMobsimEvent event = new AfterMobsimEvent(this.controler, iteration); AfterMobsimListener[] listener = this.coreListenerList.getListeners(AfterMobsimListener.class); for (AfterMobsimListener aListener : listener) { log.info("calling notifyAfterMobsim on " + aListener.getClass().getName()); aListener.notifyAfterMobsim(event); } listener = this.listenerList.getListeners(AfterMobsimListener.class); for (AfterMobsimListener aListener : listener) { log.info("calling notifyAfterMobsim on " + aListener.getClass().getName()); aListener.notifyAfterMobsim(event); } log.info("[it." + iteration + "] all ControlerAfterMobsimListeners called."); }
private void computeDelays(AfterMobsimEvent event) { TravelTime travelTime = event.getServices().getLinkTravelTimes(); int timeBinSize = scenario.getConfig().travelTimeCalculator().getTraveltimeBinSize(); for (Link link : scenario.getNetwork().getLinks().values()){ double freespeedTT = link.getLength() / link.getFreespeed(); int timeBinCounter = 0; double summedDelay = 0.0; for (int endTime = timeBinSize ; endTime <= scenario.getConfig().travelTimeCalculator().getMaxTime(); endTime = endTime + timeBinSize ) { double avgDelay = travelTime.getLinkTravelTime(link, (endTime - timeBinSize/2.), null, null) - freespeedTT; summedDelay += avgDelay; timeBinCounter++; } link2avgDelay.put(link.getId(), summedDelay/timeBinCounter); LOG.info("Link id: " + link.getId() + ", avg delay: " + summedDelay/timeBinCounter); } }
private void computeDelays(AfterMobsimEvent event) { TravelTime travelTime = event.getServices().getLinkTravelTimes(); int timeBinSize = this.congestionInfo.getScenario().getConfig().travelTimeCalculator().getTraveltimeBinSize();
@Override public void notifyAfterMobsim(AfterMobsimEvent event) { legTimes.writeStats(controlerIO.getIterationFilename(event.getIteration(), "tripdurations.txt")); // - print averages in log log.info("[" + event.getIteration() + "] average trip (probably: leg) duration is: " + (int) legTimes.getAverageTripDuration() + " seconds = " + Time.writeTime(legTimes.getAverageTripDuration(), Time.TIMEFORMAT_HHMMSS)); // trips are from "true" activity to "true" activity. legs may also go // from/to ptInteraction activity. This, in my opinion "legs" is the correct (matsim) term // kai, jul'11 }
for (ControlerListener controlerListener : controlerListenersDeclaredByModules) { if (controlerListener instanceof AfterMobsimListener) { ((AfterMobsimListener) controlerListener).notifyAfterMobsim(new AfterMobsimEvent(null, iterationNumber));
@Override public void notifyAfterMobsim(AfterMobsimEvent event) { int it = event.getIteration(); if ( isActiveInThisIteration( it ) ) { eventsManager.removeHandler(occupancyAnalyzer); occupancyAnalyzer.write(controlerIO.getIterationFilename(it, "occupancyAnalysis.txt")); } }
@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); }
@Override public void notifyAfterMobsim(AfterMobsimEvent event) { if (event.getIteration() % this.congestionInfo.getDecongestionConfigGroup().getWriteOutputIteration() == 0. || event.getIteration() % this.congestionInfo.getDecongestionConfigGroup().getUpdatePriceInterval() == 0.) { computeDelays(event); } if (event.getIteration() == this.congestionInfo.getScenario().getConfig().controler().getFirstIteration()) { // skip first iteration } else if (event.getIteration() % this.congestionInfo.getDecongestionConfigGroup().getUpdatePriceInterval() == 0.) { int totalNumberOfIterations = this.congestionInfo.getScenario().getConfig().controler().getLastIteration() - this.congestionInfo.getScenario().getConfig().controler().getFirstIteration(); int iterationCounter = event.getIteration() - this.congestionInfo.getScenario().getConfig().controler().getFirstIteration(); if (iterationCounter < this.congestionInfo.getDecongestionConfigGroup().getFractionOfIterationsToEndPriceAdjustment() * totalNumberOfIterations && iterationCounter > this.congestionInfo.getDecongestionConfigGroup().getFractionOfIterationsToStartPriceAdjustment() * totalNumberOfIterations) { if (tollComputation != null) { log.info("+++ Iteration " + event.getIteration() + ". Update tolls per link and time bin."); tollComputation.updateTolls(); } } } if (event.getIteration() % this.congestionInfo.getDecongestionConfigGroup().getWriteOutputIteration() == 0.) { CongestionInfoWriter.writeDelays(congestionInfo, event.getIteration(), this.outputDirectory + "ITERS/it." + event.getIteration() + "/", this.congestionInfo.getScenario().getConfig().controler().getRunId()); CongestionInfoWriter.writeTolls(congestionInfo, event.getIteration(), this.outputDirectory + "ITERS/it." + event.getIteration() + "/", this.congestionInfo.getScenario().getConfig().controler().getRunId()); } }
@Override public void notifyAfterMobsim(AfterMobsimEvent event) { if (innovationEndsAtIter > 0 && event.getIteration() > innovationEndsAtIter) return; if (event.getIteration() == innovationEndsAtIter) { startSlaveHandlersInMode(CommunicationsMode.DIE); return; waitForSlaveThreads(); boolean isLoadBalanceIteration = event.getIteration() > config.controler().getFirstIteration() && (event.getIteration() % loadBalanceInterval == 0 || slavesHaveRequestedShutdown() || hydra.hydraSlaves.size() > 0);
String outputFile = controlerIO.getIterationFilename(event.getIteration(), EXECUTEDPLANSFILE); writeExecutedPlans( outputFile ) ;