private SignalizeableItem getQLane(Id<Lane> laneId, QLinkLanesImpl link){ if (link.getQueueLanes().containsKey(laneId)){ return (SignalizeableItem) link.getQueueLanes().get(laneId); } throw new IllegalArgumentException("QLane Id " + laneId + "on link Id" + link.getLink().getId() + " not found. Check configuration!"); }
AbstractQLink build(Link link, QNodeI toNodeQ, List<ModelLane> lanes ) { return new QLinkLanesImpl(link, toNodeQ, lanes, context, netsimEngine, linkSpeedCalculator ) ; }
@Override public boolean doSimStep() { double now = context.getSimTimer().getTimeOfDay() ; boolean lanesActive = false; boolean movedWaitToRoad = false; if ( context.qsimConfig.isInsertingWaitingVehiclesBeforeDrivingVehicles() ) { //TODO //Because moveBufferToNextLane() (called from moveLanes()) is kind of "moveInternalNodes()", //it should be executed before moveWaitToRoad() to keep the sequence fully consistent. //The sequence is broken only if isInsertingWaitingVehiclesBeforeDrivingVehicles==true. //Currently, the buffer of the accepting lane gets emptied after moveWaitToRoad(), //which gives preference to already driving vehicles //michalm, jan'17 this.moveWaitToRoad(now); this.getTransitQLink().handleTransitVehiclesInStopQueue(now); lanesActive = this.moveLanes(); } else { this.getTransitQLink().handleTransitVehiclesInStopQueue(now); lanesActive = this.moveLanes(); movedWaitToRoad = this.moveWaitToRoad(now); } this.setActive(lanesActive || movedWaitToRoad || (!this.getWaitingList().isEmpty()) || !this.getTransitQLink().getTransitVehicleStopQueue().isEmpty()); return this.isActive(); }
@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; } }
assertEquals(0.5, ql.getSimulatedFlowCapacity()); assertEquals(268.0, ql.getSpaceCap()); QLaneI qlane = ql.getOriginalLane(); assertNotNull(qlane); assertNotNull(ql.getOfferingQLanes()); assertEquals(1, ql.getOfferingQLanes().size()); qlane = ql.getOfferingQLanes().get(0);
while (!getWaitingList().isEmpty()) { if (!firstLaneQueue.isAcceptingFromWait(this.getWaitingList().peek())) { return movedWaitToRoad; QVehicle veh = this.getWaitingList().poll(); this.getLink().getId(), veh.getId(), veh.getDriver().getMode(), 1.0)); if (this.getTransitQLink().addTransitToStopQueue(now, veh, this.getLink().getId())) { continue;
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()); } } }
assertEquals(0.5, ql.getSimulatedFlowCapacity()); assertEquals(254.0, ql.getSpaceCap()); QLaneI qlane = ql.getOriginalLane(); assertNotNull(qlane); assertNotNull(ql.getOfferingQLanes()); assertEquals(1, ql.getOfferingQLanes().size()); qlane = ql.getOfferingQLanes().get(0);
assertEquals(0.5, ql.getSimulatedFlowCapacity()); assertEquals(296.0, ql.getSpaceCap()); QLaneI qlane = ql.getOriginalLane(); assertNotNull(qlane); assertNotNull(ql.getOfferingQLanes()); assertEquals(3, ql.getOfferingQLanes().size()); double totalFlowCapacity = 0.0; for (QLaneI qll : ql.getOfferingQLanes()) { if (((QueueWithBuffer)qll).getId().equals(Id.create(2, Lane.class))) { assertEquals(0.5, qll.getSimulatedFlowCapacityPerTimeStep()); totalFlowCapacity += qll.getSimulatedFlowCapacityPerTimeStep(); assertEquals(ql.getSpaceCap(), totalStorageCapacity); assertEquals(1.0, totalFlowCapacity);