/** * Tests the setup with a traffic light that shows all the time green in the 0th iteration. After * the mobsim is run the signal settings are changed thus in the 1st iteration the signal should * be red in sec [0,99] and green in [100,2000] */ @Test public void testModifySignalControlDataOnsetOffset() { // configure and load standard scenario Fixture fixture = new Fixture(); Scenario scenario = fixture.createAndLoadTestScenario(false); scenario.getConfig().controler().setFirstIteration(0); scenario.getConfig().controler().setLastIteration(1); scenario.getConfig().controler().setOutputDirectory(testUtils.getOutputDirectory()); Controler controler = new Controler(scenario); controler.getConfig().controler().setCreateGraphs(false); controler.addControlerListener( new AfterMobsimListener() { @Override public void notifyAfterMobsim(AfterMobsimEvent event) { Scenario scenario = event.getServices().getScenario(); int dropping = 0; int onset = 100; for (SignalSystemControllerData intersectionSignal : ((SignalsData) scenario.getScenarioElement(SignalsData.ELEMENT_NAME)) .getSignalControlData() .getSignalSystemControllerDataBySystemId() .values()) { for (SignalPlanData plan : intersectionSignal.getSignalPlanData().values()) { plan.setCycleTime(2000); for (SignalGroupSettingsData data : plan.getSignalGroupSettingsDataByGroupId().values()) { data.setDropping(dropping); data.setOnset(onset); } } } } }); controler.addControlerListener( new IterationStartsListener() { @Override public void notifyIterationStarts(IterationStartsEvent event) { event.getServices().getEvents().addHandler(new EventsLogger()); TestLink2EnterEventHandler enterHandler = new TestLink2EnterEventHandler(); if (0 == event.getIteration()) { enterHandler.link2EnterTime = 38.0; } if (1 == event.getIteration()) { enterHandler.link2EnterTime = 100.0; SignalGroupStateChangedEventHandler signalsHandler0 = new TestSignalGroupStateChangedHandler(); event.getServices().getEvents().addHandler(signalsHandler0); } } }); controler.run(); }
public static void main(String[] args) { Controler controler = null; if (args.length == 0) { controler = new Controler(initSampleScenario()); } else controler = new Controler(args); /* * Scoring also has to take the social costs into account. * This cannot be moved to the initializer since the scoring functions * are created even before the startup event is created. */ // controler.setScoringFunctionFactory(new TimeAndMoneyDependentScoringFunctionFactory()); InitializerV2 initializer = new InitializerV2(0.1); controler.addControlerListener(initializer); controler .getConfig() .controler() .setOverwriteFileSetting( true ? OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles : OutputDirectoryHierarchy.OverwriteFileSetting.failIfDirectoryExists); controler.run(); }
/** @param args */ public static void main(String[] args) { log.info("Running SylviaMain..."); String[] args2 = null; if (args == null || args.length == 0) { throw new RuntimeException("No arguments given, expecting path to config!"); } else { args2 = args; } // DgCottbusSylviaAnalysisControlerListener analysis = new // DgCottbusSylviaAnalysisControlerListener(); Controler controler = new Controler(args2); DgSylviaConfig sylviaConfig = new DgSylviaConfig(); // FIXME: Take care that the normal SignalsControllerListener is NOT added. controler.addControlerListener( new DgSylviaControlerListenerFactory(sylviaConfig).createSignalsControllerListener()); // controler.addControlerListener(analysis); controler .getConfig() .controler() .setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles); controler.run(); }
private static void initializeLocationChoice(final Controler controler) { final Scenario scenario = controler.getScenario(); final DestinationChoiceBestResponseContext lcContext = new DestinationChoiceBestResponseContext(scenario); lcContext.init(); controler.addControlerListener(new DestinationChoiceInitializer(lcContext)); }
void run() { if (!new File(outputDir + "/input/").exists()) { new File(outputDir + "/input/").mkdirs(); } createTolledNetwork(); createDemand(); createConfig(); Controler controler = new Controler(sc); if (isComparing) { TollHandler tollHandler = new TollHandler(sc); final TollDisutilityCalculatorFactory fact = new TollDisutilityCalculatorFactory(tollHandler); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bindTravelDisutilityFactory().toInstance(fact); } }); switch (congestionImpl) { case "implV3": controler.addControlerListener( new MarginalCongestionPricingContolerListener( sc, tollHandler, new CongestionHandlerImplV3(controler.getEvents(), (ScenarioImpl) sc))); break; case "implV4": controler.addControlerListener( new MarginalCongestionPricingContolerListener( sc, tollHandler, new CongestionHandlerImplV4(controler.getEvents(), sc))); break; case "implV6": // controler.addControlerListener(new MarginalCongestionPricingContolerListener(sc, // tollHandler, new CongestionHandlerImplV6(controler.getEvents(), sc))); break; default: break; } } controler.run(); }
@Override public void notifyIterationStarts(IterationStartsEvent event) { if (event.getIteration() == 0) { Controler controler = event.getControler(); // initialize the social costs calculator SocialCostCalculatorV2 scc = new SocialCostCalculatorV2( controler.getScenario().getNetwork(), controler.getEvents(), controler.getLinkTravelTimes(), controler, blendFactor); controler.addControlerListener(scc); controler.getEvents().addHandler(scc); // initialize the social costs disutility calculator final SocialCostTravelDisutilityFactory factory = new SocialCostTravelDisutilityFactory(scc); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bindCarTravelDisutilityFactory().toInstance(factory); } }); // create a plot containing the mean travel times Set<String> transportModes = new HashSet<String>(); transportModes.add(TransportMode.car); transportModes.add(TransportMode.pt); transportModes.add(TransportMode.walk); MeanTravelTimeCalculator mttc = new MeanTravelTimeCalculator(controler.getScenario(), transportModes); controler.addControlerListener(mttc); controler.getEvents().addHandler(mttc); } }
public ChoiceSetWithCrowdingGenerator(Config config, String eventsFile) { if (internalizationOfCrowdingDelay) log.info("Internalization of external PT Travel Delay cost is enabled."); if (internalizationOfComfortDisutility) log.info("Internalization of external Crowding cost is enabled."); choiceGenerationControler = new ChoiceGenerationWithCrowdingControler(config, eventsFile); choiceGenerationControler.setInternalizationOfComfortDisutility( internalizationOfComfortDisutility); choiceGenerationControler.setInternalizationOfCrowdingDelay(internalizationOfCrowdingDelay); choiceGenerationControler.load(); this.controler = choiceGenerationControler.getControler(); this.population = controler.getScenario().getPopulation(); controler.addControlerListener(this); }
/* * Just starts a randomized router. * */ @Ignore @Test public final void test2() { String configFile1 = testUtils.getPackageInputDirectory() + "CNTest/config1.xml"; Controler controler = new Controler(configFile1); TollHandler tollHandler = new TollHandler(controler.getScenario()); final CongestionTollTimeDistanceTravelDisutilityFactory factory = new CongestionTollTimeDistanceTravelDisutilityFactory( new RandomizingTimeDistanceTravelDisutilityFactory( TransportMode.car, controler.getConfig().planCalcScore()), tollHandler, controler.getConfig().planCalcScore()); factory.setSigma(3.); controler.addOverridingModule( new AbstractModule() { @Override public void install() { this.bindCarTravelDisutilityFactory().toInstance(factory); } }); controler.addControlerListener( new MarginalCongestionPricingContolerListener( controler.getScenario(), tollHandler, new CongestionHandlerImplV3(controler.getEvents(), controler.getScenario()))); controler.addOverridingModule(new OTFVisFileWriterModule()); controler .getConfig() .controler() .setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.deleteDirectoryIfExists); controler.run(); }
public static void main(String[] args) { Config config = new Config(); config.addCoreModules(); Controler controler = new Controler(config); // controler settings controler .getConfig() .controler() .setOverwriteFileSetting( true ? OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles : OutputDirectoryHierarchy.OverwriteFileSetting.failIfDirectoryExists); controler.getConfig().controler().setCreateGraphs(false); // controlerConfigGroup ControlerConfigGroup ccg = controler.getConfig().controler(); ccg.setOutputDirectory(outputPath); ccg.setFirstIteration(0); ccg.setLastIteration(0); ccg.setMobsim("qsim"); Set set = new HashSet(); set.add(EventsFileFormat.xml); ccg.setEventsFileFormats(set); // ccg.setRunId("321"); // qsimConfigGroup QSimConfigGroup qcg = controler.getConfig().qsim(); qcg.setStartTime(0 * 3600.); qcg.setEndTime(30 * 3600.); qcg.setFlowCapFactor(0.1); qcg.setStorageCapFactor(0.3); // qcg.setFlowCapFactor(0.01); // qcg.setStorageCapFactor(0.03); qcg.setNumberOfThreads(1); qcg.setRemoveStuckVehicles(false); qcg.setStuckTime(10.0); // planCalcScoreConfigGroup PlanCalcScoreConfigGroup pcs = controler.getConfig().planCalcScore(); Set<String> activities = new HashSet<String>(); activities.add("unknown"); activities.add("work"); activities.add("pickup"); activities.add("with adult"); activities.add("other"); activities.add("pvWork"); activities.add("pvHome"); activities.add("gvHome"); activities.add("education"); activities.add("business"); activities.add("shopping"); activities.add("private"); activities.add("leisure"); activities.add("sports"); activities.add("home"); activities.add("friends"); for (String activity : activities) { ActivityParams params = new ActivityParams(activity); params.setTypicalDuration(30 * 3600); pcs.addActivityParams(params); } // strategy StrategyConfigGroup scg = controler.getConfig().strategy(); StrategySettings strategySettings = new StrategySettings(Id.create("1", StrategySettings.class)); strategySettings.setStrategyName("ChangeExpBeta"); strategySettings.setWeight(1.0); scg.addStrategySettings(strategySettings); // network NetworkConfigGroup ncg = controler.getConfig().network(); ncg.setInputFile(networkFile); // plans PlansConfigGroup pcg = controler.getConfig().plans(); pcg.setInputFile(plansFile); // define emission tool input files EmissionsConfigGroup ecg = new EmissionsConfigGroup(); controler.getConfig().addModule(ecg); ecg.setEmissionRoadTypeMappingFile(roadTypeMappingFile); ecg.setEmissionVehicleFile(emissionVehicleFile); ecg.setAverageWarmEmissionFactorsFile(averageFleetWarmEmissionFactorsFile); ecg.setAverageColdEmissionFactorsFile(averageFleetColdEmissionFactorsFile); ecg.setUsingDetailedEmissionCalculation(isUsingDetailedEmissionCalculation); ecg.setDetailedWarmEmissionFactorsFile(detailedWarmEmissionFactorsFile); ecg.setDetailedColdEmissionFactorsFile(detailedColdEmissionFactorsFile); // TODO: the following does not work yet. Need to force controler to always write events in the // last iteration. VspExperimentalConfigGroup vcg = controler.getConfig().vspExperimental(); vcg.setWritingOutputEvents(false); controler.addControlerListener(new EmissionControlerListener()); controler.run(); }
@Override public void notifyStartup(StartupEvent event) { Controler controler = event.getControler(); // compute or read maxDCScore but do not add it to the context: // context can then be given to scoring classes both during regular scoring and in // pre-processing ReadOrComputeMaxDCScore computer = new ReadOrComputeMaxDCScore(dcContext); computer.readOrCreateMaxDCScore(controler, dcContext.kValsAreRead()); this.personsMaxDCScoreUnscaled = computer.getPersonsMaxEpsUnscaled(); for (String actType : this.dcContext.getFlexibleTypes()) { controler.addControlerListener( new DistanceStats( controler.getConfig(), "best", actType, dcContext.getConverter(), TransportMode.car)); controler.addControlerListener( new DistanceStats( controler.getConfig(), "best", actType, dcContext.getConverter(), TransportMode.pt)); controler.addControlerListener( new DistanceStats( controler.getConfig(), "best", actType, dcContext.getConverter(), TransportMode.bike)); controler.addControlerListener( new DistanceStats( controler.getConfig(), "best", actType, dcContext.getConverter(), TransportMode.walk)); controler.addControlerListener( new DistanceStats( controler.getConfig(), "best", actType, dcContext.getConverter(), TransportMode.other)); controler.addControlerListener( new DistanceStats( controler.getConfig(), "best", actType, dcContext.getConverter(), TransportMode.ride)); controler.addControlerListener( new DistanceStats( controler.getConfig(), "best", actType, dcContext.getConverter(), TransportMode.transit_walk)); } MaxDCScoreWrapper dcScore = new MaxDCScoreWrapper(); dcScore.setPersonsMaxDCScoreUnscaled(personsMaxDCScoreUnscaled); controler .getScenario() .addScenarioElement(DestinationChoiceBestResponseContext.ELEMENT_NAME, dcContext); controler.getScenario().addScenarioElement(MaxDCScoreWrapper.ELEMENT_NAME, dcScore); log.info("dc initialized"); }
public static void main(final String[] args) { final String configFile = args[0]; // This allows to get a log file containing the log messages happening // before controler init. OutputDirectoryLogging.catchLogEntries(); // This is the location choice MultiNodeDijkstra. // Suppress all log messages of level below error --- to avoid spaming the config // file with zillions of "not route found" messages. Logger.getLogger(org.matsim.core.router.MultiNodeDijkstra.class) .setLevel(Level.ERROR); // this is location choice Logger.getLogger(org.matsim.pt.router.MultiNodeDijkstra.class).setLevel(Level.ERROR); final Config config = ConfigUtils.loadConfig( configFile, // this adds a new config group, used by the specific scoring function // we use new KtiLikeScoringConfigGroup()); // This is currently needed for location choice: initializing // the location choice writes K-values files to the output directory, which: // - fails if the directory does not exist // - makes the controler crash latter if the unsafe setOverwriteFiles( true ) // is not called. // This ensures that we get safety with location choice working as expected, // before we sort this out and definitely kick out setOverwriteFiles. createEmptyDirectoryOrFailIfExists(config.controler().getOutputDirectory()); OneWayCarsharingRDConfigGroup configGroup = new OneWayCarsharingRDConfigGroup(); config.addModule(configGroup); FreeFloatingConfigGroup configGroupff = new FreeFloatingConfigGroup(); config.addModule(configGroupff); TwoWayCSConfigGroup configGrouptw = new TwoWayCSConfigGroup(); config.addModule(configGrouptw); AllCSModesConfigGroup configGroupAll = new AllCSModesConfigGroup(); config.addModule(configGroupAll); final Scenario scenario = ScenarioUtils.loadScenario(config); final Controler controler = new Controler(scenario); controler .getConfig() .controler() .setOverwriteFileSetting( true ? OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles : OutputDirectoryHierarchy.OverwriteFileSetting.failIfDirectoryExists); Set<String> modes = new TreeSet<String>(); modes.add("freefloating"); modes.add("twowaycarsharing"); modes.add("onewaycarsharing"); modes.add("car"); modes.add("walk"); modes.add("pt"); modes.add("bike"); TripsAnalyzer tripsAnalyzer = new TripsAnalyzer( controler.getConfig().getParam("controler", "outputDirectory") + "/tripsFile", controler.getConfig().getParam("controler", "outputDirectory") + "/durationsFile", controler.getConfig().getParam("controler", "outputDirectory") + "/distancesFile", modes, true, controler.getScenario().getNetwork()); controler.addControlerListener(tripsAnalyzer); controler.addControlerListener( new AllCSModesTestListener( controler, Integer.parseInt( controler.getConfig().getModule("AllCSModes").getValue("statsWriterFrequency")))); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bindMobsim().toProvider(AllCSModesQsimFactory.class); } }); controler.addOverridingModule( new AbstractModule() { @Override public void install() { addRoutingModuleBinding("twowaycarsharing").toInstance(new TwoWayCSRoutingModule()); addRoutingModuleBinding("freefloating").toInstance(new FreeFloatingRoutingModule()); addRoutingModuleBinding("onewaycarsharing") .toInstance(new OneWayCarsharingRDRoutingModule()); bind(MainModeIdentifier.class) .toInstance( new MainModeIdentifier() { final MainModeIdentifier defaultModeIdentifier = new MainModeIdentifierImpl(); @Override public String identifyMainMode(List<? extends PlanElement> tripElements) { for (PlanElement pe : tripElements) { if (pe instanceof Leg && ((Leg) pe).getMode().equals("twowaycarsharing")) { return "twowaycarsharing"; } else if (pe instanceof Leg && ((Leg) pe).getMode().equals("onewaycarsharing")) { return "onewaycarsharing"; } else if (pe instanceof Leg && ((Leg) pe).getMode().equals("freefloating")) { return "freefloating"; } } // if the trip doesn't contain a carsharing leg, // fall back to the default identification method. return defaultModeIdentifier.identifyMainMode(tripElements); } }); } }); connectFacilitiesWithNetwork(controler); initializeLocationChoice(controler); // We use a specific scoring function, that uses individual preferences // for activity durations. controler.setScoringFunctionFactory( new CarsharingMATSimLectureScoringFunctionFactory( controler.getScenario(), new StageActivityTypesImpl(PtConstants.TRANSIT_ACTIVITY_TYPE))); controler.run(); }
/* * Tests if different travel disutility factories result in the same outcome. * */ @Ignore @Test public final void test3() { String configFile1 = testUtils.getPackageInputDirectory() + "CNTest/config1.xml"; // 1: Config config1 = ConfigUtils.loadConfig(configFile1); String outputDirectory1 = testUtils.getOutputDirectory() + "a"; config1.controler().setOutputDirectory(outputDirectory1); Scenario scenario1 = ScenarioUtils.loadScenario(config1); Controler controler1 = new Controler(scenario1); TollHandler tollHandler1 = new TollHandler(scenario1); final CongestionTollTimeDistanceTravelDisutilityFactory factory1 = new CongestionTollTimeDistanceTravelDisutilityFactory( new RandomizingTimeDistanceTravelDisutilityFactory( TransportMode.car, config1.planCalcScore()), tollHandler1, config1.planCalcScore()); factory1.setSigma(0.); factory1.setBlendFactor(0.1); controler1.addOverridingModule( new AbstractModule() { @Override public void install() { this.bindCarTravelDisutilityFactory().toInstance(factory1); } }); controler1.addControlerListener( new MarginalCongestionPricingContolerListener( controler1.getScenario(), tollHandler1, new CongestionHandlerImplV3(controler1.getEvents(), controler1.getScenario()))); controler1.addOverridingModule(new OTFVisFileWriterModule()); controler1 .getConfig() .controler() .setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.deleteDirectoryIfExists); controler1.run(); // 2: "deprecated way" Config config2 = ConfigUtils.loadConfig(configFile1); String outputDirectory2 = testUtils.getOutputDirectory() + "b"; config2.controler().setOutputDirectory(outputDirectory2); Scenario scenario2 = ScenarioUtils.loadScenario(config2); Controler controler2 = new Controler(scenario2); TollHandler tollHandler2 = new TollHandler(scenario2); final TollDisutilityCalculatorFactory factory2 = new TollDisutilityCalculatorFactory(tollHandler2, config2.planCalcScore()); controler2.addOverridingModule( new AbstractModule() { @Override public void install() { bindCarTravelDisutilityFactory().toInstance(factory2); } }); controler2.addControlerListener( new MarginalCongestionPricingContolerListener( controler2.getScenario(), tollHandler2, new CongestionHandlerImplV3(controler2.getEvents(), controler2.getScenario()))); controler2.addOverridingModule(new OTFVisFileWriterModule()); controler2 .getConfig() .controler() .setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.deleteDirectoryIfExists); controler2.run(); // compare LinkDemandEventHandler handler1 = analyzeEvents(outputDirectory1, configFile1); // a System.out.println("Bottleneck demand - (a): " + getBottleneckDemand(handler1)); // a LinkDemandEventHandler handler2 = analyzeEvents(outputDirectory2, configFile1); // b System.out.println("Bottleneck demand - (b): " + getBottleneckDemand(handler2)); // b Assert.assertEquals( "run a and b should result in the exact same outcome (without accounting for randomness!)", true, getBottleneckDemand(handler1) == getBottleneckDemand(handler2)); }
public void run() { new MatsimNetworkReader(scenario).readFile(scenario.getConfig().network().getInputFile()); new TransitScheduleReaderV1(scenario) .readFile(this.scenario.getConfig().transit().getTransitScheduleFile()); Logger.getLogger(this.getClass()) .fatal( "cannot say if the following should be vehicles or transit vehicles; aborting ... . kai, feb'15"); System.exit(-1); new VehicleReaderV1((scenario).getTransitVehicles()) .readFile(this.scenario.getConfig().transit().getVehiclesFile()); Controler controler = new Controler(this.scenario); controler .getConfig() .controler() .setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles); controler.addOverridingModule(new OTFVisFileWriterModule()); controler.addControlerListener( new OptControlerListener( this.fare, this.scenario, this.calculate_inVehicleTimeDelayEffects, this.calculate_waitingTimeDelayEffects, this.calculate_capacityDelayEffects, this.marginalCostPricingPt, this.calculate_carCongestionEffects, this.marginalCostPricingCar)); ControlerConfigGroup controlerConfGroup = controler.getConfig().controler(); if (controlerConfGroup.getLastIteration() == 0) { controlerConfGroup.setWriteEventsInterval(1); controlerConfGroup.setWritePlansInterval(1); } else { controlerConfGroup.setWriteEventsInterval(controlerConfGroup.getLastIteration()); controlerConfGroup.setWritePlansInterval(controlerConfGroup.getLastIteration()); } PlanCalcScoreConfigGroup planCalcScoreConfigGroup = controler.getConfig().planCalcScore(); planCalcScoreConfigGroup.setMarginalUtilityOfMoney(MARGINAL_UTILITY_OF_MONEY); planCalcScoreConfigGroup.setPerforming_utils_hr(PERFORMING); planCalcScoreConfigGroup.getModes().get(TransportMode.car).setConstant(CONSTANT_CAR); planCalcScoreConfigGroup .getModes() .get(TransportMode.car) .setMarginalUtilityOfTraveling(TRAVEL_CAR); planCalcScoreConfigGroup .getModes() .get(TransportMode.car) .setMonetaryDistanceRate(MONETARY_DISTANCE_COST_RATE_CAR); planCalcScoreConfigGroup.getModes().get(TransportMode.walk).setConstant(CONSTANT_WALK); planCalcScoreConfigGroup .getModes() .get(TransportMode.walk) .setMarginalUtilityOfTraveling(TRAVEL_WALK); planCalcScoreConfigGroup .getModes() .get(TransportMode.pt) .setMonetaryDistanceRate(MONETARY_DISTANCE_COST_RATE_PT); planCalcScoreConfigGroup.getModes().get(TransportMode.pt).setConstant(CONSTANT_PT); planCalcScoreConfigGroup .getModes() .get(TransportMode.pt) .setMarginalUtilityOfTraveling(TRAVEL_PT_IN_VEHICLE); planCalcScoreConfigGroup.setMarginalUtlOfWaitingPt_utils_hr(TRAVEL_PT_WAITING); planCalcScoreConfigGroup.setUtilityOfLineSwitch(LINE_SWITCH); planCalcScoreConfigGroup.setLateArrival_utils_hr(LATE_ARRIVAL); planCalcScoreConfigGroup.setEarlyDeparture_utils_hr(EARLY_DEPARTURE); planCalcScoreConfigGroup.setMarginalUtlOfWaiting_utils_hr(WAITING); OptimizationScoringFunctionFactory scoringfactory = new OptimizationScoringFunctionFactory(scenario, STUCK_SCORE); controler.setScoringFunctionFactory(scoringfactory); controler.getConfig().controler().setCreateGraphs(false); controler.run(); }
public static void main(String[] args) { Config config = ConfigUtils.createConfig(); config.removeModule(StrategyConfigGroup.GROUP_NAME); config.addModule(new StrategyPopsConfigGroup()); ConfigUtils.loadConfig(config, args[0]); controler = new Controler(ScenarioUtils.loadScenario(config)); controler .getConfig() .controler() .setOverwriteFileSetting( true ? OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles : OutputDirectoryHierarchy.OverwriteFileSetting.failIfDirectoryExists); controler.addControlerListener( new LegHistogramListener( controler.getEvents(), true, controler.getScenario().getPopulation())); controler.addControlerListener( new ScoreStats( controler.getScenario().getPopulation(), ScoreStatsControlerListener.FILENAME_SCORESTATS, true)); // services.addControlerListener(new CalibrationStatsListener(services.getEvents(), new // String[]{args[1], args[2]}, 1, "Travel Survey (Benchmark)", "Red_Scheme", new // HashSet<Id<Person>>())); final WaitTimeStuckCalculator waitTimeCalculator = new WaitTimeStuckCalculator( controler.getScenario().getPopulation(), controler.getScenario().getTransitSchedule(), controler.getConfig().travelTimeCalculator().getTraveltimeBinSize(), (int) (controler.getConfig().qsim().getEndTime() - controler.getConfig().qsim().getStartTime())); controler.getEvents().addHandler(waitTimeCalculator); final StopStopTimeCalculator stopStopTimeCalculator = new StopStopTimeCalculator( controler.getScenario().getTransitSchedule(), controler.getConfig().travelTimeCalculator().getTraveltimeBinSize(), (int) (controler.getConfig().qsim().getEndTime() - controler.getConfig().qsim().getStartTime())); controler.getEvents().addHandler(stopStopTimeCalculator); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bind(TransitRouter.class) .toProvider( new TransitRouterWSImplFactory( controler.getScenario(), waitTimeCalculator.getWaitTimes(), stopStopTimeCalculator.getStopStopTimes())); } }); controler.setScoringFunctionFactory( new CharyparNagelOpenTimesScoringFunctionFactory( controler.getConfig().planCalcScore(), controler.getScenario())); AbstractModule myStrategyManagerModule = new AbstractModule() { @Override public void install() { bind(StrategyManager.class).toInstance(myLoadStrategyManager()); } }; controler.addOverridingModule(myStrategyManagerModule); controler.run(); }
public static void main(String[] args) throws IOException, ClassNotFoundException { Config config = ConfigUtils.createConfig(); ConfigUtils.loadConfig(config, args[0]); final Controler controler = new Controler(ScenarioUtils.loadScenario(config)); if (args.length > 3) { final StopStopTimeCalculator stopStopTimeCalculatorEvents = new StopStopTimeCalculator( controler.getScenario().getTransitSchedule(), controler.getConfig().travelTimeCalculator().getTraveltimeBinSize(), (int) (controler.getConfig().qsim().getEndTime() - controler.getConfig().qsim().getStartTime())); stopStopTimeCalculatorEvents.setUseVehicleIds(false); EventsManager eventsManager = EventsUtils.createEventsManager(controler.getConfig()); eventsManager.addHandler(stopStopTimeCalculatorEvents); (new MatsimEventsReader(eventsManager)).readFile(args[3]); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bindMobsim() .toProvider( new Provider<Mobsim>() { @Override public Mobsim get() { return new PTQSimFactory(stopStopTimeCalculatorEvents.getStopStopTimes()) .createMobsim(controler.getScenario(), controler.getEvents()); } }); } }); } else controler.addOverridingModule( new AbstractModule() { @Override public void install() { bindMobsim() .toProvider( new Provider<Mobsim>() { @Override public Mobsim get() { return new PTQSimFactory() .createMobsim(controler.getScenario(), controler.getEvents()); } }); } }); controler .getConfig() .controler() .setOverwriteFileSetting( true ? OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles : OutputDirectoryHierarchy.OverwriteFileSetting.failIfDirectoryExists); controler.addControlerListener( new CalibrationStatsListener( controler.getEvents(), new String[] {args[1], args[2]}, 1, "Travel Survey (Benchmark)", "Red_Scheme", new HashSet<Id<Person>>())); WaitTimeStuckCalculator waitTimeCalculator = new WaitTimeStuckCalculator( controler.getScenario().getPopulation(), controler.getScenario().getTransitSchedule(), controler.getConfig().travelTimeCalculator().getTraveltimeBinSize(), (int) (controler.getConfig().qsim().getEndTime() - controler.getConfig().qsim().getStartTime())); controler.getEvents().addHandler(waitTimeCalculator); StopStopTimeCalculator stopStopTimeCalculator = new StopStopTimeCalculator( controler.getScenario().getTransitSchedule(), controler.getConfig().travelTimeCalculator().getTraveltimeBinSize(), (int) (controler.getConfig().qsim().getEndTime() - controler.getConfig().qsim().getStartTime())); controler.getEvents().addHandler(stopStopTimeCalculator); final TransitRouterEventsWSFactory factory = new TransitRouterEventsWSFactory( controler.getScenario(), waitTimeCalculator.getWaitTimes(), stopStopTimeCalculator.getStopStopTimes()); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bind(TransitRouter.class).toProvider(factory); } }); controler.run(); }
public static void main(final String[] args) { log.info( "Starting the matsim run from the urbansim interface. This looks a little rough initially since 'normal' matsim"); log.info("is not entered until later (after 'DONE with demand generation from urbansim')."); int year = 0; double samplingRate = 0.01; for (int ii = 1; ii < args.length; ii++) { // args[0] is the config file log.info(" ii: " + ii + " args[ii]: " + args[ii]); String[] parts = args[ii].split("="); if (parts[0].equals("--year")) { year = Integer.parseInt(parts[1]); } else if (parts[0].equals("--samplingRate")) { samplingRate = Double.parseDouble(parts[1]); } } log.info("year: " + year + " samplingRate: " + samplingRate); for (int ii = args.length - 1; ii >= 1; ii--) { args[ii] = ""; } // parse the config arguments so we have a config. generate scenario data from this Config config = ConfigUtils.loadConfig(args[0]); MatsimRandom.reset(config.global().getRandomSeed()); Scenario scenario = ScenarioUtils.createScenario(config); ScenarioUtils.loadScenario(scenario); // get the network. Always cleaning it seems a good idea since someone may have modified the // input files manually in // order to implement policy measures. Get network early so readXXX can check if links still // exist. Network network = scenario.getNetwork(); log.info(""); log.info("cleaning network ..."); NetworkCleaner nwCleaner = new NetworkCleaner(); nwCleaner.run(network); log.info("... finished cleaning network."); log.info(""); ReadFromUrbansimParcelModel readFromUrbansim = new ReadFromUrbansimParcelModel(year); // read urbansim facilities (these are simply those entities that have the coordinates!) ActivityFacilitiesImpl facilities = new ActivityFacilitiesImpl("urbansim locations (gridcells _or_ parcels _or_ ...)"); ActivityFacilitiesImpl zones = new ActivityFacilitiesImpl("urbansim zones"); readFromUrbansim.readFacilities(facilities, zones); new FacilitiesWriter(facilities).write(PATH_TO_OPUS_MATSIM + "tmp/locations.xml.gz"); Population oldPop; if (config.plans().getInputFile() != null) { log.info( "Population specified in matsim config file; assuming WARM start with pre-existing pop file."); log.info( "Persons not found in pre-existing pop file are added; persons no longer in urbansim persons file are removed."); oldPop = scenario.getPopulation(); log.info( "Note that the `continuation of iterations' will only work if you set this up via different config files for"); log.info(" every year and know what you are doing."); } else { log.warn("No population specified in matsim config file; assuming COLD start."); log.info("(I.e. generate new pop from urbansim files.)"); oldPop = null; } Population newPop = ((MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig())) .getPopulation(); // read urbansim persons. Generates hwh acts as side effect readFromUrbansim.readPersons(oldPop, newPop, facilities, network, samplingRate); oldPop = null; System.gc(); new PopulationWriter(newPop, network).write(PATH_TO_OPUS_MATSIM + "tmp/pop.xml.gz"); log.info("### DONE with demand generation from urbansim ###"); ((MutableScenario) scenario).setPopulation(newPop); Controler controler = new Controler(scenario); controler .getConfig() .controler() .setOverwriteFileSetting( true ? OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles : OutputDirectoryHierarchy.OverwriteFileSetting.failIfDirectoryExists); // The following lines register what should be done _after_ the iterations were run: MyControlerListener myControlerListener = new MyControlerListener(zones); controler.addControlerListener(myControlerListener); // run the iterations, including the post-processing: controler.run(); }