示例#1
0
  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;
  }
示例#2
0
  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;
  }
示例#3
0
  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);
  }
示例#5
0
  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;
    }
  }
示例#8
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
  }
示例#10
0
  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);
      }
    }
示例#12
0
  /*
   * 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());
  }
示例#15
0
  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");
  }
示例#17
0
  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());
  }
示例#20
0
 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();
  }
示例#22
0
  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();
  }
示例#23
0
  /*
   * 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));
  }
示例#24
0
  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();
  }