@Override public void run(Person person) { try { Plan plan = person.getSelectedPlan(); this.transitLegsRemover.run(plan); // for (Plan plan : person.getPlans()) { Activity prevAct = null; for (PlanElement pe : plan.getPlanElements()) { if (pe instanceof Activity) { Activity act = (Activity) pe; if (prevAct != null) { List<Leg> legs = router.calcRoute( new FakeFacility(prevAct.getCoord()), new FakeFacility(act.getCoord()), act.getStartTime(), person); out.write( person.getId() + " " + prevAct.getCoord() + " -> " + act.getCoord() + " @ " + Time.writeTime(act.getStartTime()) + " :\n"); if (legs != null) { for (Leg l : legs) { out.write(" " + l.getMode()); if (l.getRoute() instanceof ExperimentalTransitRoute) { ExperimentalTransitRoute r = (ExperimentalTransitRoute) l.getRoute(); out.write(" " + r.getRouteDescription()); } out.write("\n"); } } } prevAct = act; } } // } } catch (IOException e) { throw new RuntimeException(e); } }
private void handleLastActivity(EventsToScore eventsToScore, Fixture f, Activity activity) { eventsToScore.handleEvent( new ActivityStartEvent( activity.getStartTime(), f.person.getId(), activity.getLinkId(), activity.getFacilityId(), activity.getType())); }
private void writeAct(final Activity act, final BufferedWriter out) throws IOException { out.write("\t\t\t<act type=\""); out.write(act.getType()); out.write("\""); if (act.getLinkId() != null) { out.write(" link=\""); out.write(act.getLinkId().toString()); out.write("\""); } if (act.getFacilityId() != null) { out.write(" facility=\""); out.write(act.getFacilityId().toString()); out.write("\""); } if (act.getCoord() != null) { final Coord coord = coordinateTransformation.transform(act.getCoord()); out.write(" x=\""); out.write(Double.toString(coord.getX())); out.write("\" y=\""); out.write(Double.toString(coord.getY())); out.write("\""); } if (act.getStartTime() != Time.UNDEFINED_TIME) { out.write(" start_time=\""); out.write(Time.writeTime(act.getStartTime())); out.write("\""); } if (act != null) { Activity a = act; if (a.getMaximumDuration() != Time.UNDEFINED_TIME) { out.write(" max_dur=\""); out.write(Time.writeTime(a.getMaximumDuration())); out.write("\""); } } if (act.getEndTime() != Time.UNDEFINED_TIME) { out.write(" end_time=\""); out.write(Time.writeTime(act.getEndTime())); out.write("\""); } out.write(" />\n"); }
@Override public final void handleActivity(Activity activity) { double startTime = activity.getStartTime(); double endTime = activity.getEndTime(); if (startTime == Time.UNDEFINED_TIME && endTime != Time.UNDEFINED_TIME) { for (ActivityScoring activityScoringFunction : activityScoringFunctions) { activityScoringFunction.handleFirstActivity(activity); } } else if (startTime != Time.UNDEFINED_TIME && endTime != Time.UNDEFINED_TIME) { for (ActivityScoring activityScoringFunction : activityScoringFunctions) { activityScoringFunction.handleActivity(activity); } } else if (startTime != Time.UNDEFINED_TIME && endTime == Time.UNDEFINED_TIME) { for (ActivityScoring activityScoringFunction : activityScoringFunctions) { activityScoringFunction.handleLastActivity(activity); } } else { throw new RuntimeException( "Trying to score an activity without start or end time. Should not happen."); } }
/** * @param args * @throws FactoryException */ public static void main(String[] args) throws FactoryException { String popFile = args[0]; String facFile = args[1]; String netFile = args[2]; int n = Integer.parseInt(args[3]); String outDir = args[4]; Logger logger = Logger.getLogger(DemoScenario.class); MathTransform transform = CRS.findMathTransform(CRSUtils.getCRS(31467), CRSUtils.getCRS(3857)); Config config = ConfigUtils.createConfig(); Scenario scenario = ScenarioUtils.createScenario(config); /* * remove foreign persons and extract subsample */ logger.info("Loading persons..."); MatsimPopulationReader pReader = new MatsimPopulationReader(scenario); pReader.readFile(popFile); logger.info("Done."); logger.info("Removing foreign persons..."); Set<Id<Person>> remove = new HashSet<>(); for (Id<Person> id : scenario.getPopulation().getPersons().keySet()) { if (id.toString().startsWith("foreign")) { remove.add(id); } } int cnt = 0; for (Id<Person> id : remove) { if (scenario.getPopulation().getPersons().remove(id) != null) { cnt++; } } logger.info(String.format("Done. Removed %s foreign persons.", cnt)); logger.info("Drawing population subsample..."); List<Person> persons = new ArrayList<>(scenario.getPopulation().getPersons().values()); Collections.shuffle(persons); Population population = PopulationUtils.createPopulation(config); cnt = 0; for (int i = 0; i < n; i++) { population.addPerson(persons.get(i)); } logger.info("Done."); logger.info("Bluring activity end times..."); Random random = new XORShiftRandom(); for (Person person : population.getPersons().values()) { for (Plan plan : person.getPlans()) { for (int i = 0; i < plan.getPlanElements().size(); i += 2) { Activity act = (Activity) plan.getPlanElements().get(i); double endTim = act.getEndTime() - 15 * 60 + (random.nextDouble() * 30 * 60); act.setEndTime(endTim); double startTim = act.getStartTime() - 15 * 60 + (random.nextDouble() * 30 * 60); act.setStartTime(startTim); } } } logger.info("Done."); logger.info("Writing population..."); PopulationWriter pWriter = new PopulationWriter(population); pWriter.write(String.format("%s/plans.xml.gz", outDir)); logger.info("Done."); /* * filter only used facilities */ logger.info("Loading facilities..."); MatsimFacilitiesReader fReader = new MatsimFacilitiesReader(scenario); fReader.readFile(facFile); logger.info("Done."); logger.info("Removing unsused facilities..."); Set<Id<ActivityFacility>> unused = new HashSet<>(scenario.getActivityFacilities().getFacilities().keySet()); for (Person person : population.getPersons().values()) { for (Plan plan : person.getPlans()) { for (int i = 0; i < plan.getPlanElements().size(); i += 2) { Activity act = (Activity) plan.getPlanElements().get(i); unused.remove(act.getFacilityId()); } } } logger.info("Done."); logger.info("Transforming facility coordinates..."); for (ActivityFacility fac : scenario.getActivityFacilities().getFacilities().values()) { double[] points = new double[] {fac.getCoord().getX(), fac.getCoord().getY()}; try { transform.transform(points, 0, points, 0, 1); } catch (TransformException e) { e.printStackTrace(); } ((ActivityFacilityImpl) fac).setCoord(new Coord(points[0], points[1])); } logger.info("Done."); logger.info("Writing facilities..."); FacilitiesWriter fWrtier = new FacilitiesWriter(scenario.getActivityFacilities()); fWrtier.write(String.format("%s/facilities.xml.gz", outDir)); logger.info("Done."); /* * clean network from foreign links */ logger.info("Loading network..."); MatsimNetworkReader nReader = new MatsimNetworkReader(scenario); nReader.readFile(netFile); logger.info("Done."); logger.info("Removing foreign links..."); Set<Id<Link>> linksRemove = new HashSet<>(); for (Id<Link> id : scenario.getNetwork().getLinks().keySet()) { if (id.toString().contains(".l")) { linksRemove.add(id); } } for (Id<Link> id : linksRemove) { scenario.getNetwork().removeLink(id); } logger.info("Done."); logger.info("Removing foreign nodes..."); Set<Id<Node>> nodesRemove = new HashSet<>(); for (Id<Node> id : scenario.getNetwork().getNodes().keySet()) { if (id.toString().contains(".n")) { nodesRemove.add(id); } } for (Id<Node> id : nodesRemove) { scenario.getNetwork().removeNode(id); } logger.info("Done."); logger.info("Transforming node coordinates..."); for (Node node : scenario.getNetwork().getNodes().values()) { double[] points = new double[] {node.getCoord().getX(), node.getCoord().getY()}; try { transform.transform(points, 0, points, 0, 1); } catch (TransformException e) { e.printStackTrace(); } ((NodeImpl) node).setCoord(new Coord(points[0], points[1])); } logger.info("Done."); logger.info("Writing network..."); NetworkWriter nWriter = new NetworkWriter(scenario.getNetwork()); nWriter.write(String.format("%s/network.xml.gz", outDir)); logger.info("Done."); }