@Override public boolean doReplanning(MobsimAgent withinDayAgent) { random.setSeed( Integer.parseInt(withinDayAgent.getId().toString()) * this.controler.getIterationNumber()); Plan executedPlan = WithinDayAgentUtils.getModifiablePlan(withinDayAgent); // If we don't have an executed plan if (executedPlan == null) return false; PlanElement currentPlanElement = WithinDayAgentUtils.getCurrentPlanElement(withinDayAgent); if (!(currentPlanElement instanceof Leg)) return false; Leg currentLeg = (Leg) currentPlanElement; int currentLinkIndex = WithinDayAgentUtils.getCurrentRouteLinkIdIndex(withinDayAgent); // new Route for current Leg this.microRouteCurrentLegRoute( currentLeg, executedPlan.getPerson(), currentLinkIndex, this.time, scenario.getNetwork(), tripRouter, random, executedPlan); // Finally reset the cached Values of the PersonAgent - they may have changed! WithinDayAgentUtils.resetCaches(withinDayAgent); return true; }
@Override public void notifyMobsimBeforeSimStep(final MobsimBeforeSimStepEvent e) { if (e.getSimulationTime() == t1) { assertEquals( 100, this.arp .getActivityPerformingAgents() .size()); // all agents perform an activity before the time step assertEquals( 1, this.arp .getActivityEndingAgents(e.getSimulationTime()) .size()); // one agent ends an activity } if (e.getSimulationTime() == t2) { assertEquals( 99, this.arp .getActivityPerformingAgents() .size()); // 99 agents perform an activity before the time step assertEquals( 1, this.arp .getActivityEndingAgents(e.getSimulationTime()) .size()); // one agent ends an activity } if (e.getSimulationTime() == t3) { assertEquals( 98, this.arp .getActivityPerformingAgents() .size()); // 98 agents perform an activity before the time step assertEquals( 1, this.arp .getActivityEndingAgents(e.getSimulationTime()) .size()); // one agent ends an activity } if (e.getSimulationTime() == t4) { assertEquals( 97, this.arp .getActivityPerformingAgents() .size()); // 97 agents perform an activity before the time step assertEquals( 97, this.arp .getActivityEndingAgents(e.getSimulationTime()) .size()); // 97 agents end an activity // now reschedule the activity end time of an agent MobsimAgent agent = this.agents.get(Id.create("40", Person.class)); Activity currentActivity = (Activity) WithinDayAgentUtils.getCurrentPlanElement(agent); currentActivity.setEndTime(e.getSimulationTime() + 60); WithinDayAgentUtils.resetCaches(agent); this.withinDayEngine.getActivityRescheduler().rescheduleActivityEnd(agent); ((QSim) e.getQueueSimulation()) .getEventsManager() .processEvent( new ReplanningEvent(e.getSimulationTime(), agent.getId(), "ActivityRescheduler")); // reschedule a second time to check what happens if the agent is replanned multiple times // in one time step currentActivity.setEndTime(e.getSimulationTime() + 120); WithinDayAgentUtils.resetCaches(agent); this.withinDayEngine.getActivityRescheduler().rescheduleActivityEnd(agent); ((QSim) e.getQueueSimulation()) .getEventsManager() .processEvent( new ReplanningEvent(e.getSimulationTime(), agent.getId(), "ActivityRescheduler")); } if (e.getSimulationTime() == t5) { assertEquals( 1, this.arp .getActivityPerformingAgents() .size()); // one agent performs an activity before the time step assertEquals( 0, this.arp .getActivityEndingAgents(e.getSimulationTime()) .size()); // no agent ends an activity } if (e.getSimulationTime() == t6) { assertEquals( 1, this.arp .getActivityPerformingAgents() .size()); // one agent performs an activity before the time step assertEquals( 1, this.arp .getActivityEndingAgents(e.getSimulationTime()) .size()); // one agent ends an activity } }