public static final QuadTree<Person> createPersonQuadTree(Controler controler) { double minx = (1.0D / 0.0D); double miny = (1.0D / 0.0D); double maxx = (-1.0D / 0.0D); double maxy = (-1.0D / 0.0D); for (ActivityFacility f : controler.getScenario().getActivityFacilities().getFacilities().values()) { if (f.getCoord().getX() < minx) minx = f.getCoord().getX(); if (f.getCoord().getY() < miny) miny = f.getCoord().getY(); if (f.getCoord().getX() > maxx) maxx = f.getCoord().getX(); if (f.getCoord().getY() <= maxy) continue; maxy = f.getCoord().getY(); } minx -= 1.0D; miny -= 1.0D; maxx += 1.0D; maxy += 1.0D; QuadTree<Person> personQuadTree = new QuadTree<Person>(minx, miny, maxx, maxy); for (Person p : controler.getScenario().getPopulation().getPersons().values()) { Coord c = ((ActivityFacility) controler .getScenario() .getActivityFacilities() .getFacilities() .get(((PlanImpl) p.getSelectedPlan()).getFirstActivity().getFacilityId())) .getCoord(); personQuadTree.put(c.getX(), c.getY(), p); } log.info("PersonQuadTree has been created"); return personQuadTree; }
public static final QuadTree<ActivityFacility> createFacilityQuadTree(Controler controler) { double minx = (1.0D / 0.0D); double miny = (1.0D / 0.0D); double maxx = (-1.0D / 0.0D); double maxy = (-1.0D / 0.0D); for (Link l : controler.getScenario().getNetwork().getLinks().values()) { if (l.getCoord().getX() < minx) minx = l.getCoord().getX(); if (l.getCoord().getY() < miny) miny = l.getCoord().getY(); if (l.getCoord().getX() > maxx) maxx = l.getCoord().getX(); if (l.getCoord().getY() <= maxy) continue; maxy = l.getCoord().getY(); } minx -= 1.0D; miny -= 1.0D; maxx += 1.0D; maxy += 1.0D; QuadTree<ActivityFacility> facilityQuadTree = new QuadTree<ActivityFacility>(minx, miny, maxx, maxy); for (ActivityFacility f : controler.getScenario().getActivityFacilities().getFacilities().values()) { ((ActivityFacilityImpl) f) .setLinkId( NetworkUtils.getNearestLink( ((NetworkImpl) controler.getScenario().getNetwork()), f.getCoord()) .getId()); Coord c = f.getCoord(); facilityQuadTree.put(c.getX(), c.getY(), f); } return facilityQuadTree; }
public static final QuadTree<ActivityFacility> createShopsQuadTree(Controler controler) { double minx = (1.0D / 0.0D); double miny = (1.0D / 0.0D); double maxx = (-1.0D / 0.0D); double maxy = (-1.0D / 0.0D); for (ActivityFacility f : controler.getScenario().getActivityFacilities().getFacilities().values()) { if (f.getCoord().getX() < minx) minx = f.getCoord().getX(); if (f.getCoord().getY() < miny) miny = f.getCoord().getY(); if (f.getCoord().getX() > maxx) maxx = f.getCoord().getX(); if (f.getCoord().getY() <= maxy) continue; maxy = f.getCoord().getY(); } minx -= 1.0D; miny -= 1.0D; maxx += 1.0D; maxy += 1.0D; QuadTree<ActivityFacility> shopsQuadTree = new QuadTree<ActivityFacility>(minx, miny, maxx, maxy); for (ActivityFacility f : controler.getScenario().getActivityFacilities().getFacilities().values()) { // log.info("activity options = " + f.getActivityOptions()); if (f.getActivityOptions().containsKey("shopgrocery")) { Coord c = f.getCoord(); shopsQuadTree.put(c.getX(), c.getY(), f); } } return shopsQuadTree; }
private static void connectFacilitiesWithNetwork(Controler controler) { ActivityFacilities facilities = controler.getScenario().getActivityFacilities(); // log.warn("number of facilities: " +facilities.getFacilities().size()); NetworkImpl network = (NetworkImpl) controler.getScenario().getNetwork(); // log.warn("number of links: " +network.getLinks().size()); WorldConnectLocations wcl = new WorldConnectLocations(controler.getConfig()); wcl.connectFacilitiesWithLinks(facilities, network); }
public static void main(String[] args) { Config config = ConfigUtils.createConfig(); ConfigUtils.loadConfig(config, args[0]); final Controler controler = new Controler(ScenarioUtils.loadScenario(config)); 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); final VehicleOccupancyCalculator vehicleOccupancyCalculator = new VehicleOccupancyCalculator( controler.getScenario().getTransitSchedule(), ((ScenarioImpl) controler.getScenario()).getTransitVehicles(), controler.getConfig().travelTimeCalculator().getTraveltimeBinSize(), (int) (controler.getConfig().qsim().getEndTime() - controler.getConfig().qsim().getStartTime())); controler.getEvents().addHandler(vehicleOccupancyCalculator); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bind(TransitRouter.class) .toProvider( new TransitRouterEventsWSVFactory( controler.getScenario(), waitTimeCalculator.getWaitTimes(), stopStopTimeCalculator.getStopStopTimes(), vehicleOccupancyCalculator.getVehicleOccupancy())); } }); // yyyyyy note that in the above script only the router is modified, but not the scoring. With // standard matsim, a slower bu // less crowded pt route will only be accepted by the agent when the faster but more crowded // option was never presented // to the agent. kai, jul'15 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)); }
public ModeSharesEventHandler(final Controler controler, String xy) { this.network = controler.getScenario().getNetwork(); this.xy = xy; if (this.xy.equals("times")) { maxXYForPlotting = 3600.0; } }
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(), new DestinationChoiceConfigGroup()); // 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()); final Scenario scenario = ScenarioUtils.loadScenario(config); final Controler controler = new Controler(scenario); controler .getConfig() .controler() .setOverwriteFileSetting( true ? OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles : OutputDirectoryHierarchy.OverwriteFileSetting.failIfDirectoryExists); connectFacilitiesWithNetwork(controler); initializeLocationChoice(controler); // We use a specific scoring function, that uses individual preferences // for activity durations. controler.setScoringFunctionFactory( new MATSim2010ScoringFunctionFactory( controler.getScenario(), new StageActivityTypesImpl(PtConstants.TRANSIT_ACTIVITY_TYPE))); controler.run(); }
public KMZPtCountSimComparisonWriter(final Controler controler) { this.controler = controler; // load data net = controler.getScenario().getNetwork(); MatsimCountsReader reader = new MatsimCountsReader(occupCounts); reader.readFile(controler.getConfig().ptCounts().getOccupancyCountsFileName()); scalefactor = controler.getConfig().ptCounts().getCountsScaleFactor(); reader = null; // M }
public WithindayListener(Controler controler) { this.scenario = controler.getScenario(); this.withinDayControlerListener = new WithinDayControlerListener(); this.controler = controler; // Use a Scoring Function, that only scores the travel times! // controler.setScoringFunctionFactory(new OnlyTravelTimeDependentScoringFunctionFactory()); // controler.setTravelDisutilityFactory(new OnlyTimeDependentTravelDisutilityFactory()); // workaround this.withinDayControlerListener.setLeastCostPathCalculatorFactory(new DijkstraFactory()); }
@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); } }
/* * 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 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); }
@Test public void test_RunTutorial() { Config config = this.utils.loadConfig("test/scenarios/pt-tutorial/config.xml"); config.planCalcScore().setWriteExperiencedPlans(true); config.controler().setLastIteration(0); config.plans().setInputFile("test/scenarios/pt-tutorial/population2.xml"); Controler controler = new Controler(config); controler .getConfig() .controler() .setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles); controler.getConfig().controler().setCreateGraphs(false); controler.run(); MutableScenario s = (MutableScenario) controler.getScenario(); Assert.assertNotNull(s.getTransitSchedule()); Assert.assertEquals(4, s.getTransitSchedule().getFacilities().size()); Assert.assertEquals(1, s.getTransitSchedule().getTransitLines().size()); }
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(3); 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); StrategySettings strategySettingsR = new StrategySettings(Id.create("2", StrategySettings.class)); strategySettingsR.setStrategyName("ReRoute"); strategySettingsR.setWeight(1.0); strategySettingsR.setDisableAfter(5); scg.addStrategySettings(strategySettingsR); // 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); EmissionControlerListener ecl = new EmissionControlerListener(controler); System.out.println( "network at run - no of links " + controler.getScenario().getNetwork().getLinks().size()); controler.addControlerListener(ecl); controler.setScoringFunctionFactory( new ResponsibilityScoringFunctionFactory(ecl, controler.getScenario())); EmissionModule emissionModule = ecl.emissionModule; EmissionCostModule emissionCostModule = new EmissionCostModule(1.0); // add travel disutility final TravelDisutilityFactory travelCostCalculatorFactory = new ResDisFactory(ecl, emissionModule, emissionCostModule, config.planCalcScore()); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bindCarTravelDisutilityFactory().toInstance(travelCostCalculatorFactory); } }); 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 final QuadTree<PersonPrimaryActivity> createPersonPrimaryActivityQuadTree( Controler controler) { int i; double minx = (1.0D / 0.0D); double miny = (1.0D / 0.0D); double maxx = (-1.0D / 0.0D); double maxy = (-1.0D / 0.0D); for (ActivityFacility f : controler.getScenario().getActivityFacilities().getFacilities().values()) { if (f.getCoord().getX() < minx) minx = f.getCoord().getX(); if (f.getCoord().getY() < miny) miny = f.getCoord().getY(); if (f.getCoord().getX() > maxx) maxx = f.getCoord().getX(); if (f.getCoord().getY() <= maxy) continue; maxy = f.getCoord().getY(); } minx -= 1.0D; miny -= 1.0D; maxx += 1.0D; maxy += 1.0D; QuadTree<PersonPrimaryActivity> personPrimaryActivityQuadTree = new QuadTree<PersonPrimaryActivity>(minx, miny, maxx, maxy); i = 0; for (Person p : controler.getScenario().getPopulation().getPersons().values()) { int primaryActivityCount = 0; boolean hasHome = false; boolean hasWork = false; boolean hasEducation = false; // boolean hasShop = false; if (p.getSelectedPlan().getPlanElements().toString().contains("type=shopgrocery")) { for (PlanElement pe : p.getSelectedPlan().getPlanElements()) { if (pe instanceof Activity) { Coord c; Id<Link> activityLink; int ppaId; PersonPrimaryActivity ppa; Activity act = (Activity) pe; if (act.getType().equals("home")) { if (!(hasHome)) { c = ((ActivityFacility) controler .getScenario() .getActivityFacilities() .getFacilities() .get(act.getFacilityId())) .getCoord(); activityLink = (NetworkUtils.getNearestLink( ((NetworkImpl) controler.getScenario().getNetwork()), act.getCoord())) .getId(); // activityLink = // (IdImpl)((ActivityFacility)controler.getFacilities().getFacilities().get(act.getFacilityId())).getLinkId(); ppaId = Integer.parseInt(p.getId().toString()) * 10 + primaryActivityCount; ppa = new PersonPrimaryActivity(act.getType(), ppaId, p.getId(), activityLink); personPrimaryActivityQuadTree.put(c.getX(), c.getY(), ppa); hasHome = true; ++primaryActivityCount; } } else if (act.getType().equals("work")) { if (!(hasWork)) { c = ((ActivityFacility) controler .getScenario() .getActivityFacilities() .getFacilities() .get(act.getFacilityId())) .getCoord(); activityLink = ((ActivityFacility) controler .getScenario() .getActivityFacilities() .getFacilities() .get(act.getFacilityId())) .getLinkId(); ppaId = Integer.parseInt(p.getId().toString()) * 10 + primaryActivityCount; ppa = new PersonPrimaryActivity(act.getType(), ppaId, p.getId(), activityLink); personPrimaryActivityQuadTree.put(c.getX(), c.getY(), ppa); hasWork = true; ++primaryActivityCount; } } else { if ((!(act.getType().equals("education"))) || (hasEducation)) continue; c = ((ActivityFacility) controler .getScenario() .getActivityFacilities() .getFacilities() .get(act.getFacilityId())) .getCoord(); activityLink = ((ActivityFacility) controler .getScenario() .getActivityFacilities() .getFacilities() .get(act.getFacilityId())) .getLinkId(); log.info("Act Link " + activityLink); ppaId = Integer.parseInt(p.getId().toString()) * 10 + primaryActivityCount; ppa = new PersonPrimaryActivity(act.getType(), ppaId, p.getId(), activityLink); personPrimaryActivityQuadTree.put(c.getX(), c.getY(), ppa); hasEducation = true; ++primaryActivityCount; } } } i += primaryActivityCount; } // log.info("Global Primary activity count = " + i); } return personPrimaryActivityQuadTree; }
// test if a delayed arrival at the last activity results in the right monetary amount @Test public final void test2() { String configFile = testUtils.getPackageInputDirectory() + "AdvancedMarginalCongestionPricingTest/config2.xml"; Config config = ConfigUtils.loadConfig(configFile); config.plansCalcRoute().setInsertingAccessEgressWalk(false); final Scenario scenario = ScenarioUtils.loadScenario(config); Controler controler = new Controler(scenario); EventsManager events = controler.getEvents(); final List<CongestionEvent> congestionEvents = new ArrayList<CongestionEvent>(); final List<PersonMoneyEvent> moneyEvents = new ArrayList<PersonMoneyEvent>(); events.addHandler( new CongestionEventHandler() { @Override public void reset(int iteration) {} @Override public void handleEvent(CongestionEvent event) { congestionEvents.add(event); } }); events.addHandler( new PersonMoneyEventHandler() { @Override public void reset(int iteration) {} @Override public void handleEvent(PersonMoneyEvent event) { moneyEvents.add(event); } }); final TollHandler tollHandler = new TollHandler(controler.getScenario()); final TollDisutilityCalculatorFactory tollDisutilityCalculatorFactory = new TollDisutilityCalculatorFactory(tollHandler, controler.getConfig().planCalcScore()); controler.addOverridingModule( new AbstractModule() { @Override public void install() { addControlerListenerBinding() .toProvider( new Provider<ControlerListener>() { @Inject Scenario scenario; @Inject EventsManager eventsManager; @Override public ControlerListener get() { return new AdvancedMarginalCongestionPricingContolerListener( scenario, tollHandler, new CongestionHandlerImplV3(eventsManager, (MutableScenario) scenario)); } }); bindCarTravelDisutilityFactory().toInstance(tollDisutilityCalculatorFactory); } }); controler.addOverridingModule(new OTFVisFileWriterModule()); controler .getConfig() .controler() .setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles); controler.run(); // test if there is only one congestion event and only one money event Assert.assertEquals("Wrong number of congestion events.", 1, congestionEvents.size()); Assert.assertEquals("Wrong number of money events.", 1, moneyEvents.size()); // test if the delay is 2 seconds double delay = congestionEvents.get(0).getDelay(); Assert.assertEquals("Wrong delay.", 2.0, delay, MatsimTestUtils.EPSILON); double amountFromEvent = moneyEvents.get(0).getAmount(); double tripDelayDisutility = delay / 3600. * controler .getConfig() .planCalcScore() .getModes() .get(TransportMode.car) .getMarginalUtilityOfTraveling() * (-1); // home duration morning: 28800. // home duration evening with delay: (24 * 3600.) - 57705. // home duration evening without delay: (24 * 3600.) - 57703. // with delay --> 80.581739442040600 // without delay --> 80.584243964094500 double activityDelayDisutility = 80.584243964094500 - 80.581739442040600; double amount = (-1) * (activityDelayDisutility + tripDelayDisutility) / controler.getConfig().planCalcScore().getMarginalUtilityOfMoney(); Assert.assertEquals("Wrong amount.", amount, amountFromEvent, MatsimTestUtils.EPSILON); }
// test if the right number of money events are thrown @Test public final void test4() { String configFile = testUtils.getPackageInputDirectory() + "AdvancedMarginalCongestionPricingTest/config4.xml"; Config config = ConfigUtils.loadConfig(configFile); config.plansCalcRoute().setInsertingAccessEgressWalk(false); final Scenario scenario = ScenarioUtils.loadScenario(config); Controler controler = new Controler(scenario); EventsManager events = controler.getEvents(); final List<CongestionEvent> congestionEvents = new ArrayList<CongestionEvent>(); final List<PersonMoneyEvent> moneyEvents = new ArrayList<PersonMoneyEvent>(); events.addHandler( new CongestionEventHandler() { @Override public void reset(int iteration) {} @Override public void handleEvent(CongestionEvent event) { congestionEvents.add(event); } }); events.addHandler( new PersonMoneyEventHandler() { @Override public void reset(int iteration) {} @Override public void handleEvent(PersonMoneyEvent event) { moneyEvents.add(event); } }); final TollHandler tollHandler = new TollHandler(controler.getScenario()); final TollDisutilityCalculatorFactory tollDisutilityCalculatorFactory = new TollDisutilityCalculatorFactory(tollHandler, controler.getConfig().planCalcScore()); controler.addOverridingModule( new AbstractModule() { @Override public void install() { addControlerListenerBinding() .toProvider( new Provider<ControlerListener>() { @Inject Scenario scenario; @Inject EventsManager eventsManager; @Override public ControlerListener get() { return new AdvancedMarginalCongestionPricingContolerListener( scenario, tollHandler, new CongestionHandlerImplV3(eventsManager, (MutableScenario) scenario)); } }); bindCarTravelDisutilityFactory().toInstance(tollDisutilityCalculatorFactory); } }); controler.addOverridingModule(new OTFVisFileWriterModule()); controler .getConfig() .controler() .setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles); controler.run(); // test if there are three congestion events and three money events Assert.assertEquals("Wrong number of congestion events.", 3, congestionEvents.size()); Assert.assertEquals("Wrong number of money events.", 3, moneyEvents.size()); }
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) { 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(); }
public void run(ParkControl parkControl) { Controler controler = parkControl.controller; if (!parkControl.evUsage) { System.out.println("Iteration end stats does not work without EV usage"); return; } LinkedList<Id> totEVDriving = new LinkedList<Id>(); LinkedList<Id> totNEVDriving = new LinkedList<Id>(); LinkedList<Id> totEVNotDriving = new LinkedList<Id>(); LinkedList<Id> totNEVNotDriving = new LinkedList<Id>(); LinkedList<Id> secEVDriving = new LinkedList<Id>(); LinkedList<Id> secNEVDriving = new LinkedList<Id>(); LinkedList<Id> secEVNotDriving = new LinkedList<Id>(); LinkedList<Id> secNEVNotDriving = new LinkedList<Id>(); LinkedList<Id> workEVDriving = new LinkedList<Id>(); LinkedList<Id> workNEVDriving = new LinkedList<Id>(); LinkedList<Id> workEVNotDriving = new LinkedList<Id>(); LinkedList<Id> workNEVNotDriving = new LinkedList<Id>(); LinkedList<Id> totCharged = new LinkedList<Id>(); LinkedList<Id> workCharged = new LinkedList<Id>(); LinkedList<Id> secCharged = new LinkedList<Id>(); LinkedList<Id> totHadToCharge = new LinkedList<Id>(); LinkedList<Id> workHadToCharge = new LinkedList<Id>(); LinkedList<Id> secHadToCharge = new LinkedList<Id>(); LinkedList<Id> totOutOfBattery = new LinkedList<Id>(); LinkedList<Id> workOutOfBattery = new LinkedList<Id>(); LinkedList<Id> secOutOfBattery = new LinkedList<Id>(); LinkedList<Id> totEvNotParked = new LinkedList<Id>(); LinkedList<Id> workEvNotParked = new LinkedList<Id>(); LinkedList<Id> secEvNotParked = new LinkedList<Id>(); LinkedList<Id> totNEvNotParked = new LinkedList<Id>(); LinkedList<Id> workNEvNotParked = new LinkedList<Id>(); LinkedList<Id> secNEvNotParked = new LinkedList<Id>(); LinkedList<Id> totBrookingsEVsDriving = new LinkedList<Id>(); LinkedList<Id> totBrookingsEVsNotDriving = new LinkedList<Id>(); LinkedList<Id> workBrookingsEVsDriving = new LinkedList<Id>(); LinkedList<Id> workBrookingsEVsNotDriving = new LinkedList<Id>(); LinkedList<Id> secBrookingsEVsDriving = new LinkedList<Id>(); LinkedList<Id> secBrookingsEVsNotDriving = new LinkedList<Id>(); LinkedList<Id> totEVParkedAtHome = new LinkedList<Id>(); LinkedList<Id> totNEVParkedAtHome = new LinkedList<Id>(); LinkedList<Id> workEVParkedAtHome = new LinkedList<Id>(); LinkedList<Id> workNEVParkedAtHome = new LinkedList<Id>(); LinkedList<Id> secEVParkedAtHome = new LinkedList<Id>(); LinkedList<Id> secNEVParkedAtHome = new LinkedList<Id>(); VMCharts chart = new VMCharts(); chart.addChart("Util vs Traveldistance"); chart.setAx("Util vs Traveldistance", false); chart.setBox("Util vs Traveldistance", true); chart.setInterval("Util vs Traveldistance", 10000); chart.addSeries("Util vs Traveldistance", "NEV"); chart.addSeries("Util vs Traveldistance", "EV"); chart.addChart("Util vs Traveldistance EV"); chart.setAx("Util vs Traveldistance EV", false); chart.setBox("Util vs Traveldistance EV", true); chart.setInterval("Util vs Traveldistance EV", 10000); chart.addSeries("Util vs Traveldistance EV", "EV"); EVControl evControl = parkControl.evControl; for (Person person : controler.getScenario().getPopulation().getPersons().values()) { PersonImpl personImpl = (PersonImpl) person; double soc; boolean notParked = false; boolean parkedAtHome = false; PlanImpl planImpl = (PlanImpl) personImpl.getSelectedPlan(); LegImpl legImpl = (LegImpl) planImpl.getNextLeg(planImpl.getFirstActivity()); Id id = person.getId(); LinkedList<ParkingSpot> selectedParkings = parkings.get(id); Activity firstAct = planImpl.getFirstActivity(); String actType = planImpl.getNextActivity(legImpl).getType(); ParkingSpot firstSelectedSpot; ParkingSpot homeSpot; String facId = firstAct.getFacilityId().toString(); if (parkings.containsKey(id)) { firstSelectedSpot = selectedParkings.getFirst(); homeSpot = selectedParkings.getLast(); } else { firstSelectedSpot = new ParkingSpot(); homeSpot = new ParkingSpot(); notParked = true; } if (homeSpot != null && homeSpot.parking != null && homeSpot.parking.facilityActType != null) { if (homeSpot.parking.facilityActType.equals("home")) { parkedAtHome = true; } } if (evControl.hasEV(person.getId()) && firstSelectedSpot != null) { soc = evControl.stateOfChargePercentage(person.getId()); } else soc = -150; double score = personImpl.getSelectedPlan().getScore(); double distance = getPlanDistance(planImpl); if (score < 0) { score = -1; } if (evControl.hasEV(person.getId())) { VMCharts.addValues("Util vs Traveldistance", "EV", distance, score); VMCharts.addValues("Util vs Traveldistance EV", "EV", distance, score); } else { VMCharts.addValues("Util vs Traveldistance", "NEV", distance, score); } if (evControl.hasEV(person.getId())) { if (legImpl.getMode().equals("car")) { totEVDriving.add(id); if (facId.contains("B")) { totBrookingsEVsDriving.add(id); } if (firstSelectedSpot.charge) { totCharged.add(id); } if (soc < 50) { totHadToCharge.add(id); } if (soc < 0) { totOutOfBattery.add(id); } if (notParked) { totEvNotParked.add(id); } if (parkedAtHome) { totEVParkedAtHome.add(id); } if (actType.equals("work")) { workEVDriving.add(id); if (facId.contains("B")) { workBrookingsEVsDriving.add(id); } if (firstSelectedSpot.charge) { workCharged.add(id); } if (soc < 50) { workHadToCharge.add(id); } if (soc < 0) { workOutOfBattery.add(id); } if (notParked) { workEvNotParked.add(id); } if (parkedAtHome) { workEVParkedAtHome.add(id); } } else if (actType.equals("secondary")) { secEVDriving.add(id); if (facId.contains("B")) { secBrookingsEVsDriving.add(id); } if (firstSelectedSpot.charge) { secCharged.add(id); } if (soc < 50) { secHadToCharge.add(id); } if (soc < 0) { secOutOfBattery.add(id); } if (notParked) { secEvNotParked.add(id); } if (parkedAtHome) { secEVParkedAtHome.add(id); } } } else { totEVNotDriving.add(id); if (facId.contains("B")) { totBrookingsEVsNotDriving.add(id); } if (actType.equals("work")) { workEVNotDriving.add(id); if (facId.contains("B")) { workBrookingsEVsNotDriving.add(id); } } else if (actType.equals("secondary")) { secEVNotDriving.add(id); if (facId.contains("B")) { secBrookingsEVsNotDriving.add(id); } } } } else { if (legImpl.getMode().equals("car")) { totNEVDriving.add(id); if (notParked) { totNEvNotParked.add(id); } if (parkedAtHome) { totNEVParkedAtHome.add(id); } if (actType.equals("work")) { workNEVDriving.add(id); if (notParked) { workNEvNotParked.add(id); } if (parkedAtHome) { workNEVParkedAtHome.add(id); } } else if (actType.equals("secondary")) { secNEVDriving.add(id); if (notParked) { secNEvNotParked.add(id); } if (parkedAtHome) { secNEVParkedAtHome.add(id); } } } else { totNEVNotDriving.add(id); if (actType.equals("work")) { workNEVNotDriving.add(id); } else if (actType.equals("secondary")) { secNEVNotDriving.add(id); } } } } chart.addChart("Parkinglot occupancy"); chart.setAx("Parkinglot occupancy", false); chart.setAxis("Parkinglot occupancy", "time", "occupancy [0..1]"); chart.setLine("Parkinglot occupancy", true); for (Parking parking : parkControl.parkingMap.getParkings()) { if (parking.ocupancyStats == true) { chart.addSeries("Parkinglot occupancy", Integer.toString(parking.id) + "EV"); chart.addSeries("Parkinglot occupancy", Integer.toString(parking.id) + "NEV"); for (Double[] values : parking.occupancyList) { VMCharts.addValues( "Parkinglot occupancy", Integer.toString(parking.id) + "EV", values[0], values[1]); VMCharts.addValues( "Parkinglot occupancy", Integer.toString(parking.id) + "NEV", values[0], values[2]); } } } CSVWriter writer = new CSVWriter( controler.getConfig().getModule("controler").getValue("outputDirectory") + "/parkhistory/parkstats_" + controler.getIterationNumber()); writer.writeLine("Total: "); writer.writeLine( "EVs in use: " + totEVDriving.size() + " (" + totBrookingsEVsDriving.size() + " Brookings)"); writer.writeLine( "EVs not in use: " + totEVNotDriving.size() + " (" + totBrookingsEVsNotDriving.size() + " Brookings)"); writer.writeLine("EVs not parked: " + totEvNotParked.size()); writer.writeLine("EVs parked at home: " + totEVParkedAtHome.size()); writer.writeLine("charged: " + totCharged.size()); writer.writeLine("had to charge: " + totHadToCharge.size()); writer.writeLine("out of battery: " + totOutOfBattery.size()); writer.writeLine("NEVs in use: " + totNEVDriving.size()); writer.writeLine("NEVs not in use: " + totNEVNotDriving.size()); writer.writeLine("NEVs not parked: " + totNEvNotParked.size()); writer.writeLine("NEVs parked at home: " + totNEVParkedAtHome.size()); writer.writeLine(""); writer.writeLine("Work: "); writer.writeLine( "EVs in use: " + workEVDriving.size() + " (" + workBrookingsEVsDriving.size() + " Brookings)"); writer.writeLine( "EVs not in use: " + workEVNotDriving.size() + " (" + workBrookingsEVsNotDriving.size() + " Brookings)"); writer.writeLine("EVs not parked: " + workEvNotParked.size()); writer.writeLine("EVs parked at home: " + workEVParkedAtHome.size()); writer.writeLine("charged: " + workCharged.size()); writer.writeLine("had to charge: " + workHadToCharge.size()); writer.writeLine("out of battery: " + workOutOfBattery.size()); writer.writeLine("NEVs in use: " + workNEVDriving.size()); writer.writeLine("NEVs not in use: " + workNEVNotDriving.size()); writer.writeLine("NEVs not parked: " + workNEvNotParked.size()); writer.writeLine("NEVs parked at home: " + workNEVParkedAtHome.size()); writer.writeLine(""); writer.writeLine("Secondary: "); writer.writeLine( "EVs in use: " + secEVDriving.size() + " (" + secBrookingsEVsDriving.size() + " Brookings)"); writer.writeLine( "EVs not in use: " + secEVNotDriving.size() + " (" + secBrookingsEVsNotDriving.size() + " Brookings)"); writer.writeLine("EVs not parked: " + secEvNotParked.size()); writer.writeLine("EVs parked at home: " + secEVParkedAtHome.size()); writer.writeLine("charged: " + secCharged.size()); writer.writeLine("had to charge: " + secHadToCharge.size()); writer.writeLine("out of battery: " + secOutOfBattery.size()); writer.writeLine("NEVs in use: " + secNEVDriving.size()); writer.writeLine("NEVs not in use: " + secNEVNotDriving.size()); writer.writeLine("NEVs not parked: " + secNEvNotParked.size()); writer.writeLine("NEVs parked at home: " + secNEVParkedAtHome.size()); writer.writeLine(""); writer.close(); }
/* * 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 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(); }