private void createScenario() { this.initIds(); Config config = ConfigUtils.createConfig(); config.qsim().setUseLanes(true); ConfigUtils.addOrGetModule( config, SignalSystemsConfigGroup.GROUPNAME, SignalSystemsConfigGroup.class) .setUseSignalSystems(true); Scenario scenario = ScenarioUtils.loadScenario(config); // network Network net = this.createNetwork(scenario); this.writeMatsimNetwork(net, networkOutfile); log.info("network written to " + networkOutfile); // lanes createLanes((MutableScenario) scenario); LaneDefinitionsWriter20 laneWriter = new LaneDefinitionsWriter20(scenario.getLanes()); laneWriter.write(lanesOutfile); log.info("lanes written to " + lanesOutfile); // signals SignalsData signalsData = (SignalsData) scenario.getScenarioElement(SignalsData.ELEMENT_NAME); createSignalSystemsAndGroups(signalsData); createSignalControl(signalsData); SignalsScenarioWriter signalsWriter = new SignalsScenarioWriter(); signalsWriter.setSignalSystemsOutputFilename(signalSystemsOutfile); signalsWriter.setSignalGroupsOutputFilename(signalGroupsOutfile); signalsWriter.setSignalControlOutputFilename(signalControlOutfileBC); signalsWriter.writeSignalsData(signalsData); }
/** @param args */ public static void main(String[] args) { Config config = ConfigUtils.createConfig(); config.controler().setLastIteration(0); config.controler().setOverwriteFileSetting(OverwriteFileSetting.deleteDirectoryIfExists); Collection<String> sf = new ArrayList<>(); sf.add("otfvis"); config.controler().setSnapshotFormat(sf); config.controler().setWriteSnapshotsInterval(1); config.qsim().setStartTime(0); config.qsim().setSimStarttimeInterpretation(StarttimeInterpretation.onlyUseStarttime); config.qsim().setEndTime(10. * 3600.); config.qsim().setSimEndtimeInterpretation(EndtimeInterpretation.onlyUseEndtime); config.qsim().setNumberOfThreads(1); config.qsim().setSnapshotPeriod(1); OTFVisConfigGroup otfconf = ConfigUtils.addOrGetModule(config, OTFVisConfigGroup.GROUP_NAME, OTFVisConfigGroup.class); otfconf.setColoringScheme(ColoringScheme.byId); Scenario scenario = ScenarioUtils.createScenario(config); Network net = scenario.getNetwork(); NetworkFactory nf = net.getFactory(); Node node1 = nf.createNode(Id.createNodeId(1), new Coord(0., 0.)); net.addNode(node1); Node node2 = nf.createNode(Id.createNodeId(2), new Coord(LEN * 7.5, 0.)); net.addNode(node2); Node node3 = nf.createNode(Id.createNodeId(3), new Coord(0., -LEN * 7.5)); net.addNode(node3); Node node4 = nf.createNode(Id.createNodeId(4), new Coord(0., LEN * 7.5)); net.addNode(node4); Link link = nf.createLink(Id.createLinkId("1-2"), node1, node2); link.setLength(LEN * 7.5); net.addLink(link); // Link link2 = nf.createLink(Id.createLinkId("1-3"), node1, node3) ; // link.setLength( LEN*7.5 ); // net.addLink( link2 ) ; Controler controler = new Controler(scenario); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bind(QNetworkFactory.class).to(MyQNetworkFactory.class); } }); controler.addOverridingModule(new OTFVisLiveModule()); controler.addOverridingModule(new OTFVisFileWriterModule()); controler.run(); }
@Inject public Cache(final Scenario scenario) { this( scenario.getNetwork(), ConfigUtils.addOrGetModule( scenario.getConfig(), LazyScheduleBasedMatrixConfigGroup.GROUP_NAME, LazyScheduleBasedMatrixConfigGroup.class)); }
public void runJDEQSim(Scenario scenario) { EventsManagerImpl events = new EventsManagerImpl(); events.addHandler(new PersonEventCollector()); events.initProcessing(); new JDEQSimulation( ConfigUtils.addOrGetModule( scenario.getConfig(), JDEQSimConfigGroup.NAME, JDEQSimConfigGroup.class), scenario, events) .run(); events.finishProcessing(); }
@Inject public LazyScheduleBasedMatrixRoutingModule( final Cache cache, final Scenario scenario, final TransitRouter router, @Named(TransportMode.transit_walk) final RoutingModule walkRouter) { this( cache, ConfigUtils.addOrGetModule( scenario.getConfig(), LazyScheduleBasedMatrixConfigGroup.GROUP_NAME, LazyScheduleBasedMatrixConfigGroup.class), scenario, router, walkRouter); }
public static void run(Scenario scenario) { Config config = scenario.getConfig(); log.info("setting up multi modal simulation"); MultiModalConfigGroup multiModalConfigGroup = ConfigUtils.addOrGetModule( config, MultiModalConfigGroup.GROUP_NAME, MultiModalConfigGroup.class); // set Route Factories // LinkNetworkRouteFactory factory = new LinkNetworkRouteFactory(); // for (String mode : // CollectionUtils.stringToArray(multiModalConfigGroup.getSimulatedModes())) { // ((PopulationFactoryImpl) scenario.getPopulation().getFactory()).setRouteFactory(mode, // factory); // } if (multiModalConfigGroup.isCreateMultiModalNetwork()) { log.info("Creating multi modal network."); new MultiModalNetworkCreator(multiModalConfigGroup).run(scenario.getNetwork()); } if (multiModalConfigGroup.isEnsureActivityReachability()) { log.info( "Relocating activities that cannot be reached by the transport modes of their from- and/or to-legs..."); EnsureActivityReachability ensureActivityReachability = new EnsureActivityReachability(scenario); ensureActivityReachability.run(scenario.getPopulation()); ensureActivityReachability.printRelocateCount(); } if (multiModalConfigGroup.isDropNonCarRoutes()) { log.info( "Dropping existing routes of modes which are simulated with the multi modal mobsim."); new NonCarRouteDropper(multiModalConfigGroup).run(scenario.getPopulation()); } }
public static <T> AnalyticalCalibrator<T> buildCalibrator( final Config config, final Counts<T> occupCounts, LookUpItemFromId<T> lookUp, Class<T> idType) { CadytsConfigGroup cadytsConfig = ConfigUtils.addOrGetModule(config, CadytsConfigGroup.GROUP_NAME, CadytsConfigGroup.class); // get timeBinSize_s and validate it int timeBinSize_s = cadytsConfig.getTimeBinSize(); if (timeBinSize_s != 86400) { throw new RuntimeException("Time bin size has to be 86400!"); } if (occupCounts.getCounts().size() == 0) { log.warn("Counts container is empty."); } AnalyticalCalibrator<T> matsimCalibrator = new AnalyticalCalibrator<T>( config.controler().getOutputDirectory() + "/cadyts.log", MatsimRandom.getLocalInstance().nextLong(), timeBinSize_s); matsimCalibrator.setRegressionInertia(cadytsConfig.getRegressionInertia()); matsimCalibrator.setMinStddev(cadytsConfig.getMinFlowStddev_vehPerHour(), TYPE.FLOW_VEH_H); matsimCalibrator.setMinStddev(cadytsConfig.getMinFlowStddev_vehPerHour(), TYPE.COUNT_VEH); matsimCalibrator.setFreezeIteration(cadytsConfig.getFreezeIteration()); matsimCalibrator.setPreparatoryIterations(cadytsConfig.getPreparatoryIterations()); matsimCalibrator.setVarianceScale(cadytsConfig.getVarianceScale()); matsimCalibrator.setBruteForce(cadytsConfig.useBruteForce()); // I don't think this has an influence on any of the variants we are using. (Has an influence // only when plan choice is left // completely to cadyts, rather than just taking the score offsets.) kai, dec'13 // More formally, one would need to use the selectPlan() method of AnalyticalCalibrator which we // are, however, not using. kai, mar'14 if (matsimCalibrator.getBruteForce()) { log.warn( "setting bruteForce==true for calibrator, but this won't do anything in the way the cadyts matsim integration is set up. kai, mar'14"); } matsimCalibrator.setStatisticsFile( config.controler().getOutputDirectory() + "/calibration-stats.txt"); int linkCnt = 0; int odCount = 0; double odWeightFactor = Double.parseDouble( config.getParam(GsvConfigGroup.GSV_CONFIG_MODULE_NAME, "odWeightFactor")); for (Map.Entry<Id<T>, Count<T>> entry : occupCounts.getCounts().entrySet()) { // (loop over all counting "items" (usually locations/stations) T item = lookUp.getItem(Id.create(entry.getKey(), idType)); Count count = entry.getValue(); double value = 0; for (int i = 1; i < 25; i++) { value += count.getVolume(i).getValue(); } if (entry.getKey().toString().startsWith(ODCalibrator.VIRTUAL_ID_PREFIX)) { final double stddev = max( matsimCalibrator.getMinStddev(SingleLinkMeasurement.TYPE.COUNT_VEH), sqrt(matsimCalibrator.getVarianceScale() * value)); matsimCalibrator.addMeasurement( item, 0, 86400, value, stddev / odWeightFactor, SingleLinkMeasurement.TYPE.COUNT_VEH); odCount++; } else { matsimCalibrator.addMeasurement( item, 0, 86400, value, SingleLinkMeasurement.TYPE.COUNT_VEH); linkCnt++; } } log.info(String.format("Added %s link measurements to calibrator.", linkCnt)); log.info(String.format("Added %s OD measurements to calibrator.", odCount)); if (matsimCalibrator.getProportionalAssignment()) { throw new RuntimeException( "Gunnar says that this may not work so do not set to true. kai, sep'14"); } return matsimCalibrator; }
/** Saving UrbanSim and MATSim results for current run in a backup directory ... */ private static void saveRunOutputs(ScenarioImpl scenario) { log.info("Saving UrbanSim and MATSim outputs ..."); M4UControlerConfigModuleV3 m4ucModule = M4UConfigUtils.getMATSim4UrbaSimControlerConfigAndPossiblyConvert(scenario.getConfig()); UrbanSimParameterConfigModuleV3 uspModule = M4UConfigUtils.getUrbanSimParameterConfigAndPossiblyConvert(scenario.getConfig()); AccessibilityConfigGroup acm = ConfigUtils.addOrGetModule( scenario.getConfig(), AccessibilityConfigGroup.GROUP_NAME, AccessibilityConfigGroup.class); int currentYear = uspModule.getYear(); String saveDirectory = "run" + currentYear; String savePath = Paths.checkPathEnding(uspModule.getMATSim4OpusBackup() + saveDirectory); // copy all files from matsim4opus/tmp to matsim4opus/backup // FileCopy.copyTree(InternalConstants.MATSIM_4_OPUS_TEMP, savePath); File saveDir = new File(savePath); if (!saveDir.exists()) if (!saveDir.mkdirs()) log.error("Creating the backup directory " + savePath + " failed!"); // backup files from matsim output try { // backup plans files FileCopy.fileCopy( new File(uspModule.getMATSim4OpusOutput() + InternalConstants.GENERATED_PLANS_FILE_NAME), new File(savePath + InternalConstants.GENERATED_PLANS_FILE_NAME)); // backup matsim config file FileCopy.fileCopy( new File(uspModule.getMATSim4OpusOutput() + OUTPUT_CONFIG_FILE_NAME), new File(savePath + OUTPUT_CONFIG_FILE_NAME)); // backup score stats FileCopy.fileCopy( new File(uspModule.getMATSim4OpusOutput() + OUTPUT_SCORESTATS_TXT), new File(savePath + OUTPUT_SCORESTATS_TXT)); FileCopy.fileCopy( new File(uspModule.getMATSim4OpusOutput() + OUTPUT_SCORESTATS_PNG), new File(savePath + OUTPUT_SCORESTATS_PNG)); FileCopy.fileCopy( new File(uspModule.getMATSim4OpusOutput() + OUTPUT_TRAVELDISTANCESTATS_TXT), new File(savePath + OUTPUT_TRAVELDISTANCESTATS_TXT)); FileCopy.fileCopy( new File(uspModule.getMATSim4OpusOutput() + OUTPUT_TRAVELDISTANCESTATS_PNG), new File(savePath + OUTPUT_TRAVELDISTANCESTATS_PNG)); FileCopy.fileCopy( new File(uspModule.getMATSim4OpusOutput() + OUTPUT_STOPWATCH), new File(savePath + OUTPUT_STOPWATCH)); // backup last iteration int iteration = ((ControlerConfigGroup) scenario.getConfig().getModule(ControlerConfigGroup.GROUP_NAME)) .getLastIteration(); FileCopy.copyTree( uspModule.getMATSim4OpusOutput() + "ITERS/it." + iteration, savePath + "ITERS/it." + iteration); // backup zone csv file (feedback for UrbanSim) if (new File(uspModule.getMATSim4OpusTemp() + UrbanSimZoneCSVWriterV2.FILE_NAME).exists()) FileCopy.fileCopy( new File(uspModule.getMATSim4OpusTemp() + UrbanSimZoneCSVWriterV2.FILE_NAME), new File(savePath + UrbanSimZoneCSVWriterV2.FILE_NAME)); // backup parcel csv file (feedback for UrbanSim) if (new File(uspModule.getMATSim4OpusTemp() + UrbanSimParcelCSVWriter.FILE_NAME).exists()) FileCopy.fileCopy( new File(uspModule.getMATSim4OpusTemp() + UrbanSimParcelCSVWriter.FILE_NAME), new File(savePath + UrbanSimParcelCSVWriter.FILE_NAME)); // backup person csv file (feedback for UrbanSim) if (new File(uspModule.getMATSim4OpusTemp() + UrbanSimPersonCSVWriter.FILE_NAME).exists()) FileCopy.fileCopy( new File(uspModule.getMATSim4OpusTemp() + UrbanSimPersonCSVWriter.FILE_NAME), new File(savePath + UrbanSimPersonCSVWriter.FILE_NAME)); // backup travel_data csv file (feedback for UrbanSim) if (new File(uspModule.getMATSim4OpusTemp() + Zone2ZoneImpedancesControlerListener.FILE_NAME) .exists()) FileCopy.fileCopy( new File( uspModule.getMATSim4OpusTemp() + Zone2ZoneImpedancesControlerListener.FILE_NAME), new File(savePath + Zone2ZoneImpedancesControlerListener.FILE_NAME)); // backup plotting files free speed String fileName = Labels.FREESPEED_FILENAME + (double) acm.getCellSizeCellBasedAccessibility() + InternalConstants.FILE_TYPE_TXT; if (new File(uspModule.getMATSim4OpusTemp() + fileName).exists()) FileCopy.fileCopy( new File(uspModule.getMATSim4OpusTemp() + fileName), new File(savePath + fileName)); // backup plotting files for car fileName = Labels.CAR_FILENAME + (double) acm.getCellSizeCellBasedAccessibility() + InternalConstants.FILE_TYPE_TXT; if (new File(uspModule.getMATSim4OpusTemp() + fileName).exists()) FileCopy.fileCopy( new File(uspModule.getMATSim4OpusTemp() + fileName), new File(savePath + fileName)); // backup plotting files for bike fileName = Labels.BIKE_FILENAME + (double) acm.getCellSizeCellBasedAccessibility() + InternalConstants.FILE_TYPE_TXT; if (new File(uspModule.getMATSim4OpusTemp() + fileName).exists()) FileCopy.fileCopy( new File(uspModule.getMATSim4OpusTemp() + fileName), new File(savePath + fileName)); // backup plotting files for walk fileName = Labels.WALK_FILENAME + (double) acm.getCellSizeCellBasedAccessibility() + InternalConstants.FILE_TYPE_TXT; if (new File(uspModule.getMATSim4OpusTemp() + fileName).exists()) FileCopy.fileCopy( new File(uspModule.getMATSim4OpusTemp() + fileName), new File(savePath + fileName)); } catch (Exception e) { e.printStackTrace(); } log.info("Saving UrbanSim and MATSim outputs done!"); }