private List<Link> createActivityLinks() { List<Link> links = new LinkedList<Link>(); for (Activity act : this.activityList) { if (act.getLinkId() != null && this.network != null) { links.add(this.network.getLinks().get(act.getLinkId())); } } if (links.size() == 0) { return null; } else { return links; } }
private void handleActivity(EventsToScore eventsToScore, Fixture f, Activity activity) { eventsToScore.handleEvent( new ActivityStartEvent( activity.getStartTime(), f.person.getId(), activity.getLinkId(), activity.getFacilityId(), activity.getType())); eventsToScore.handleEvent( new ActivityEndEvent( activity.getEndTime(), f.person.getId(), activity.getLinkId(), activity.getFacilityId(), activity.getType())); }
public FreeFloatingParkingPersonDriverAgentImpl( final Person person, final Plan plan, final Netsim simulation, final Scenario scenario, final MatsimServices controler, ParkingModuleWithFreeFloatingCarSharing parkingModule) { this.person = person; this.simulation = simulation; this.controler = controler; this.plan = plan; this.scenario = scenario; this.parkingModule = parkingModule; beelineFactor = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModule("planscalcroute")) .getBeelineDistanceFactors() .get("walk"); walkSpeed = (((PlansCalcRouteConfigGroup) controler.getConfig().getModule("planscalcroute")) .getTeleportedModeSpeeds() .get("walk")); List<? extends PlanElement> planElements = this.plan.getPlanElements(); if (planElements.size() > 0) { this.currentPlanElementIndex = 0; Activity firstAct = (Activity) planElements.get(0); this.currentLinkId = firstAct.getLinkId(); this.state = MobsimAgent.State.ACTIVITY; calculateAndSetDepartureTime(firstAct); } throw new RuntimeException( "Should this class still be in use? I think there is a delegated version of this, isn't there? " + "This one here causes additional refactoring work. kai, feb'16"); }
private boolean judgeByBeeline(final Activity fromAct, final Activity toAct) { if (this.aoiCenter == null) { // we cannot use the bee-line decision if we don't know the alternative aoi-center return false; } Coord fromCoord = fromAct.getCoord(); Coord toCoord = toAct.getCoord(); if (fromCoord == null) { fromCoord = this.network.getLinks().get(fromAct.getLinkId()).getCoord(); } if (toCoord == null) { toCoord = this.network.getLinks().get(toAct.getLinkId()).getCoord(); } return (CoordUtils.distancePointLinesegment(fromCoord, toCoord, this.aoiCenter) <= this.aoiRadius); }
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 void handleAgentLeg(AgentWithParking aem) { Activity nextAct = (Activity) aem.getPerson().getSelectedPlan().getPlanElements().get(aem.getPlanElementIndex() + 3); if (GeneralLib.getDistance( getCurrentLink(aem).getCoord(), network.getLinks().get(nextAct.getLinkId()).getCoord()) < distanceToDestinationForStartingRandomSearch) { throughAwayRestOfRoute(aem); } super.handleAgentLeg(aem); }
@Override public final void endActivityAndComputeNextState(final double now) { Activity act = (Activity) this.getPlanElements().get(this.currentPlanElementIndex); this.simulation .getEventsManager() .processEvent( new ActivityEndEvent( now, this.getPerson().getId(), act.getLinkId(), act.getFacilityId(), act.getType())); advancePlan(now); }
private void replaceDoubtfulLegsByOtherMode() { for (Person p : scenario.getPopulation().getPersons().values()) { for (Plan plan : p.getPlans()) { Leg lastleg = null; Activity lastActivity = null; boolean personb = random.nextBoolean(); for (PlanElement pe : plan.getPlanElements()) { if (pe instanceof Activity) { if (lastActivity == null) { lastActivity = (Activity) pe; } else { Coord lastCoord; if (lastActivity.getCoord() != null) { lastCoord = lastActivity.getCoord(); } else { Link lastLink = scenario.getNetwork().getLinks().get(lastActivity.getLinkId()); lastCoord = lastLink.getCoord(); } Coord currentCoord; if (((Activity) pe).getCoord() != null) { currentCoord = ((Activity) pe).getCoord(); } else { currentCoord = scenario.getNetwork().getLinks().get(((Activity) pe).getLinkId()).getCoord(); } double distance = CoordUtils.calcDistance(lastCoord, currentCoord); if (distance > 3000 && lastleg.getMode().equals("walk")) { lastleg.setMode("pt"); } else if (distance > 20000 && lastleg.getMode().equals("bike")) { lastleg.setMode("pt"); } else if (distance < 2000 && (lastleg.getMode().equals("pt"))) { if (personb == true) lastleg.setMode("walk"); else lastleg.setMode("bike"); } lastActivity = (Activity) pe; } } else if (pe instanceof Leg) { lastleg = (Leg) pe; } } } } }
public AllCSModesPersonDriverAgentImpl( final Person person, final Plan plan, final Netsim simulation, final Scenario scenario, CarSharingVehicles carSharingVehicles, TripRouter tripRouter) { this.person = person; this.simulation = simulation; this.plan = plan; this.scenario = scenario; this.carSharingVehicles = carSharingVehicles; this.tripRouter = tripRouter; beelineFactor = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModule("planscalcroute")) .getBeelineDistanceFactors() .get("walk"); walkSpeed = (((PlansCalcRouteConfigGroup) scenario.getConfig().getModule("planscalcroute")) .getTeleportedModeSpeeds() .get("walk")); // carsharingVehicleLocations = new ArrayList<ActivityFacility>(); mapTW = new HashMap<Link, Link>(); mapOW = new HashMap<Link, Link>(); List<? extends PlanElement> planElements = this.plan.getPlanElements(); if (planElements.size() > 0) { this.currentPlanElementIndex = 0; Activity firstAct = (Activity) planElements.get(0); this.currentLinkId = firstAct.getLinkId(); this.state = MobsimAgent.State.ACTIVITY; calculateAndSetDepartureTime(firstAct); } throw new RuntimeException( "Should this class still be in use? I think there is a delegated version of this, isn't there? " + "This one here causes additional refactoring work. kai, feb'16"); }
/** * Tests that plans with missing act locations are completed (=xy2links and routed) before the * mobsim starts. * * @author mrieser */ @Test public void testCalcMissingActLinks() { Config config = this.utils.loadConfig(null); Fixture f = new Fixture(config); /* Create a person with two plans, driving from link 1 to link 3, starting at 7am. */ Population population = f.scenario.getPopulation(); PopulationFactory factory = population.getFactory(); Person person1 = null; Activity act1a = null; Activity act1b = null; Activity act2a = null; Activity act2b = null; Leg leg1 = null; Leg leg2 = null; person1 = PersonImpl.createPerson(Id.create(1, Person.class)); // --- plan 1 --- Plan plan1 = factory.createPlan(); person1.addPlan(plan1); double x1 = -50.0; act1a = factory.createActivityFromCoord("h", new Coord(x1, 10.0)); act1a.setEndTime(7.0 * 3600); plan1.addActivity(act1a); leg1 = factory.createLeg(TransportMode.car); plan1.addLeg(leg1); // DO NOT CREATE A ROUTE FOR THE LEG!!! double y1 = -10.0; act1b = factory.createActivityFromCoord("h", new Coord(1075.0, y1)); plan1.addActivity(act1b); // --- plan 2 --- Plan plan2 = factory.createPlan(); person1.addPlan(plan2); double x = -50.0; double y = -10.0; act2a = factory.createActivityFromCoord("h", new Coord(x, y)); act2a.setEndTime(7.9 * 3600); plan2.addActivity(act2a); leg2 = factory.createLeg(TransportMode.car); plan2.addLeg(leg2); // DO NOT CREATE A ROUTE FOR THE LEG!!! act2b = factory.createActivityFromCoord("h", new Coord(1111.1, 10.0)); plan2.addActivity(act2b); population.addPerson(person1); // Complete the configuration for our test case // - set scoring parameters ActivityParams actParams = new ActivityParams("h"); actParams.setTypicalDuration(8 * 3600); actParams.setPriority(1.0); config.planCalcScore().addActivityParams(actParams); // - define iterations config.controler().setLastIteration(0); // - make sure we don't use threads, as they are not deterministic config.global().setNumberOfThreads(1); // Now run the simulation Controler controler = new Controler(f.scenario); controler.getConfig().controler().setCreateGraphs(false); controler.getConfig().controler().setWriteEventsInterval(0); controler.addOverridingModule( new AbstractModule() { @Override public void install() { bindMobsim() .toProvider( new Provider<Mobsim>() { @Override public Mobsim get() { return new FakeMobsim(); } }); } }); controler.setDumpDataAtEnd(false); controler.run(); /* if something goes wrong, there will be an exception we don't catch and the test fails, * otherwise, everything is fine. */ // check that BOTH plans have their act-locations calculated assertEquals(f.link1.getId(), act1a.getLinkId()); assertEquals(f.link3.getId(), act1b.getLinkId()); assertEquals(f.link1.getId(), act2a.getLinkId()); assertEquals(f.link3.getId(), act2b.getLinkId()); // check that BOTH plans have a route set, even when we only run 1 iteration where only one of // them is used. // assertNotNull(leg1.getRoute()); // assertNotNull(leg2.getRoute()); // but do not assume that the leg will be the same instance... for (Plan plan : new Plan[] {plan1, plan2}) { assertEquals( "unexpected plan length in " + plan.getPlanElements(), 3, plan.getPlanElements().size()); assertNotNull( "null route in plan " + plan.getPlanElements(), ((Leg) plan.getPlanElements().get(1)).getRoute()); } }
/** Compares plan and events for each agent. Checks the type of the event and the linkId. */ protected void checkEventsCorrespondToPlans(final Population population) { for (Entry<Id<Person>, List<Event>> entry : eventsByPerson.entrySet()) { List<Event> list = entry.getValue(); Person p = population.getPersons().get(entry.getKey()); // printEvents(list.get(0).agentId); Plan plan = p.getSelectedPlan(); int index = 0; Activity act = null; Leg leg = null; for (PlanElement pe : plan.getPlanElements()) { if (pe instanceof Activity) { act = (Activity) pe; if (leg != null) { // each leg ends with enter on act link // => only for non empty car legs and non-cars legs this // statement is true if (leg.getMode().equals(TransportMode.car) && ((NetworkRoute) leg.getRoute()).getLinkIds().size() > 0) { assertTrue(list.get(index) instanceof LinkEnterEvent); assertTrue( act.getLinkId() .toString() .equalsIgnoreCase(((LinkEnterEvent) list.get(index)).getLinkId().toString())); index++; } // each leg ends with arrival on act link assertTrue(list.get(index) instanceof PersonArrivalEvent); assertTrue( act.getLinkId() .toString() .equalsIgnoreCase( ((PersonArrivalEvent) list.get(index)).getLinkId().toString())); index++; // each leg ends with arrival on act link assertTrue(list.get(index) instanceof ActivityStartEvent); assertEquals(act.getLinkId(), ((ActivityStartEvent) list.get(index)).getLinkId()); index++; } } else if (pe instanceof Leg) { leg = (Leg) pe; // act end event assertTrue(list.get(index) instanceof ActivityEndEvent); assertEquals(act.getLinkId(), ((ActivityEndEvent) list.get(index)).getLinkId()); index++; // each leg starts with departure on act link assertTrue(list.get(index) instanceof PersonDepartureEvent); assertTrue( act.getLinkId() .toString() .equalsIgnoreCase( ((PersonDepartureEvent) list.get(index)).getLinkId().toString())); index++; // each CAR leg must enter/leave act link if (leg.getMode().equals(TransportMode.car)) { // if car leg contains empty route, then this check is // not applicable if (((NetworkRoute) leg.getRoute()).getLinkIds().size() > 0) { // the first LinkEnterEvent is a AgentWait2LinkEvent assertTrue(list.get(index) instanceof VehicleEntersTrafficEvent); assertTrue( act.getLinkId() .toString() .equalsIgnoreCase( ((VehicleEntersTrafficEvent) list.get(index)).getLinkId().toString())); index++; assertTrue(list.get(index) instanceof LinkLeaveEvent); assertTrue( act.getLinkId() .toString() .equalsIgnoreCase(((LinkLeaveEvent) list.get(index)).getLinkId().toString())); index++; } for (Id<Link> linkId : ((NetworkRoute) leg.getRoute()).getLinkIds()) { // enter link and leave each link on route assertTrue(list.get(index) instanceof LinkEnterEvent); assertTrue(linkId.equals(((LinkEnterEvent) list.get(index)).getLinkId())); index++; assertTrue(list.get(index) instanceof LinkLeaveEvent); assertTrue(linkId.equals(((LinkLeaveEvent) list.get(index)).getLinkId())); index++; } } } } } }