@Override public void handleEvent(PersonStuckEvent event) { Double startWaitingTime = agentsWaitingData.get(event.getPersonId()); if (startWaitingTime != null) { int legs = 0, currentLeg = agentsCurrentLeg.get(event.getPersonId()); PLAN_ELEMENTS: for (PlanElement planElement : population.getPersons().get(event.getPersonId()).getSelectedPlan().getPlanElements()) if (planElement instanceof Leg) { if (currentLeg == legs) { String[] leg = (((Leg) planElement).getRoute()).getRouteDescription().split(SEPARATOR); WaitTimeData data = waitTimes .get( new Tuple<Id<TransitLine>, Id<TransitRoute>>( Id.create(leg[2], TransitLine.class), Id.create(leg[3], TransitRoute.class))) .get(Id.create(leg[1], TransitStopFacility.class)); if (data != null) data.addWaitTime( (int) (startWaitingTime / timeSlot), event.getTime() - startWaitingTime); agentsWaitingData.remove(event.getPersonId()); break PLAN_ELEMENTS; } else legs++; } } }
@Override public void reset(int iteration) { for (Map<Id<TransitStopFacility>, WaitTimeData> routeData : waitTimes.values()) for (WaitTimeData waitTimeData : routeData.values()) waitTimeData.resetWaitTimes(); agentsWaitingData.clear(); agentsCurrentLeg.clear(); }
@Override public void reset(int iteration) { for (Map<String, WaitTimeData> routeData : waitTimes.values()) for (WaitTimeData waitTimeData : routeData.values()) waitTimeData.resetWaitTimes(); agentsWaitingData.clear(); linesRoutesOfVehicle.clear(); stopOfVehicle.clear(); }
@Override public void handleEvent(PersonEntersVehicleEvent event) { Double startWaitingTime = agentsWaitingData.get(event.getPersonId().toString()); if (startWaitingTime != null) { Tuple<String, String> lineRoute = linesRoutesOfVehicle.get(event.getVehicleId().toString()); WaitTimeData data = waitTimes.get(lineRoute).get(stopOfVehicle.get(event.getVehicleId().toString())); data.addWaitTime((int) (startWaitingTime / timeSlot), event.getTime() - startWaitingTime); agentsWaitingData.remove(event.getPersonId().toString()); } }
private double getRouteStopWaitTime( Id<TransitLine> lineId, Id<TransitRoute> routeId, Id<TransitStopFacility> stopId, double time) { Tuple<Id<TransitLine>, Id<TransitRoute>> key = new Tuple<Id<TransitLine>, Id<TransitRoute>>(lineId, routeId); WaitTimeData waitTimeData = waitTimes.get(key).get(stopId); if (waitTimeData.getNumData((int) (time / timeSlot)) == 0) { double[] waitTimes = scheduledWaitTimes.get(key).get(stopId); return waitTimes[ (int) (time / timeSlot) < waitTimes.length ? (int) (time / timeSlot) : (waitTimes.length - 1)]; } else return waitTimeData.getWaitTime((int) (time / timeSlot)); }
private double getRouteStopWaitTime( Id<TransitLine> lineId, Id<TransitRoute> routeId, Id<TransitStopFacility> stopId, double time) { Tuple<String, String> key = new Tuple<String, String>(lineId.toString(), routeId.toString()); waitTimeCalls++; WaitTimeData waitTimeData = waitTimes.get(key).get(stopId.toString()); if (waitTimeData.getNumData((int) (time / timeSlot)) == 0) { scheduleCalls++; double[] waitTimes = scheduledWaitTimes.get(key).get(stopId.toString()); return waitTimes[ (int) (time / timeSlot) < waitTimes.length ? (int) (time / timeSlot) : (waitTimes.length - 1)]; } else { return waitTimeData.getWaitTime((int) (time / timeSlot)); } }