/** * Used this routine for MeisterEtAl_Heureka_2008 paper, plot of number of deps, arrs by activity * type to visualize the time distribution from microcensus. */ public static void analyseInitialTimes(Config config) { MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(config); // initialize scenario with events from a given events file // - network logger.info("Reading network xml file..."); new MatsimNetworkReader(scenario).readFile(scenario.getConfig().network().getInputFile()); logger.info("Reading network xml file...done."); // - population PersonAlgorithm pa = new PersonAnalyseTimesByActivityType(TIME_BIN_SIZE); ArrayList<PersonAlgorithm> plansAlgos = new ArrayList<PersonAlgorithm>(); plansAlgos.add(pa); PopulationImpl matsimAgentPopulation = (PopulationImpl) scenario.getPopulation(); matsimAgentPopulation.setIsStreaming(true); PopulationReader plansReader = new MatsimPopulationReader(scenario); plansReader.readFile(scenario.getConfig().plans().getInputFile()); matsimAgentPopulation.printPlansCount(); int[][] numDeps = ((PersonAnalyseTimesByActivityType) pa).getNumDeps(); MyRuns.writeAnArray(numDeps, "output/deptimes.txt"); int[][] numArrs = ((PersonAnalyseTimesByActivityType) pa).getNumArrs(); MyRuns.writeAnArray(numArrs, "output/arrtimes.txt"); int[][] numTraveling = ((PersonAnalyseTimesByActivityType) pa).getNumTraveling(); MyRuns.writeAnArray(numTraveling, "output/traveling.txt"); }
@Test public void testOutsideTollTime() { Config config = matsimTestUtils.loadConfig(null); MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(config); Fixture.createNetwork2(scenario); // a basic toll where only the morning hours are tolled RoadPricingSchemeImpl toll = new RoadPricingSchemeImpl(); toll.setType("area"); toll.addLink(Id.createLinkId("5")); toll.addLink(Id.createLinkId("11")); toll.addCost(8 * 3600, 10 * 3600, 1.0); // high costs! Fixture.createPopulation2(scenario); Population population = scenario.getPopulation(); runOnAll(testee(scenario, toll), population); Id id1 = Id.createPersonId("1"); LegImpl leg1 = getLeg1(population, id1); LegImpl leg2 = getLeg3(population, id1); Fixture.compareRoutes( "2 5 6", (NetworkRoute) leg1 .getRoute()); // agent should take shortest route, as tolls are not active at that // time Fixture.compareRoutes("8 11 12", (NetworkRoute) leg2.getRoute()); }
public static void main(String[] args) { MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); MatsimReader populationReader = new PopulationReader(scenario); MatsimNetworkReader networkReader = new MatsimNetworkReader(scenario.getNetwork()); networkReader.readFile(args[1]); populationReader.readFile(args[2]); ObjectAttributes bla = new ObjectAttributes(); new ObjectAttributesXmlReader(bla).readFile(args[0]); for (Person p : scenario.getPopulation().getPersons().values()) { String act = "home"; if (bla.getAttribute(p.getId().toString(), "earliestEndTime_leisure") != null) act = act + ",leisure"; // if (bla.getAttribute(p.getId().toString(), "earliestEndTime_work") != null) // act = act + ",work"; if (bla.getAttribute(p.getId().toString(), "earliestEndTime_shop") != null) act = act + ",shop"; // if (bla.getAttribute(p.getId().toString(), "earliestEndTime_education") != null) // act = act + ",education"; bla.putAttribute(p.getId().toString(), "activities", act); } ObjectAttributesXmlWriter betaWriter = new ObjectAttributesXmlWriter(bla); betaWriter.writeFile(args[3]); }
public static void main(String[] args) { MutableScenario s = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); s.getConfig().transit().setUseTransit(true); s.getConfig().scenario().setUseVehicles(true); Vehicles v = s.getTransitVehicles(); TransitSchedule ts = s.getTransitSchedule(); PopulationImpl p = (PopulationImpl) s.getPopulation(); new MatsimNetworkReader(s).readFile(NETWORK); new VehicleReaderV1(v).readFile(VEHICLES); new TransitScheduleReader(s).readFile(SCHEDULE); log.info("build transit router..."); TransitRouterConfig tRConfig = new TransitRouterConfig( s.getConfig().planCalcScore(), s.getConfig().plansCalcRoute(), s.getConfig().transitRouter(), s.getConfig().vspExperimental()); TransitRouterImpl router = new TransitRouterImpl(tRConfig, ts); PtRouter ptR = new PtRouter(router); p.setIsStreaming(true); p.addAlgorithm(ptR); log.info("start processing persons..."); new MatsimPopulationReader(s).readFile(PLANS); ptR.close(); }
public static Population initMatsimAgentPopulation( final String inputFilename, final boolean isStreaming, final ArrayList<PersonAlgorithm> algos, MutableScenario scenario) { PopulationImpl population = (PopulationImpl) scenario.getPopulation(); System.out.println(" reading plans xml file... "); population.setIsStreaming(isStreaming); if (isStreaming) { // add plans algos for streaming if (algos != null) { for (PersonAlgorithm algo : algos) { population.addAlgorithm(algo); } } } PopulationReader plansReader = new MatsimPopulationReader(scenario); plansReader.readFile(inputFilename); population.printPlansCount(); System.out.println(" done."); return population; }
public void analyzeModeChainFeasibility(Config config) { MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); // initialize scenario with events from a given events file // - network logger.info("Reading network xml file..."); Network network = scenario.getNetwork(); new MatsimNetworkReader(scenario).readFile(config.network().getInputFile()); logger.info("Reading network xml file...done."); // - facilities logger.info("Reading facilities xml file..."); ActivityFacilities facilities = scenario.getActivityFacilities(); new MatsimFacilitiesReader(scenario).parse(config.facilities().getInputFile()); logger.info("Reading facilities xml file..."); // - population PersonAnalyzeModeChainFeasibility pa = new PersonAnalyzeModeChainFeasibility(facilities, network); ArrayList<PersonAlgorithm> plansAlgos = new ArrayList<PersonAlgorithm>(); plansAlgos.add(pa); PopulationImpl matsimAgentPopulation = (PopulationImpl) scenario.getPopulation(); matsimAgentPopulation.setIsStreaming(true); matsimAgentPopulation.addAlgorithm(pa); PopulationReader plansReader = new MatsimPopulationReader(scenario); plansReader.readFile(config.plans().getInputFile()); logger.info("Number of selected plans which are infeasible: " + pa.getNumInfeasiblePlans()); }
public static void main(String[] args) { String dataPath = "/Volumes/DATA 1 (WD 2 TB)/SimMethanaOutput_120215/"; String populationFile = "/Volumes/DATA 1 (WD 2 TB)/SimMethanaOutput_120215/w8-18_homo/output_plans.xml.gz"; String individualSelectedScoreFile = "/Volumes/DATA 1 (WD 2 TB)/SimMethanaOutput_120215/w8-18_homo/individualSelectedBenefits"; File directory = new File(dataPath); File[] fList = directory.listFiles(); for (File file : fList) { if (file.isDirectory()) { HashMap<String, String> scoreMap = new HashMap<String, String>(); MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); System.out.println(file.getAbsolutePath()); populationFile = file.getAbsolutePath() + "/output_plans.xml.gz"; individualSelectedScoreFile = file.getAbsolutePath() + "/individualSelectedBenefits.csv"; new PopulationReaderMatsimV5(scenario).readFile(populationFile); System.out.println(" Population size: " + scenario.getPopulation().getPersons().size()); // Read selected plan score System.out.println(" Reading population from: " + populationFile); for (Person person : scenario.getPopulation().getPersons().values()) { scoreMap.put(person.getId().toString(), person.getSelectedPlan().getScore().toString()); } System.out.println(" Map size: " + scoreMap.size()); // Write selected plan scores; System.out.println( " Writting individial selected plan scores to: " + individualSelectedScoreFile); Writer writer = new Writer(); writer.creteFile(individualSelectedScoreFile); for (String personId : scoreMap.keySet()) { writer.writeLine(personId + "," + scoreMap.get(personId)); } writer.close(); } } System.out.println("Done!"); }
public static void main(String[] args) { // TODO Auto-generated method stub MutableScenario scenario1 = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); PopulationReader populationReader1 = new MatsimPopulationReader(scenario1); MatsimNetworkReader networkReader1 = new MatsimNetworkReader(scenario1); networkReader1.readFile(args[0]); populationReader1.readFile(args[1]); MutableScenario scenario2 = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); PopulationReader populationReader2 = new MatsimPopulationReader(scenario2); MatsimNetworkReader networkReader2 = new MatsimNetworkReader(scenario2); networkReader2.readFile(args[0]); populationReader2.readFile(args[2]); int car = 0; int pt = 0; int walk = 0; int bike = 0; for (Person p : scenario2.getPopulation().getPersons().values()) { for (PlanElement pe : scenario1 .getPopulation() .getPersons() .get(p.getId()) .getSelectedPlan() .getPlanElements()) { if (pe instanceof Leg) { if (((Leg) pe).getMode().equals("car")) car++; else if (((Leg) pe).getMode().equals("pt")) pt++; else if (((Leg) pe).getMode().equals("walk")) walk++; else if (((Leg) pe).getMode().equals("bike")) bike++; } } } System.out.println(car + " " + pt + " " + bike + " " + walk); }
public void run(String plansFilePath, String networkFilePath) { MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); PopulationReader populationReader = new MatsimPopulationReader(scenario); MatsimNetworkReader networkReader = new MatsimNetworkReader(scenario.getNetwork()); networkReader.readFile(networkFilePath); // new FacilitiesReaderMatsimV1(scenario).readFile(facilitiesfilePath); populationReader.readFile(plansFilePath); int size = scenario.getPopulation().getPersons().values().size(); Object[] arr = scenario.getPopulation().getPersons().values().toArray(); for (int i = 1; i < size; i++) { if (i % 4 != 0) { scenario.getPopulation().getPersons().remove(((Person) arr[i]).getId()); } } new PopulationWriter(scenario.getPopulation(), scenario.getNetwork()) .writeFileV4("./plans_25perc.xml.gz"); }
/** Tests a few cases where the router can decide if it is better to pay the toll or not. */ @Test public void testBestAlternatives() { Config config = matsimTestUtils.loadConfig(null); MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(config); Fixture.createNetwork2(scenario); // a basic toll where only the morning hours are tolled RoadPricingSchemeImpl toll = new RoadPricingSchemeImpl(); toll.setType("area"); toll.addLink(Id.createLinkId("5")); toll.addLink(Id.createLinkId("11")); Cost morningCost = toll.addCost(6 * 3600, 10 * 3600, 0.12); /* Start with a rather low toll. The toll is also so low, because we only * have small network with short links: the cost to travel across one link * is: 20s * (-6 EUR / h) = 20 * (-6) / 3600 = 0.03333 */ Fixture.createPopulation2(scenario); Population population = scenario.getPopulation(); Id id1 = Id.createPersonId("1"); // case 1: toll only in morning, it is cheaper to drive around runOnAll(testee(scenario, toll), population); Fixture.compareRoutes("2 3 4 6", (NetworkRoute) getLeg1(population, id1).getRoute()); Fixture.compareRoutes("8 11 12", (NetworkRoute) getLeg3(population, id1).getRoute()); // case 2: now add a toll in the afternoon too, so it is cheaper to pay the toll Cost afternoonCost = toll.addCost(14 * 3600, 18 * 3600, 0.12); runOnAll(testee(scenario, toll), population); Fixture.compareRoutes("2 5 6", (NetworkRoute) getLeg1(population, id1).getRoute()); Fixture.compareRoutes("8 11 12", (NetworkRoute) getLeg3(population, id1).getRoute()); // case 3: change the second leg to a non-car mode, than it should be the same as case 1 String oldMode = getLeg3(population, id1).getMode(); getLeg3(population, id1).setMode(TransportMode.pt); runOnAll(testee(scenario, toll), population); Fixture.compareRoutes("2 3 4 6", (NetworkRoute) getLeg1(population, id1).getRoute()); // and change the mode back getLeg3(population, id1).setMode(oldMode); // case 4: now remove the costs and add them again, but with a higher amount toll.removeCost(morningCost); toll.removeCost(afternoonCost); toll.addCost(6 * 3600, 10 * 3600, 0.7); toll.addCost(14 * 3600, 18 * 3600, 0.7); // the agent should now decide to drive around runOnAll(testee(scenario, toll), population); Fixture.compareRoutes("2 3 4 6", (NetworkRoute) getLeg1(population, id1).getRoute()); }
public static void main(String[] args) throws IOException { // TODO Auto-generated method stub MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); MatsimReader populationReader = new PopulationReader(scenario); MatsimNetworkReader networkReader = new MatsimNetworkReader(scenario.getNetwork()); networkReader.readFile(args[1]); populationReader.readFile(args[0]); final BufferedWriter outLinkrb = IOUtils.getBufferedWriter(args[2]); final BufferedWriter outLinkff = IOUtils.getBufferedWriter(args[3]); for (Person p : scenario.getPopulation().getPersons().values()) { boolean rb = false; boolean ff = false; Person pImpl = p; Plan plan = p.getSelectedPlan(); for (PlanElement pe : plan.getPlanElements()) { if (pe instanceof Leg) { if (((Leg) pe).getMode().equals("cs_fix_gas") && !rb) { outLinkrb.write(p.getId().toString() + " "); outLinkrb.write(Integer.toString(PersonUtils.getAge(pImpl)) + " "); outLinkrb.write(PersonUtils.getSex(pImpl) + " "); outLinkrb.write(PersonUtils.getCarAvail(pImpl)); outLinkrb.newLine(); rb = true; } else if (((Leg) pe).getMode().equals("cs_flex_gas") && !ff) { outLinkff.write(p.getId().toString() + " "); outLinkff.write(Integer.toString(PersonUtils.getAge(pImpl)) + " "); outLinkff.write(PersonUtils.getSex(pImpl) + " "); outLinkff.write(PersonUtils.getCarAvail(pImpl)); outLinkff.newLine(); ff = true; } } } } outLinkrb.flush(); outLinkrb.close(); outLinkff.flush(); outLinkff.close(); }
void moveInitDemandToDifferentNetwork(final String[] args) { // read ivtch demand MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); Config config = scenario.getConfig(); MeisterkConfigGroup meisterkConfigGroup = new MeisterkConfigGroup(); config.addModule(meisterkConfigGroup); ConfigReader reader = new ConfigReader(config); reader.readFile(args[0]); MatsimRandom.reset(config.global().getRandomSeed()); ScenarioUtils.loadScenario(scenario); Population population = scenario.getPopulation(); Network network = scenario.getNetwork(); // remove links and routes PersonRemoveLinkAndRoute personRemoveLinkAndRoute = new PersonRemoveLinkAndRoute(); personRemoveLinkAndRoute.run(population); // switch to new network in scenario // this is what I found ... // ScenarioImpl scenario2 = (ScenarioImpl) // ScenarioUtils.createScenario(ConfigUtils.createConfig()); // new MatsimNetworkReader(scenario2).parse(config.getParam(MeisterkConfigGroup.GROUP_NAME, // "inputSecondNetworkFile")); // scenario.setNetwork(scenario2.getNetwork()); // ... but I think we can just give the existing scenario to the reader, so I am changing this. // There is so much commented out in this // code that it is probably no longer used anyways. kai, sep'15 new MatsimNetworkReader(scenario) .parse(config.getParam(MeisterkConfigGroup.GROUP_NAME, "inputSecondNetworkFile")); // run XY2Links XY2Links xY2Links = new XY2Links(); // write out new initial demand // new PopulationWriter(population, // network).write(null);//scenario.getConfig().plans().getOutputFile()); }
/** * Tests cases where the agent must pay the toll because one of its activities is on a tolled link */ @Test public void testTolledActLink() { Config config = matsimTestUtils.loadConfig(null); MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(config); Fixture.createNetwork2(scenario); // a basic toll where only the morning hours are tolled RoadPricingSchemeImpl toll = new RoadPricingSchemeImpl(); toll.setType("area"); Id.createLinkId("7"); toll.addCost(6 * 3600, 10 * 3600, 0.06); Fixture.createPopulation2(scenario); Population population = scenario.getPopulation(); runOnAll(testee(scenario, toll), population); Id id1 = Id.createPersonId("1"); Fixture.compareRoutes( "2 5 6", (NetworkRoute) getLeg1(population, id1).getRoute()); // agent should take shortest route Fixture.compareRoutes("8 11 12", (NetworkRoute) getLeg3(population, id1).getRoute()); }
/** @param args */ public static void main(String[] args) { String basePath = "H:/data/experiments/ARTEMIS/output/run2/"; String plansFile = basePath + "output_plans.xml.gz"; String networkFile = basePath + "output_network.xml.gz"; String facilititiesPath = basePath + "output_facilities.xml.gz"; MutableScenario scenario = (MutableScenario) GeneralLib.readScenario(plansFile, networkFile, facilititiesPath); int nuberTripsWorkRelated = 0; int numberOfTripsShopAndLeisureRelated = 0; Population population = scenario.getPopulation(); for (Person person : population.getPersons().values()) { Plan plan = person.getSelectedPlan(); Activity prevAct = null; Leg prevLeg = null; for (PlanElement pe : plan.getPlanElements()) { if (pe instanceof Activity) { Activity activity = (Activity) pe; if (prevLeg != null && prevLeg.getMode().equalsIgnoreCase("car")) { // a) COMING FROM OC TO C FOR WORK if (!isInsideCordon(prevAct) && isInsideCordon(activity)) { if (equalsActType(activity, "work")) { nuberTripsWorkRelated++; } } // b)LEAVING C FROM WORK TO OC if (isInsideCordon(prevAct) && !isInsideCordon(activity)) { if (equalsActType(prevAct, "work")) { nuberTripsWorkRelated++; } } // c)COMING FROM C TO C FOR WORK if (isInsideCordon(prevAct) && isInsideCordon(activity)) { if (equalsActType(activity, "work")) { nuberTripsWorkRelated++; } } // d) LEAVING C FROM WORK TO C if (isInsideCordon(prevAct) && isInsideCordon(activity)) { if (equalsActType(prevAct, "work")) { nuberTripsWorkRelated++; } } // e) COMING FROM OC TO C FOR ACT (shop/leisure) if (!isInsideCordon(prevAct) && isInsideCordon(activity)) { if (equalsActType(activity, "shop") || equalsActType(activity, "leisure")) { numberOfTripsShopAndLeisureRelated++; } } // f) COMING FROM C TO C FOR ACT if (isInsideCordon(prevAct) && isInsideCordon(activity)) { if (equalsActType(activity, "shop") || equalsActType(activity, "leisure")) { numberOfTripsShopAndLeisureRelated++; } } } prevAct = activity; } if (pe instanceof Leg) { prevLeg = (Leg) pe; } } } System.out.println("nuberTripsWorkRelated:" + nuberTripsWorkRelated); System.out.println("numberOfTripsShopAndLeisureRelated:" + numberOfTripsShopAndLeisureRelated); }
public void run(String plansFilePath, String networkFilePath) throws IOException { populationReader.readFile(plansFilePath); networkReader.readFile(networkFilePath); double distanceCar = 0.0; int countC = 0; double distanceBike = 0.0; int countB = 0; double distanceWalk = 0.0; int countW = 0; double distancePt = 0.0; int countPt = 0; int count = 0; Population pop = scenario.getPopulation(); for (Person p : pop.getPersons().values()) { Leg previousLeg = null; for (PlanElement pe : p.getSelectedPlan().getPlanElements()) { if (pe instanceof Leg) { previousLeg = (Leg) pe; /*if (previousActivity.getType() == "shopgrocery") { if (previousLeg.getMode() == "car") { distanceCar += previousLeg.getTravelTime(); countC++; count++; } else if (previousLeg.getMode() == "bike") { distanceBike += previousLeg.getTravelTime(); countB++; count++; } else if (previousLeg.getMode() == "walk") { distanceWalk += previousLeg.getTravelTime(); countW++; count++; } else if (previousLeg.getMode() == "pt") { distancePt += previousLeg.getTravelTime(); countPt++; count++; } }*/ } else if (pe instanceof Activity) { // if (((Activity) pe).getType().equals( "shopgrocery" )) { if (previousLeg != null) { if (previousLeg.getMode().equals("car")) { distanceCar += previousLeg.getTravelTime(); countC++; count++; } else if (previousLeg.getMode().equals("bike")) { distanceBike += previousLeg.getTravelTime(); countB++; count++; } else if (previousLeg.getMode().equals("walk")) { distanceWalk += previousLeg.getTravelTime(); countW++; count++; } else if (previousLeg.getMode().equals("pt")) { distancePt += previousLeg.getTravelTime(); countPt++; count++; } } } } } System.out.println((distanceCar + distanceBike + distanceWalk + distancePt) / count); System.out.println(distanceCar / (double) countC); System.out.println(distanceBike / (double) countB); System.out.println(distanceWalk / (double) countW); System.out.println(distancePt / (double) countPt); }
public void run(String plansFilePath, String networkFilePath) { MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); MatsimReader populationReader = new PopulationReader(scenario); MatsimNetworkReader networkReader = new MatsimNetworkReader(scenario.getNetwork()); networkReader.readFile(networkFilePath); populationReader.readFile(plansFilePath); int countE = 0; int countW = 0; int countS = 0; int countL = 0; int countH = 0; int count = 0; int work = 0; boolean cs = false; int number = 0; for (Person p : scenario.getPopulation().getPersons().values()) { ArrayList<Activity> c = new ArrayList<Activity>(); Activity a = null; cs = false; for (PlanElement pe : p.getSelectedPlan().getPlanElements()) { if (pe instanceof Activity) { a = (Activity) pe; } else if (pe instanceof Leg) { if (a.getType().startsWith("home")) { if (((Leg) pe).getMode().equals("walk_rb")) number++; // startWork = true; } } if (pe instanceof Leg) { if ((((Leg) pe).getMode().equals("twowaycarsharing")) || ((Leg) pe).getMode().equals("walk_rb")) { cs = true; } else cs = false; } else if (pe instanceof Activity) { if (cs) { if (((Activity) pe).getType().startsWith("work")) { if (!c.isEmpty()) work++; else { } countW++; // time += (((Activity) pe).getMaximumDuration()); c.add((Activity) pe); count++; } else if (((Activity) pe).getType().startsWith("education")) { countE++; count++; } else if (((Activity) pe).getType().startsWith("shop")) { countS++; count++; } else if (((Activity) pe).getType().startsWith("leisure")) { countL++; count++; } else if (((Activity) pe).getType().startsWith("home")) { countH++; count++; } } } } } System.out.println(work); System.out.println(number); System.out.println((double) countS / count * 100.0); System.out.println((double) countW / count * 100.0); System.out.println((double) countE / count * 100.0); System.out.println((double) countL / count * 100.0); System.out.println((double) countH / count * 100.0); System.out.println(count); System.out.println((double) countS / count); // new PopulationWriter(scenario.getPopulation(), // scenario.getNetwork()).writeFileV4(outputFilePath + "/plans_1p.xml"); }
/* * TODO: Construct scenario with knowledge to compare plans before and after loc. choice */ public void testHandlePlan() { RandomLocationMutator randomlocationmutator = this.initialize(); randomlocationmutator.run( scenario.getPopulation().getPersons().get(Id.create("1", Person.class)).getSelectedPlan()); }
public static void main(String[] args) throws IOException { final BufferedReader readLink = IOUtils.getBufferedReader(args[0]); MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); PopulationReader populationReader = new MatsimPopulationReader(scenario); MatsimNetworkReader networkReader = new MatsimNetworkReader(scenario.getNetwork()); Config config = scenario.getConfig(); final BufferedWriter outLink = IOUtils.getBufferedWriter(args[3]); scenario.getConfig().getModule("qsim").addParam("mainMode", "cs_fix_gas"); int count = 0; networkReader.readFile(args[1]); populationReader.readFile(args[2]); Network network = scenario.getNetwork(); String s = readLink.readLine(); s = readLink.readLine(); String previous = null; int counterrb = 0; int counterff = 0; double income = 0.0; boolean ff = false; boolean rb = false; while (s != null) { Leg lastLeg = null; String[] arr = s.split("\t"); double startTime = Double.parseDouble(arr[2]); double endTime = Double.parseDouble(arr[3]); Id<Person> personId = Id.create(arr[0], Person.class); if (previous == null || !previous.equals(arr[0])) { counterrb = 0; counterff = 0; } if (arr[1].contains("c")) { rb = true; ff = false; } else { rb = false; ff = true; } if (rb) { Person p = scenario.getPopulation().getPersons().get(personId); boolean cs = false; double distance = 0.0; int c = 0; for (PlanElement pe : p.getSelectedPlan().getPlanElements()) { if (pe instanceof Activity) { if (c == counterrb) { if (((Activity) pe).getType().equals("cs_interaction") && ((Activity) pe).getLinkId().toString().equals(arr[4]) && !cs) { cs = true; } else if (((Activity) pe).getType().equals("cs_interaction") && ((Activity) pe).getLinkId().toString().equals(arr[4]) && cs && lastLeg.getMode().equals("cs_fix_gas")) { cs = false; counterrb += 2; // write the distance here outLink.write(arr[0]); outLink.write(" "); outLink.write(arr[1]); outLink.write(" "); outLink.write(arr[2]); outLink.write(" "); outLink.write(arr[3]); outLink.write(" "); outLink.write(Double.toString(distance)); outLink.newLine(); break; } } } else if (pe instanceof Leg) { lastLeg = (Leg) pe; if (c < counterrb) { if (((Leg) pe).getMode().equals("cs_walk")) { c++; } } else if (cs) { if (((Leg) pe).getMode().equals("cs_fix_gas")) { Route r = ((Leg) pe).getRoute(); GenericRouteImpl rg = (GenericRouteImpl) r; String grr = rg.getRouteDescription(); String[] arr1 = grr.split("\\s"); for (int i = 0; i < arr1.length; i++) { distance += network.getLinks().get(Id.create(arr1[i], Link.class)).getLength(); } } } } } } // else { /* Person p = scenario.getPopulation().getPersons().get(personId); double distance = 0.0; for(PlanElement pe:p.getSelectedPlan().getPlanElements()) { int c = 0; if (pe instanceof Leg) { lastLeg = (Leg) pe; if (c < counterff) { if (((Leg) pe).getMode().equals("cs_flex_gas")) { c++; } } else if (((Leg) pe).getMode().equals("cs_flex_gas")) { Route r = ((Leg) pe).getRoute(); GenericRouteImpl rg = (GenericRouteImpl) r; String grr = rg.getRouteDescription(); System.out.println(grr); if (grr == null) { System.out.println("bla"); counterff++; break; } String[] arr1 = grr.split("\\s"); for (int i = 0; i < arr1.length; i++) { distance += network.getLinks().get(Id.create(arr1[i])).getLength(); } //write here the distance outLink.write(arr[0]); outLink.write(" "); outLink.write(arr[1]); outLink.write(" "); outLink.write(arr[2]); outLink.write(" "); outLink.write(arr[3]); outLink.write(" "); outLink.write(Double.toString(distance)); outLink.newLine(); counterff++; break; } } } }*/ previous = arr[0]; s = readLink.readLine(); } outLink.flush(); outLink.close(); System.out.println(income); System.out.println(count); }