private void createConfig() {

    Config config = sc.getConfig();

    config.controler().setOutputDirectory(outputDir + "/output/" + congestionImpl);
    config.controler().setFirstIteration(0);
    config.controler().setLastIteration(20);
    config.controler().setWriteEventsInterval(10);
    config.controler().setMobsim("qsim");
    config.controler().setOverwriteFileSetting(OverwriteFileSetting.deleteDirectoryIfExists);

    config.qsim().setEndTime(9 * 3600.);

    StrategySettings reRoute = new StrategySettings(ConfigUtils.createAvailableStrategyId(config));
    reRoute.setStrategyName(DefaultPlanStrategiesModule.DefaultStrategy.ReRoute.name());
    reRoute.setWeight(0.10);
    config.strategy().addStrategySettings(reRoute);
    config.strategy().setFractionOfIterationsToDisableInnovation(0.7);

    StrategySettings changeExpBeta =
        new StrategySettings(ConfigUtils.createAvailableStrategyId(config));
    changeExpBeta.setStrategyName("ChangeExpBeta");
    changeExpBeta.setWeight(0.9);
    config.strategy().addStrategySettings(changeExpBeta);

    ActivityParams o1 = new ActivityParams("o1");
    ActivityParams o2 = new ActivityParams("o2");
    ActivityParams d1 = new ActivityParams("d1");
    ActivityParams d2 = new ActivityParams("d2");

    o1.setTypicalDuration(8 * 3600);
    o2.setTypicalDuration(8 * 3600);
    d1.setTypicalDuration(8 * 3600);
    d2.setTypicalDuration(8 * 3600);

    config.planCalcScore().addActivityParams(o1);
    config.planCalcScore().addActivityParams(o2);
    config.planCalcScore().addActivityParams(d1);
    config.planCalcScore().addActivityParams(d2);

    new ConfigWriter(config).write(outputDir + "/input/input_config.xml.gz");
  }
Example #2
0
  public static void main(String[] args) {

    // loading and modifying the config:
    Config config;
    if (args.length > 0) {
      config = ConfigUtils.loadConfig(args[0]);
    } else {
      throw new RuntimeException("needs argument config.xml");
    }

    // request FEATHERS2 as a PlanStrategy (it is added to the controler further below):
    StrategySettings stratSets =
        new StrategySettings(ConfigUtils.createAvailableStrategyId(config));
    stratSets.setStrategyName(FEATHERS2);
    stratSets.setWeight(0.1);
    config.strategy().addStrategySettings(stratSets);

    // loading the scenario:
    final Scenario scenario = ScenarioUtils.loadScenario(config);

    // loading and modifying the controler:
    final Controler ctrl = new Controler(scenario);

    // generate the FEATHERS adapter class:
    final FeathersModule feathers2 = new FeathersModule();

    // make it an events handler (so it can listen to events; a different solution may be desired
    // here)
    ctrl.getEvents().addHandler(feathers2);

    // add it as a PlanStrategy:
    final javax.inject.Provider<PlanStrategy> planStrategyFactory =
        new javax.inject.Provider<PlanStrategy>() {
          @Override
          public PlanStrategy get() {
            PlanSelector<Plan, Person> planSelector = new RandomPlanSelector<>();
            PlanStrategyImpl.Builder builder = new PlanStrategyImpl.Builder(planSelector);
            PlanStrategyModule module =
                new PlanStrategyModule() {
                  @Override
                  public void prepareReplanning(ReplanningContext replanningContext) {}

                  @Override
                  public void handlePlan(Plan plan) {
                    // the following should (test!!!) only retain the plan we are looking at:
                    Person person = scenario.getPopulation().getPersons().get(plan.getPerson());
                    List<Plan> planToKeep = new ArrayList<>();
                    planToKeep.add(plan);
                    person.getPlans().retainAll(planToKeep);

                    PopulationFactory pf = scenario.getPopulation().getFactory();

                    // modify plan by feathers:
                    plan = feathers2.createPlan(plan.getPerson(), pf);
                  }

                  @Override
                  public void finishReplanning() {}
                };
            builder.addStrategyModule(module);
            return builder.build();
          }
        };
    ctrl.addOverridingModule(
        new AbstractModule() {
          @Override
          public void install() {
            addPlanStrategyBinding(FEATHERS2).toProvider(planStrategyFactory);
          }
        });

    // running the controler:
    ctrl.run();
  }
Example #3
0
  /**
   * Setting up the MATSim {@link Config} so that it runs 20 iterations for a commercial vehicle
   * population.
   *
   * @param folder the specific folder to which the output will be written. Also, it assumes the
   *     following files are available as input in the folder:
   *     <ul>
   *       <li>{@code population.xml.gz} of commercial vehicles, each person with a plan. Only
   *           activity locations are required. The {@link Leg}s are allowed to take {@code
   *           commercial} as mode.
   *       <li>{@code populationAttributes.xml.gz} indicating which individuals are part of the
   *           <i>commercial vehicle</i> subpopulation. For that the only attribute required, namely
   *           {@code subpopulation}, needs to be set as {@code commercial}.
   *     </ul>
   *
   * @param machine the computer on which the run is executed. This just sets up the number of
   *     threads without having to hard code it in the class. The following values are currently
   *     supported:
   *     <ul>
   *       <li>{@code HOBBES} using 40 threads;
   *       <li>{@code MAC_MINI} the machine in Engineering 2, Room 3-13.1, a dual core i7 using 4
   *           threads;
   *       <li>{@code MACBOOK_PRO} is Johan W. Joubert's laptop, a dual core i5 using 4 threads.
   *     </ul>
   *
   * @return
   */
  public static Config setupConfig(String folder, Machine machine) {
    Config config = ConfigUtils.createConfig();

    /* Set global settings. */
    config.global().setNumberOfThreads(machine.getThreads());
    config.global().setCoordinateSystem("WGS84_SA_Albers");

    /* Set files and folders. */
    config.controler().setOutputDirectory(folder + "output/");
    config.controler().setFirstIteration(0);
    config.controler().setLastIteration(100);
    config.controler().setWriteEventsInterval(20);

    /* Network. */
    config.network().setInputFile(folder + "network.xml.gz");

    /* Population */
    config.plans().setInputFile(folder + "population.xml.gz");
    config.plans().setInputPersonAttributeFile(folder + "populationAttributes.xml.gz");
    config
        .plans()
        .setActivityDurationInterpretation(
            PlansConfigGroup.ActivityDurationInterpretation.tryEndTimeThenDuration);

    /* Facilities */
    config.facilities().setInputFile(folder + "facilities.xml.gz");

    /* QSim */
    config.qsim().setNumberOfThreads(machine.getThreads());
    String[] modes = {"car", "commercial"};
    config.qsim().setMainModes(Arrays.asList(modes));
    config.plansCalcRoute().setNetworkModes(Arrays.asList(modes));

    /* PlanCalcScore */
    ActivityParams major = new ActivityParams("major");
    major.setTypicalDuration(10 * 3600);
    config.planCalcScore().addActivityParams(major);

    ActivityParams minor = new ActivityParams("minor");
    minor.setTypicalDuration(1880);
    config.planCalcScore().addActivityParams(minor);

    /* Generic strategy */
    StrategySettings changeExpBetaStrategySettings =
        new StrategySettings(ConfigUtils.createAvailableStrategyId(config));
    changeExpBetaStrategySettings.setStrategyName(
        DefaultPlanStrategiesModule.DefaultSelector.ChangeExpBeta.toString());
    changeExpBetaStrategySettings.setWeight(0.8);
    config.strategy().addStrategySettings(changeExpBetaStrategySettings);
    /* Subpopulation strategy. */
    StrategySettings commercialStrategy =
        new StrategySettings(ConfigUtils.createAvailableStrategyId(config));
    commercialStrategy.setStrategyName(
        DefaultPlanStrategiesModule.DefaultSelector.ChangeExpBeta.toString());
    commercialStrategy.setWeight(0.85);
    commercialStrategy.setSubpopulation("commercial");
    config.strategy().addStrategySettings(commercialStrategy);
    /* Subpopulation ReRoute. Switch off after a time. */
    StrategySettings commercialReRoute =
        new StrategySettings(ConfigUtils.createAvailableStrategyId(config));
    commercialReRoute.setStrategyName(DefaultPlanStrategiesModule.DefaultStrategy.ReRoute.name());
    commercialReRoute.setWeight(0.15);
    commercialReRoute.setSubpopulation("commercial");
    commercialReRoute.setDisableAfter(85);
    config.strategy().addStrategySettings(commercialReRoute);

    return config;
  }