public final static double calcSpeedValueBetweenZeroAndOne(QVehicle veh, double inverseSimulatedFlowCapacity, double now, double freespeed){ int cmp = (int) (veh.getEarliestLinkExitTime() + inverseSimulatedFlowCapacity + 2.0); // "inverseSimulatedFlowCapacity" is there to keep vehicles green that only wait for capacity (i.e. have no vehicle // ahead). Especially important with small samples sizes. This is debatable :-). kai, jan'11 double speed = (now > cmp ? 0.0 : 1.0); return speed; }
@Override public int compare(QVehicle arg0, QVehicle arg1) { return Double.compare(arg0.getEarliestLinkExitTime(), arg1.getEarliestLinkExitTime()); }
@Override public int compare(final QVehicle veh1, final QVehicle veh2) { if (veh1.getEarliestLinkExitTime() > veh2.getEarliestLinkExitTime()) { return 1; } if (veh1.getEarliestLinkExitTime() < veh2.getEarliestLinkExitTime()) { return -1; } // Both depart at the same time -> let the one with the larger id be first return veh2.getId().compareTo(veh1.getId()); } }
/** * This method moves transit vehicles from the stop queue directly to the front of the * "queue" of the QLink. An advantage is that this will observe flow * capacity restrictions. */ void handleTransitVehiclesInStopQueue(final double now) { QVehicle veh; // handle transit traffic in stop queue List<QVehicle> departingTransitVehicles = null; while ((veh = transitVehicleStopQueue.peek()) != null) { // there is a transit vehicle. if (veh.getEarliestLinkExitTime() > now) { break; } if (departingTransitVehicles == null) { departingTransitVehicles = new LinkedList<>(); } departingTransitVehicles.add(transitVehicleStopQueue.poll()); } if (departingTransitVehicles != null) { // add all departing transit vehicles at the front of the vehQueue ListIterator<QVehicle> iter = departingTransitVehicles.listIterator(departingTransitVehicles.size()); while (iter.hasPrevious()) { this.road.addTransitSlightlyUpstreamOfStop(iter.previous()) ; } } }
private QVehicle peekFromVehQueue(){ double now = context.getSimTimer().getTimeOfDay() ; QVehicle returnVeh = vehQueue.peek(); if( context.qsimConfig.getLinkDynamics()==LinkDynamics.SeepageQ ) { int maxSeepModeAllowed = 4; if( context.qsimConfig.isRestrictingSeepage() && noOfSeepModeBringFwd == maxSeepModeAllowed) { noOfSeepModeBringFwd = 0; return returnVeh; } VehicleQ<QVehicle> newVehQueue = new PassingVehicleQ(); newVehQueue.addAll(vehQueue); Iterator<QVehicle> it = newVehQueue.iterator(); while(it.hasNext()){ QVehicle veh = newVehQueue.poll(); if( veh.getEarliestLinkExitTime()<=now && context.qsimConfig.getSeepModes().contains(veh.getDriver().getMode()) ) { returnVeh = veh; break; } } } return returnVeh; }
final QVehicle veh = (QVehicle) mveh ; final double remainingTravelTime = veh.getEarliestLinkExitTime() - now ;
&& firstVehOnLink != null && firstVehOnLink.getEarliestLinkExitTime() <= now ) {
while((veh = peekFromVehQueue()) !=null){ if (veh.getEarliestLinkExitTime() > now){ return;