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);
  }
Exemplo n.º 2
0
  /** @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));
 }
Exemplo n.º 4
0
 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());
    }
  }
Exemplo n.º 7
0
  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!");
  }