@Override public String getMode() { return delegate.getMode(); }
public final void positionAgentGivenDistanceFromFNode(final Collection<AgentSnapshotInfo> positions, Coord startCoord, Coord endCoord, double lengthOfCurve, QVehicle veh, double distanceFromFromNode, Integer lane, double speedValueBetweenZeroAndOne){ // I think that the main reason why this exists as public method is that AssignmentEmulatingQLane wants to use it directly. // The reason for this, in return, is that positionVehiclesAlongLine(...) is a service method for queue models only. kai, apr'16 MobsimDriverAgent driverAgent = veh.getDriver(); AgentSnapshotInfo pos = snapshotInfoFactory.createAgentSnapshotInfo(driverAgent.getId(), startCoord, endCoord, distanceFromFromNode, lane, lengthOfCurve); pos.setColorValueBetweenZeroAndOne(speedValueBetweenZeroAndOne); if (driverAgent instanceof TransitDriverAgent){ pos.setAgentState(AgentState.TRANSIT_DRIVER); } else if ( driverAgent.getMode().equals(TransportMode.car)) { pos.setAgentState(AgentState.PERSON_DRIVING_CAR); } else { pos.setAgentState(AgentState.PERSON_OTHER_MODE ); } if ( scenario.getPopulation().getPersonAttributes().getAttribute( driverAgent.getId().toString(), "marker" ) != null ) { pos.setAgentState( AgentState.PERSON_OTHER_MODE ) ; } this.positionPassengers(positions, veh.getPassengers(), distanceFromFromNode, startCoord, endCoord, lengthOfCurve, lane+5, speedValueBetweenZeroAndOne); // (this is deliberately first memorizing "pos" but then filling in the passengers first) positions.add(pos); }
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; }
@Override public void endLegAndComputeNextState(final double now) { final String mode = delegate.getMode();
/* package */ final void letVehicleArrive(QVehicle qveh) { addParkedVehicle(qveh); double now = context.getSimTimer().getTimeOfDay();; context.getEventsManager().processEvent(new VehicleLeavesTrafficEvent(now , qveh.getDriver().getId(), this.link.getId(), qveh.getId(), qveh.getDriver().getMode(), 1.0 ) ) ; this.netsimEngine.letVehicleArrive(qveh); makeVehicleAvailableToNextDriver(qveh); }
/** * Move as many waiting cars to the link as it is possible */ private void moveWaitToRoad() { while (!getWaitingList().isEmpty()) { if (!qlane.isAcceptingFromWait(this.getWaitingList().peek())) { return; } QVehicle veh = this.getWaitingList().poll(); double now = context.getSimTimer().getTimeOfDay() ; context.getEventsManager().processEvent( new VehicleEntersTrafficEvent(now, veh.getDriver().getId(), this.getLink().getId(), veh.getId(), veh.getDriver().getMode(), 1.0)); if ( this.getTransitQLink().addTransitToStopQueue(now, veh, this.getLink().getId()) ) { continue ; } if ( veh.getDriver().isWantingToArriveOnCurrentLink() ) { // If the driver wants to stop (again) on this link, give them a special treatment. // addFromWait doesn't work here, because after that, they cannot stop anymore. qlane.addTransitSlightlyUpstreamOfStop(veh) ; continue; } qlane.addFromWait(veh); } }
new VehicleLeavesTrafficEvent(now, driver.getId(), link.getId(), Id.create(driver.getId(), Vehicle.class), driver.getMode(), 1.0));
context .getEventsManager() .processEvent( new VehicleEntersTrafficEvent(now, veh.getDriver().getId(), this.getLink().getId(), veh.getId(), veh.getDriver().getMode(), 1.0));
new PersonStuckEvent(now, veh.getDriver().getId(), veh.getCurrentLink().getId(), veh.getDriver().getMode())); context.getAgentCounter().incLost(); context.getAgentCounter().decLiving(); new PersonStuckEvent(now, veh.getDriver().getId(), veh.getCurrentLink().getId(), veh.getDriver().getMode())); this.context.getAgentCounter().incLost(); this.context.getAgentCounter().decLiving();
@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; }
if(context.qsimConfig.isRestrictingSeepage() && context.qsimConfig.getLinkDynamics()==LinkDynamics.SeepageQ && context.qsimConfig.getSeepModes().contains(veh.getDriver().getMode()) ) { noOfSeepModeBringFwd++;