/*package*/ boolean useVolumesOfIteration(final int iteration, final int firstIteration) { int iterationMod = iteration % this.config.getWriteCountsInterval(); int effectiveIteration = iteration - firstIteration; int averaging = Math.min(this.config.getAverageCountsOverIterations(), this.config.getWriteCountsInterval()); if (iterationMod == 0) { return ((this.config.getAverageCountsOverIterations() <= 1) || (effectiveIteration >= averaging)); } return (iterationMod > (this.config.getWriteCountsInterval() - this.config.getAverageCountsOverIterations()) && (effectiveIteration + (this.config.getWriteCountsInterval() - iterationMod) >= averaging)); }
@Inject CadytsContext(Config config, Scenario scenario, @Named("calibration") Counts<Link> calibrationCounts, EventsManager eventsManager, VolumesAnalyzer volumesAnalyzer, OutputDirectoryHierarchy controlerIO) { this.scenario = scenario; this.calibrationCounts = calibrationCounts; this.eventsManager = eventsManager; this.volumesAnalyzer = volumesAnalyzer; this.controlerIO = controlerIO; this.countsScaleFactor = config.counts().getCountsScaleFactor(); CadytsConfigGroup cadytsConfig = ConfigUtils.addOrGetModule(config, CadytsConfigGroup.GROUP_NAME, CadytsConfigGroup.class); // addModule() also initializes the config group with the values read from the config file cadytsConfig.setWriteAnalysisFile(true); Set<String> countedLinks = new TreeSet<>(); for (Id<Link> id : this.calibrationCounts.getCounts().keySet()) { countedLinks.add(id.toString()); } cadytsConfig.setCalibratedItems(countedLinks); this.writeAnalysisFile = cadytsConfig.isWriteAnalysisFile(); }
@Inject CountsControlerListener(GlobalConfigGroup globalConfigGroup, Network network, ControlerConfigGroup controlerConfigGroup, CountsConfigGroup countsConfigGroup, VolumesAnalyzer volumesAnalyzer, IterationStopWatch iterationStopwatch, OutputDirectoryHierarchy controlerIO) { this.globalConfigGroup = globalConfigGroup; this.network = network; this.controlerConfigGroup = controlerConfigGroup; this.config = countsConfigGroup; this.volumesAnalyzer = volumesAnalyzer; this.analyzedModes = CollectionUtils.stringToSet(this.config.getAnalyzedModes()); this.iterationStopwatch = iterationStopwatch; this.controlerIO = controlerIO; }
@Test public void testWriteCountsInterval() { CountsConfigGroup cg = new CountsConfigGroup(); // test initial value Assert.assertEquals(10, cg.getWriteCountsInterval()); Assert.assertEquals("10", cg.getValue("writeCountsInterval")); // test setting with setMobsim cg.setWriteCountsInterval(4); Assert.assertEquals(4, cg.getWriteCountsInterval()); Assert.assertEquals("4", cg.getValue("writeCountsInterval")); // test setting with addParam cg.addParam("writeCountsInterval", "2"); Assert.assertEquals(2, cg.getWriteCountsInterval()); Assert.assertEquals("2", cg.getValue("writeCountsInterval")); }
@Override public void notifyIterationEnds(final IterationEndsEvent event) { if (counts != null && this.config.getWriteCountsInterval() > 0) { if (useVolumesOfIteration(event.getIteration(), controlerConfigGroup.getFirstIteration())) { addVolumes(volumesAnalyzer); CountsComparisonAlgorithm cca = new CountsComparisonAlgorithm(averages, counts, network, config.getCountsScaleFactor()); if ((this.config.getDistanceFilter() != null) && (this.config.getDistanceFilterCenterNode() != null)) { cca.setDistanceFilter(this.config.getDistanceFilter(), this.config.getDistanceFilterCenterNode()); cca.setCountsScaleFactor(this.config.getCountsScaleFactor()); cca.run(); if (this.config.getOutputFormat().contains("html") || this.config.getOutputFormat().contains("all")) { CountsHtmlAndGraphsWriter cgw = new CountsHtmlAndGraphsWriter(controlerIO.getIterationPath(event.getIteration()), cca.getComparison(), event.getIteration()); cgw.addGraphsCreator(new CountsSimRealPerHourGraphCreator("sim and real volumes")); if (this.config.getOutputFormat().contains("kml") || this.config.getOutputFormat().contains("all")) { String filename = controlerIO.getIterationFilename(event.getIteration(), "countscompare.kmz"); CountSimComparisonKMLWriter kmlWriter = new CountSimComparisonKMLWriter( if (this.config.getOutputFormat().contains("txt") || this.config.getOutputFormat().contains("all")) { String filename = controlerIO.getIterationFilename(event.getIteration(), "countscompare.txt"); CountSimComparisonTableWriter ctw = new CountSimComparisonTableWriter(cca.getComparison(), Locale.ENGLISH); ctw.writeFile(filename); if (this.config.getOutputFormat().contains("xml") ||
@Test public void testWriteAverageOverIterations() { CountsConfigGroup cg = new CountsConfigGroup(); // test initial value Assert.assertEquals(5, cg.getAverageCountsOverIterations()); Assert.assertEquals("5", cg.getValue("averageCountsOverIterations")); // test setting with setMobsim cg.setAverageCountsOverIterations(4); Assert.assertEquals(4, cg.getAverageCountsOverIterations()); Assert.assertEquals("4", cg.getValue("averageCountsOverIterations")); // test setting with addParam cg.addParam("averageCountsOverIterations", "2"); Assert.assertEquals(2, cg.getAverageCountsOverIterations()); Assert.assertEquals("2", cg.getValue("averageCountsOverIterations")); }
cConfig.setWriteCountsInterval(3); cConfig.setAverageCountsOverIterations(2); cConfig.setOutputFormat("txt"); cConfig.setInputFile("counts.xml"); // just any file to activate the counts feature cConfig.setAnalyzedModes(TransportMode.car); cConfig.setFilterModes(true); createAndRunControler(config); Assert.assertEquals(100, getVolume(config.controler().getOutputDirectory() + "ITERS/it.3/3.countscompareAWTV.txt"), 1e-8); cConfig.setAnalyzedModes(TransportMode.walk); cConfig.setFilterModes(true); createAndRunControler(config); Assert.assertEquals(50, getVolume(config.controler().getOutputDirectory() + "ITERS/it.3/3.countscompareAWTV.txt"), 1e-8); cConfig.setAnalyzedModes(TransportMode.bike); cConfig.setFilterModes(true); createAndRunControler(config); Assert.assertEquals(0, getVolume(config.controler().getOutputDirectory() + "ITERS/it.3/3.countscompareAWTV.txt"), 1e-8);
CountsConfigGroup cConfig = config.counts(); cConfig.setWriteCountsInterval(3); cConfig.setAverageCountsOverIterations(1); cConfig.setOutputFormat("txt"); cConfig.setInputFile("counts.xml"); // just any file to activate the counts feature
Assert.assertEquals(10, config.counts().getWriteCountsInterval()); Assert.assertEquals(5, config.counts().getAverageCountsOverIterations()); config.counts().setWriteCountsInterval(8); config.counts().setAverageCountsOverIterations(2); Assert.assertFalse(ccl.useVolumesOfIteration(0, 0)); Assert.assertFalse(ccl.useVolumesOfIteration(1, 0)); config.counts().setWriteCountsInterval(5); config.counts().setAverageCountsOverIterations(1); Assert.assertTrue(ccl.useVolumesOfIteration(0, 0)); Assert.assertFalse(ccl.useVolumesOfIteration(1, 0)); config.counts().setWriteCountsInterval(5); config.counts().setAverageCountsOverIterations(0); Assert.assertTrue(ccl.useVolumesOfIteration(0, 0)); Assert.assertFalse(ccl.useVolumesOfIteration(1, 0)); config.counts().setWriteCountsInterval(5); config.counts().setAverageCountsOverIterations(5); Assert.assertFalse(ccl.useVolumesOfIteration(0, 0)); Assert.assertTrue(ccl.useVolumesOfIteration(1, 0)); config.counts().setWriteCountsInterval(5); config.counts().setAverageCountsOverIterations(6); Assert.assertFalse(ccl.useVolumesOfIteration(0, 0)); Assert.assertTrue(ccl.useVolumesOfIteration(1, 0)); config.counts().setWriteCountsInterval(5);
@Provides @Singleton Counts<Link> provideLinkCounts(Scenario scenario, CountsConfigGroup config) { Counts<Link> counts = (Counts<Link>) scenario.getScenarioElement(Counts.ELEMENT_NAME); if (counts != null) { return counts; } else { counts = new Counts<>(); if (config.getCountsFileName() != null) { final String inputCRS = config.getInputCRS(); final String internalCRS = scenario.getConfig().global().getCoordinateSystem(); MatsimCountsReader counts_parser; if (inputCRS == null) { counts_parser = new MatsimCountsReader(counts); } else { log.info( "re-projecting counts from "+inputCRS+" to "+internalCRS+" for import" ); final CoordinateTransformation transformation = TransformationFactory.getCoordinateTransformation( inputCRS, internalCRS ); counts_parser = new MatsimCountsReader( transformation , counts ); } counts_parser.parse(config.getCountsFileURL(scenario.getConfig().getContext())); } return counts; } }
@Test public void testGetParams_writeCountsInterval() { CountsConfigGroup cg = new CountsConfigGroup(); Assert.assertNotNull(cg.getParams().get("writeCountsInterval")); }
config.plans().setInputFile(getAbsolutePath(prefix, config.plans().getInputFile())); config.facilities().setInputFile(getAbsolutePath(prefix, config.facilities().getInputFile())); config.counts().setInputFile(getAbsolutePath(prefix, config.counts().getCountsFileName())); config.households().setInputFile(getAbsolutePath(prefix, config.households().getInputFile()));
private static boolean isActiveInThisIteration(final int iter, final Config config) { return (iter > 0 && iter % config.counts().getWriteCountsInterval() == 0); } }
config.counts().setInputFile( file ); config.counts().setInputCRS( TransformationFactory.CH1903_LV03_Plus_GT );
@Override public Counts<Link> get() { Counts<Link> calibrationCounts = new Counts<>(); new MatsimCountsReader(calibrationCounts).parse(config.getCountsFileURL(matsimConfig.getContext())); return calibrationCounts; } }
this.modules.put(QSimConfigGroup.GROUP_NAME, this.qSimConfigGroup); this.counts = new CountsConfigGroup(); this.modules.put(CountsConfigGroup.GROUP_NAME, this.counts);
public void setUp() { String configFile = "test/input/org/matsim/counts/config.xml"; Config config = ConfigUtils.loadConfig(configFile); MatsimRandom.reset(config.global().getRandomSeed()); this.scenario = ScenarioUtils.createScenario(config); MatsimCountsReader counts_parser = new MatsimCountsReader(this.counts); counts_parser.readFile(config.counts().getCountsFileName()); this.network = scenario.getNetwork(); new MatsimNetworkReader(scenario.getNetwork()).readFile(config.network().getInputFile()); }
cConfig.setWriteCountsInterval(3); cConfig.setAverageCountsOverIterations(2); cConfig.setOutputFormat("txt"); cConfig.setInputFile("counts.xml"); // just any file to activate the counts feature
@Test public void testGetParams_averageCountsOverIterations() { CountsConfigGroup cg = new CountsConfigGroup(); Assert.assertNotNull(cg.getParams().get("averageCountsOverIterations")); }
/*package*/ boolean createCountsInIteration(final int iteration) { return ((iteration % this.config.getWriteCountsInterval() == 0) && (this.iterationsUsed >= this.config.getAverageCountsOverIterations())); }