@Override public void registerAdditionalAgentOnLink(MobsimAgent planAgent) { this.additionalAgentsOnLink.put(planAgent.getId(), planAgent); }
@Override public int compare(AgentEntry arg0, AgentEntry arg1) { int cmp = Double.compare(arg0.activityEndTime, arg1.activityEndTime); if (cmp == 0) { // Both depart at the same time -> let the one with the larger id be first (=smaller) // // yy We are not sure what the above comment line is supposed to say. Presumably, it is supposed // to say that the agent with the larger ID should be "smaller" one in the comparison. // In practice, it seems // that something like "emob_9" is before "emob_8", and something like "emob_10" before "emob_1". // It is unclear why this convention is supposed to be helpful. // kai & dominik, jul'12 // return arg1.agent.getId().compareTo(arg0.agent.getId()); } return cmp; }
private void unregisterAgentAtActivityLocation(final MobsimAgent agent) { Id<Person> agentId = agent.getId(); Id<Link> linkId = agent.getCurrentLinkId(); if (linkId != null) { // may be bushwacking internalInterface.unregisterAdditionalAgentOnLink(agentId, linkId); } }
private void unregisterAgentAtActivityLocation(final MobsimAgent agent) { Id<Person> agentId = agent.getId(); Id<Link> linkId = agent.getCurrentLinkId(); if (linkId != null) { // may be bushwacking internalInterface.unregisterAdditionalAgentOnLink(agentId, linkId); } }
@Override public int compare(final Tuple<Double, MobsimAgent> o1, final Tuple<Double, MobsimAgent> o2) { int ret = o1.getFirst().compareTo(o2.getFirst()); // first compare time information if (ret == 0) { ret = o2.getSecond().getId().compareTo(o1.getSecond().getId()); // if they're equal, compare the Ids: the one with the larger Id should be first } return ret; } }
@Override public int compare(Tuple<Double, MobsimAgent> o1, Tuple<Double, MobsimAgent> o2) { int ret = o1.getFirst().compareTo(o2.getFirst()); // first compare time information if (ret == 0) { ret = o2.getSecond().getId().compareTo(o1.getSecond().getId()); // if they're equal, compare the Ids: the one with the larger Id should be first } return ret; } });
public final int positionAgentsInActivities(final Collection<AgentSnapshotInfo> positions, Link link, Collection<MobsimAgent> agentsInActivities, int cnt2) { for (MobsimAgent pa : agentsInActivities) { AgentSnapshotInfo agInfo = snapshotInfoFactory.createAgentSnapshotInfo(pa.getId(), link, 0.9*link.getLength(), cnt2) ; agInfo.setAgentState( AgentState.PERSON_AT_ACTIVITY ) ; positions.add(agInfo) ; cnt2++ ; } return cnt2; }
public final void registerAdditionalAgentOnLink(final MobsimAgent planAgent) { Id<Link> linkId = planAgent.getCurrentLinkId(); if (linkId != null) { // may be bushwacking QLinkI qLink = this.network.getNetsimLink(linkId); if ( qLink==null ) { throw new RuntimeException("netsim link lookup failed; agentId=" + planAgent.getId() + "; linkId=" + linkId ) ; } qLink.registerAdditionalAgentOnLink(planAgent); } }
public void addDepartingAgent(MobsimAgent mobsimAgent, double now) { this.waitingAfterActivityAgents.add(mobsimAgent); this.activateLink(); this.simEngine.getEventsManager().processEvent( new PersonEntersVehicleEvent(now, mobsimAgent.getId(), Id.create(mobsimAgent.getId(), Vehicle.class))); this.simEngine.getEventsManager().processEvent( new VehicleEntersTrafficEvent(now, mobsimAgent.getId(), link.getId(), Id.create(mobsimAgent.getId(), Vehicle.class), mobsimAgent.getMode(), 1.0)); }
@Override public void notifyMobsimInitialized(MobsimInitializedEvent e) { MobsimTimer mobsimTimer = ((QSim) e.getQueueSimulation()).getSimTimer(); this.simStartTime = mobsimTimer.getSimStartTime(); this.timeStepSize = mobsimTimer.getSimTimestepSize(); this.activityPerformingAgents.clear(); for (MobsimAgent mobsimAgent : this.mobsimDataProvider.getAgents().values()) { // get the agent's activity end time and mark it as currently performing an Activity double activityEndTime = mobsimAgent.getActivityEndTime(); // add the agent to the collections this.activityEndTimes.put(mobsimAgent.getId(), activityEndTime); int bin = this.getTimeBin(activityEndTime); Map<Id<Person>, MobsimAgent> map = getMapForTimeBin(bin); map.put(mobsimAgent.getId(), mobsimAgent); } }
@Override public void afterSim() { double now = this.internalInterface.getMobsim().getSimTimer().getTimeOfDay(); for (AgentEntry entry : activityEndsList) { if (entry.activityEndTime!=Double.POSITIVE_INFINITY && entry.activityEndTime!=Time.UNDEFINED_TIME) { // since we are at an activity, it is not plausible to assume that the agents know mode or destination // link id. Thus generating the event with ``null'' in the corresponding entries. kai, mar'12 eventsManager.processEvent(new PersonStuckEvent(now, entry.agent.getId(), null, null)); } } activityEndsList.clear(); }
public MobsimAgent getNextWaitingAgent(double now) { MobsimAgent personAgent = waitingToLeaveAgents.poll(); if (personAgent != null) { this.simEngine.getEventsManager().processEvent(new LinkLeaveEvent(now, Id.create(personAgent.getId(), Vehicle.class), link.getId())); } return personAgent; }
private void moveToAbort(final MobsimAgent mobsimAgent, final double now, Link currentLink, Link nextLink) { log.error("Agent has no or wrong route! agentId=" + mobsimAgent.getId() + " currentLink=" + currentLink.getId().toString() + " nextLink=" + (nextLink!=null?nextLink.getId():"null") + " currentLinkToNode=" + currentLink.getToNode().getId() + " nextLinkFromNode=" + (nextLink!=null?nextLink.getFromNode().getId():"null") + ". The agent is removed from the simulation."); mobsimAgent.setStateToAbort(now); this.simEngine.internalInterface.arrangeNextAgentState(mobsimAgent); } }
@Override public void notifyMobsimInitialized(final MobsimInitializedEvent e) { assertEquals(100, this.arp.getActivityPerformingAgents().size()); // all agents perform an activity assertEquals(0, this.arp.getActivityEndingAgents(0.0).size()); // no agent ends an activity QSim sim = (QSim) e.getQueueSimulation(); for (MobsimAgent agent : sim.getAgents().values()) this.agents.put(agent.getId(), agent); }
@Override public void afterSim() { double now = internalInterface.getMobsim().getSimTimer().getTimeOfDay(); for (Tuple<Double, MobsimAgent> entry : teleportationList) { MobsimAgent agent = entry.getSecond(); eventsManager.processEvent(new PersonStuckEvent(now, agent.getId(), agent.getDestinationLinkId(), agent.getMode())); } teleportationList.clear(); }
public void addAgentFromIntersection(MobsimAgent mobsimAgent, double now) { this.activateLink(); this.addAgent(mobsimAgent, now); this.simEngine.getEventsManager().processEvent(new LinkEnterEvent(now, Id.create(mobsimAgent.getId(), Vehicle.class), link.getId())); }
@Override public boolean doReplanning(MobsimAgent withinDayAgent) { log.info("Replanning agent " + withinDayAgent.getId()); Plan plan = WithinDayAgentUtils.getModifiablePlan(withinDayAgent); Leg leg = (Leg) plan.getPlanElements().get(1); NetworkRoute route = (NetworkRoute) leg.getRoute(); Id<Link> startLinkId = Id.create("l0", Link.class); Id<Link> endLinkId = Id.create("l2", Link.class); List<Id<Link>> linkIds = new ArrayList<Id<Link>>(); linkIds.add(Id.create("l3", Link.class)); linkIds.add(Id.create("l4", Link.class)); linkIds.add(Id.create("l5", Link.class)); route.setLinkIds(startLinkId, linkIds, endLinkId); return true; } }
@Override public boolean handlePassengerEntering(PTPassengerAgent passenger, MobsimVehicle vehicle, Id<TransitStopFacility> fromStopFacilityId, double time) { boolean handled = vehicle.addPassenger(passenger); if(handled){ this.agentTracker.removeAgentFromStop(passenger, fromStopFacilityId); MobsimAgent planAgent = (MobsimAgent) passenger; // if (planAgent instanceof PersonDriverAgentImpl) { Id<Person> agentId = planAgent.getId(); Id<Link> linkId = planAgent.getCurrentLinkId(); this.internalInterface.unregisterAdditionalAgentOnLink(agentId, linkId) ; // } MobsimDriverAgent agent = (MobsimDriverAgent) passenger; eventsManager.processEvent(new PersonEntersVehicleEvent(time, agent.getId(), vehicle.getVehicle().getId())); } return handled; }