private QLaneI chooseNextLane(QLaneI queue, Id<Link> toLinkId) { List<QLaneI> toQueues = this.nextQueueToLinkCache.get(queue.getId()).get(toLinkId); QLaneI retLane = toQueues.get(0); if (toQueues.size() == 1) { return retLane; } // else chose lane by storage cap for (int i = 1; i < toQueues.size(); i++) { QLaneI toQueue = toQueues.get(i); if (toQueue.getLoadIndicator() < retLane.getLoadIndicator()) { retLane = toQueue; } } return retLane; }
private void moveBufferToNextLane(QLaneI qlane) { QVehicle veh; while (!qlane.isNotOfferingVehicle()) { veh = qlane.getFirstVehicle(); Id<Link> toLinkId = veh.getDriver().chooseNextLinkId(); QLaneI nextQueue = this.chooseNextLane(qlane, toLinkId); if (nextQueue != null) { if (nextQueue.isAcceptingFromUpstream()) { qlane.popFirstVehicle(); nextQueue.addFromUpstream(veh); } else { break; } } else { StringBuilder b = new StringBuilder(); b.append("Person Id: ").append(veh.getDriver().getId()); b.append(" is on Lane Id ").append(qlane.getId()); b.append(" on Link Id ").append(this.getLink().getId()); b.append(" and wants to drive to Link Id ").append(toLinkId); b.append(" but there is no Lane leading to that Link!"); log.error(b.toString()); throw new IllegalStateException(b.toString()); } } }
} else { // lane is within the link and has no connection to a node Map<Id<Link>, List<QLaneI>> toLinkIdDownstreamQueues = new LinkedHashMap<>(); nextQueueToLinkCache.put(Id.create(queue.getId(), Lane.class), toLinkIdDownstreamQueues); for (ModelLane toLane : lane.getToLanes()) { this.laneQueues.put(queue.getId(), queue);
@Override public Collection<AgentSnapshotInfo> addAgentSnapshotInfo( final Collection<AgentSnapshotInfo> positions) { double now = context.getSimTimer().getTimeOfDay() ; if (visLink != null) { for (QLaneI ql : QLinkLanesImpl.this.laneQueues.values()) { VisLane otfLane = visLink.getLaneData().get( ql.getId().toString()); ((QueueWithBuffer.VisDataImpl) ql.getVisData()).setVisInfo( otfLane.getStartCoord(), otfLane.getEndCoord()); } } for (QLaneI road : QLinkLanesImpl.this.getQueueLanes().values()) { road.getVisData().addAgentSnapshotInfo(positions, now); } int cnt2 = 10; // treat vehicles from transit stops cnt2 = context.snapshotInfoBuilder.positionVehiclesFromTransitStop(positions, getLink(), getTransitQLink().getTransitVehicleStopQueue(), cnt2); // treat vehicles from waiting list: context.snapshotInfoBuilder.positionVehiclesFromWaitingList(positions, QLinkLanesImpl.this.getLink(), cnt2, QLinkLanesImpl.this.getWaitingList()); cnt2 = QLinkLanesImpl.this.getWaitingList().size(); context.snapshotInfoBuilder.positionAgentsInActivities(positions, QLinkLanesImpl.this.getLink(), QLinkLanesImpl.this.getAdditionalAgentsOnLink(), cnt2); return positions; } }
Lane rightOfWayLane = lanes.getLanesToLinkAssignments().get(rightOfWayDir.getFromLink()).getLanes().get(rightOfWayQLane.getId()); if (!rightOfWayLane.getToLinkIds().contains(rightOfWayDir.getToLink())) {