public static Integer getCurrentPlanElementIndex( MobsimAgent agent ) { return WithinDayAgentUtils.getCurrentPlanElementIndex( agent ) ; } }
private static void checkIfNotInPastOrCurrent(MobsimAgent agent, int index) { final Integer currentIndex = WithinDayAgentUtils.getCurrentPlanElementIndex(agent); // make sure we are not yet beyond the to-be-replanned activity: if ( index <= currentIndex ) { throw new ReplanningException("trying to replace an activity that lies in the past or is current; this is not possible") ; } } private static void checkIfSameMode(String upstreamMode, final String currentMode) {
public void rescheduleCurrentActivityEndtime(MobsimAgent agent, double newEndTime) { Integer index = WithinDayAgentUtils.getCurrentPlanElementIndex(agent) ; this.rescheduleActivityEndtime(agent, index, newEndTime); }
public void flushEverythingBeyondCurrent(MobsimAgent agent) { List<PlanElement> pes = WithinDayAgentUtils.getModifiablePlan(agent).getPlanElements() ; Integer index = WithinDayAgentUtils.getCurrentPlanElementIndex(agent) ; for ( int ii=pes.size()-1 ; ii>index ; ii-- ) { pes.remove(ii) ; } } public void rescheduleCurrentActivityEndtime(MobsimAgent agent, double newEndTime) {
public static PlanElement getCurrentPlanElement(MobsimAgent agent) { return getModifiablePlan(agent).getPlanElements().get(getCurrentPlanElementIndex(agent)); }
public static int indexOfNextActivityWithType( MobsimAgent agent, String type ) { Plan plan = getModifiablePlan(agent) ; List<PlanElement> planElements = plan.getPlanElements() ; for ( int index = getCurrentPlanElementIndex(agent) ; index < planElements.size() ; index++ ) { PlanElement pe = planElements.get(index) ; if ( pe instanceof Activity ) { if ( ((Activity)pe).getType().equals(type) ) { return index ; } } } return -1 ; }
@Override public boolean applyAgentFilter(Id<Person> id, double time) { MobsimAgent agent = this.agents.get(id); if (!(agent.getState() == MobsimAgent.State.ACTIVITY)) return false; int planElementIndex = WithinDayAgentUtils.getCurrentPlanElementIndex(agent); List<PlanElement> planElements = WithinDayAgentUtils.getModifiablePlan(agent).getPlanElements(); List<PlanElement> subList = planElements.subList(planElementIndex, planElements.size()); Iterator<PlanElement> iter = subList.iterator(); while (iter.hasNext()) { PlanElement planElement = iter.next(); if (planElement instanceof Leg) { Leg leg = (Leg) planElement; if (modes.contains(leg.getMode())) return true; else return false; // mode not in set of valid modes } } // no next leg was found return false; } }
private void replanCurrentLegWithNetworkRoute(Activity newAct, String mainMode, Leg currentLeg, double now, MobsimAgent agent) { log.debug("entering replanCurrentLegWithNetworkRoute") ; Plan plan = WithinDayAgentUtils.getModifiablePlan(agent) ; List<PlanElement> planElements = plan.getPlanElements() ; Person person = plan.getPerson() ; // (1) get new trip from current position to new activity: List<? extends PlanElement> newTripElements = newTripToNewActivity(newAct, mainMode, now, agent, person, scenario); // (2) prune the new trip up to the current leg: pruneUpToCurrentLeg(currentLeg, newTripElements); // (2) modify current route: replaceRemainderOfCurrentRoute(currentLeg, newTripElements, agent); // (3) remove remainder of old trip after current leg in plan: int pos = WithinDayAgentUtils.getCurrentPlanElementIndex(agent) + 1 ; while ( !planElements.get(pos).equals(newAct) ) { planElements.remove(pos) ; } // (4) insert new trip after current leg: for ( int ijk = 1 ; ijk < newTripElements.size() ; ijk++ ) { planElements.add( pos, newTripElements.get(ijk) ) ; } WithinDayAgentUtils.resetCaches(agent); } private List<? extends PlanElement> newTripToNewActivity(Activity newAct, String mainMode, double now,
@Deprecated // yyyy but I don't have an easy replacement yet // (maybe just editTrips.replanCurrentTrip(...)?) protected final void reRouteCurrentLeg( MobsimAgent agent, double now ) { Plan plan = WithinDayAgentUtils.getModifiablePlan(agent) ; PlanElement pe = plan.getPlanElements().get( WithinDayAgentUtils.getCurrentPlanElementIndex(agent)) ; if ( !(pe instanceof Leg) ) { return ; } int currentLinkIndex = WithinDayAgentUtils.getCurrentRouteLinkIdIndex(agent) ; this.editRoutes.replanCurrentLegRoute((Leg)pe, ((HasPerson)agent).getPerson(), currentLinkIndex, now ) ; WithinDayAgentUtils.resetCaches(agent); } @Deprecated // I don't think that this is really needed for the bushfire applications. kai, nov'17
public final void replanCurrentLeg( MobsimAgent agent, double now ) { Plan plan = WithinDayAgentUtils.getModifiablePlan(agent) ; PlanElement pe = plan.getPlanElements().get( WithinDayAgentUtils.getCurrentPlanElementIndex(agent)) ; if ( !(pe instanceof Leg) ) { return ; } int currentLinkIndex = WithinDayAgentUtils.getCurrentRouteLinkIdIndex(agent) ; this.replanCurrentLegRoute((Leg)pe, ((HasPerson)agent).getPerson(), currentLinkIndex, now ) ; WithinDayAgentUtils.resetCaches(agent); }
private boolean doReplanning(MobsimAgent mobsimAgent, double time, Mobsim mobsim) { PlanAgent planAgent = (PlanAgent) mobsimAgent; Id<Person> agentId = planAgent.getCurrentPlan().getPerson().getId(); PlanElement currentPlanElement = WithinDayAgentUtils.getCurrentPlanElement(mobsimAgent); if (currentPlanElement instanceof Activity) { Activity act = (Activity) currentPlanElement; if (encounteredActivities.contains(act)) { return false; } CarrierDriverAgent driver = carrierAgentTracker.getDriver(agentId); TourActivity plannedActivity = (TourActivity) driver.getPlannedTourElement(WithinDayAgentUtils.getCurrentPlanElementIndex(mobsimAgent)); if (plannedActivity instanceof Start){ encounteredActivities.add(act); return false; } else { double newEndTime = Math.max(time, plannedActivity.getTimeWindow().getStart()) + plannedActivity.getDuration(); // logger.info("[agentId="+ agentId + "][currentTime="+Time.writeTime(time)+"][actDuration="+plannedActivity.getDuration()+ // "[timeWindow="+ plannedActivity.getTimeWindow() + "][plannedActEnd="+ Time.writeTime(act.getEndTime()) + "][newActEnd="+Time.writeTime(newEndTime)+"]"); act.setMaximumDuration(Time.UNDEFINED_TIME); act.setEndTime(newEndTime); // WithinDayAgentUtils.calculateAndSetDepartureTime(mobsimAgent, act); WithinDayAgentUtils.resetCaches( mobsimAgent ); WithinDayAgentUtils.rescheduleActivityEnd(mobsimAgent,mobsim); encounteredActivities.add(act); return true ; } } return true; } }
public void insertActivity(MobsimAgent agent, int index, Activity activity, String upstreamMode, String downstreamMode ) { Plan plan = WithinDayAgentUtils.getModifiablePlan(agent) ; List<PlanElement> planElements = plan.getPlanElements() ; checkIfNotInPastOrCurrent(agent, index) ; planElements.add( index, activity ) ; { // activity before: Activity actBefore = findRealActBefore(agent, index); if ( actBefore != null ) { if ( WithinDayAgentUtils.indexOfPlanElement(agent, actBefore) < WithinDayAgentUtils.getCurrentPlanElementIndex(agent) ) { // we are already under way editTrips.replanCurrentTrip(agent, this.mobsim.getSimTimer().getTimeOfDay(), upstreamMode ); } else { // we are not yet under way; inserting empty trip: EditTrips.insertEmptyTrip(plan, actBefore, activity, upstreamMode, pf ) ; } } } { // activity after: Activity actAfter = findRealActAfter(agent, index); if ( actAfter != null ) { EditTrips.insertEmptyTrip(plan, activity, actAfter, downstreamMode, pf ) ; } } WithinDayAgentUtils.resetCaches(agent); this.mobsim.rescheduleActivityEnd(agent); }
final Integer currentIndex = WithinDayAgentUtils.getCurrentPlanElementIndex( agent );;