private void teleportVehicleTo(QVehicle vehicle, Id<Link> linkId) { if (vehicle.getCurrentLink() != null) { if (cntTeleportVehicle < 9) { cntTeleportVehicle++; log.info("teleport vehicle " + vehicle.getId() + " from link " + vehicle.getCurrentLink().getId() + " to link " + linkId); if (cntTeleportVehicle == 9) { log.info("No more occurrences of teleported vehicles will be reported."); } } QLinkI qlinkOld = (QLinkI) qNetsimEngine.getNetsimNetwork().getNetsimLink(vehicle.getCurrentLink().getId()); QVehicle result = qlinkOld.removeParkedVehicle(vehicle.getId()); if ( result==null ) { throw new RuntimeException( "Could not remove parked vehicle with id " + vehicle.getId() +" on the link id " // + linkId + vehicle.getCurrentLink().getId() + ". Maybe it is currently used by someone else?" + " (In which case ignoring this exception would lead to duplication of this vehicle.) " + "Maybe was never placed onto a link?" ); } } }
" plans to travel on that link from link " + veh.getCurrentLink().getId()); return AcceptTurn.ABORT ;
@Override public final void clearVehicles() { // yyyyyy right now it seems to me that one should rather just abort the agents and have the framework take care of the rest. kai, mar'16 double now = context.getSimTimer().getTimeOfDay() ; for (QVehicle veh : vehQueue) { context.getEventsManager().processEvent( new VehicleAbortsEvent(now, veh.getId(), veh.getCurrentLink().getId())); context.getEventsManager().processEvent( new PersonStuckEvent(now, veh.getDriver().getId(), veh.getCurrentLink().getId(), veh.getDriver().getMode())); context.getAgentCounter().incLost(); context.getAgentCounter().decLiving(); } vehQueue.clear(); for (QVehicle veh : buffer) { context.getEventsManager().processEvent( new VehicleAbortsEvent(now, veh.getId(), veh.getCurrentLink().getId())); context.getEventsManager().processEvent( new PersonStuckEvent(now, veh.getDriver().getId(), veh.getCurrentLink().getId(), veh.getDriver().getMode())); context.getAgentCounter().incLost(); context.getAgentCounter().decLiving(); } buffer.clear(); holes.clear(); this.remainingHolesStorageCapacity = this.storageCapacity; }
new VehicleAbortsEvent(now, veh.getId(), veh.getCurrentLink().getId())); new PersonStuckEvent(now, veh.getDriver().getId(), veh.getCurrentLink().getId(), veh.getDriver().getMode())); context.getAgentCounter().incLost(); context.getAgentCounter().decLiving(); new PersonStuckEvent(now, mobsimAgent.getId(), veh.getCurrentLink().getId(), mobsimAgent.getMode())); context.getAgentCounter().incLost(); context.getAgentCounter().decLiving(); new VehicleAbortsEvent(now, veh.getId(), veh.getCurrentLink().getId())); new PersonStuckEvent(now, veh.getDriver().getId(), veh.getCurrentLink().getId(), veh.getDriver().getMode())); this.context.getAgentCounter().incLost(); this.context.getAgentCounter().decLiving();
if (veh.getDriver().chooseNextLinkId().toString().equals(tr.getLinkId())) { this.em.processEvent(new LinkLeaveEvent(time, veh.getId(), veh.getCurrentLink().getId())); veh.getDriver().notifyMoveOverNode(nextLinkId); this.em.processEvent(new LinkEnterEvent(time, veh.getId(), nextLinkId)); throw new RuntimeException("DS link is full, spill-back to external is not yet implemented!"); this.em.processEvent(new LinkLeaveEvent(time, v.getId(), v.getCurrentLink().getId())); v.getDriver().notifyMoveOverNode(ql.getLink().getId()); ql.addFromUpstream(v);