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"); }
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(); }
/** * 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; }