public static void main(String[] args) {
    String path = "./ihop2/matsim-input/config.xml";
    Config config = ConfigUtils.loadConfig(path);
    final Scenario scenario = ScenarioUtils.loadScenario(config);
    Controler controler = new Controler(scenario);
    double samplesize = config.qsim().getStorageCapFactor();
    String outputRoot = "./ihop2/matsim-output/output";
    //		LogToOutputSaver.setOutputDirectory(outputRoot);

    double departureTime = 8. * 60 * 60;

    // Changing vehicle and road capacity according to sample size
    PTCapacityAdjusmentPerSample capadjuster = new PTCapacityAdjusmentPerSample();
    capadjuster.adjustStoarageAndFlowCapacity(scenario, samplesize);

    //		controler.getConfig().qsim().setInflowConstraint(InflowConstraint.maxflowFromFdiag);
    //		controler.getConfig().qsim().setTrafficDynamics(TrafficDynamics.withHoles);

    Network network = scenario.getNetwork();
    TransitSchedule schedule = scenario.getTransitSchedule();
    new CreatePseudoNetwork(schedule, network, "tr_").createNetwork();
    //		NetworkWriter networkWriter =  new NetworkWriter(network);
    //		networkWriter.write("/home/saleem/input/PseudoNetwork.xml");
    //		networkWriter.write("H:\\Matsim\\Stockholm
    // Scenario\\teleportation\\input\\PseudoNetwork.xml");
    //		controler.addControlerListener(new FareControlListener());
    //		controler.setScoringFunctionFactory(new ScoringFunctionFactory() {
    //			@Inject CharyparNagelScoringParametersForPerson parameters;
    //			@Override
    //			public ScoringFunction createNewScoringFunction(Person person) {
    //				final CharyparNagelScoringParameters params = parameters.getScoringParameters( person );
    //				SumScoringFunction sumScoringFunction = new SumScoringFunction();
    //				sumScoringFunction.addScoringFunction(new CharyparNagelActivityScoring( params ));
    //				sumScoringFunction.addScoringFunction(new StockholmLegScoring( person, params ,
    // scenario.getNetwork()));
    //				sumScoringFunction.addScoringFunction(new StockholmMoneyScoring(person, params ));
    //				sumScoringFunction.addScoringFunction(new CharyparNagelAgentStuckScoring( params ));
    //				return sumScoringFunction;			}
    //		});
    //		controler.addControlerListener(new FareControlListener());
    controler.run();

    TransitRouter trouter =
        controler.getInjector().getBinding(TransitRouter.class).getProvider().get();
    createStopsFile(scenario.getTransitSchedule().getFacilities(), outputRoot + "ptStops.csv", ",");
    //
    //		// The locationFacilitiesMap is passed twice: Once for origins and once for destinations.
    //		// In other uses the two maps may be different -- thus the duplication here.
    new ThreadedMatrixCreator(
        scenario,
        scenario.getTransitSchedule().getFacilities(),
        scenario.getTransitSchedule().getFacilities(),
        departureTime,
        outputRoot,
        " ",
        1,
        trouter);
  }