@Override public OneTaxiRequest createRequest(Id<Request> id, MobsimPassengerAgent passenger, Link fromLink, Link toLink, double departureTime, double submissionTime) { return new OneTaxiRequest(id, passenger.getId(), TransportMode.taxi, fromLink, toLink, departureTime, submissionTime); } }
@Override public void notifyPassengerIsReadyForDeparture(MobsimPassengerAgent passenger, double now) { PassengerRequest request = getRequestForPassenger(passenger.getId()); if (passengerEngine.pickUpPassenger(this, driver, request, now)) { passengersPickedUp++; } else { throw new IllegalStateException("The passenger is not on the link or not available for departure!"); } }
@Override public void notifyPassengerIsReadyForDeparture(MobsimPassengerAgent passenger, double now) { if (now < expectedEndTime) { return;// pick up only at the end of stop activity } PassengerRequest request = getRequestForPassenger(passenger.getId()); if (passengerEngine.pickUpPassenger(this, driver, request, now)) { passengersPickedUp++; } else { throw new IllegalStateException("The passenger is not on the link or not available for departure!"); } }
@Override public void notifyPassengerIsReadyForDeparture(MobsimPassengerAgent passenger, double now) { if (passenger.getId().equals(request.getPassengerId())) { throw new IllegalArgumentException("I am waiting for a different passenger!"); } passengerAboard = passengerEngine.pickUpPassenger(this, driver, request, now); if (!passengerAboard) { throw new IllegalStateException("The passenger is not on the link or not available for departure!"); } } }
public boolean pickUpPassenger(PassengerPickupActivity pickupActivity, MobsimDriverAgent driver, PassengerRequest request, double now) { Id<Link> linkId = driver.getCurrentLinkId(); MobsimPassengerAgent passenger = passengersByRequestId.get(request.getId()); if (passenger.getCurrentLinkId() != linkId || passenger.getState() != State.LEG || !passenger.getMode() .equals(mode)) { awaitingPickupStorage.storeAwaitingPickup(request, pickupActivity); return false;// wait for the passenger } if (internalInterface.unregisterAdditionalAgentOnLink(passenger.getId(), driver.getCurrentLinkId()) == null) { // the passenger has already been picked up and is on another taxi trip // seems there have been at least 2 requests made by this passenger for this location awaitingPickupStorage.storeAwaitingPickup(request, pickupActivity); return false;// wait for the passenger (optimistically, he/she should appear soon) } MobsimVehicle mobVehicle = driver.getVehicle(); mobVehicle.addPassenger(passenger); passenger.setVehicle(mobVehicle); eventsManager.processEvent(new PersonEntersVehicleEvent(now, passenger.getId(), mobVehicle.getId())); return true; }
public void dropOffPassenger(MobsimDriverAgent driver, PassengerRequest request, double now) { MobsimPassengerAgent passenger = passengersByRequestId.remove(request.getId()); MobsimVehicle mobVehicle = driver.getVehicle(); mobVehicle.removePassenger(passenger); passenger.setVehicle(null); eventsManager.processEvent(new PersonLeavesVehicleEvent(now, passenger.getId(), mobVehicle.getId())); passenger.notifyArrivalOnLinkByNonNetworkMode(passenger.getDestinationLinkId()); passenger.endLegAndComputeNextState(now); internalInterface.arrangeNextAgentState(passenger); } }