@Override public final void letVehicleDepart(QVehicle vehicle) { double now = context.getSimTimer().getTimeOfDay(); MobsimDriverAgent driver = vehicle.getDriver(); if (driver == null) throw new RuntimeException("Vehicle cannot depart without a driver!"); EventsManager eventsManager = context.getEventsManager(); eventsManager.processEvent(new PersonEntersVehicleEvent(now, driver.getId(), vehicle.getId())); this.addDepartingVehicle(vehicle); }
String personString = atts.getValue(PersonEntersVehicleEvent.ATTRIBUTE_PERSON); String vehicleString = atts.getValue(PersonEntersVehicleEvent.ATTRIBUTE_VEHICLE); this.events.processEvent(new PersonEntersVehicleEvent(time, Id.create(personString, Person.class), Id.create(vehicleString, Vehicle.class))); } else if (PersonLeavesVehicleEvent.EVENT_TYPE.equals(eventType)) { Id<Person> pId = Id.create(atts.getValue(PersonLeavesVehicleEvent.ATTRIBUTE_PERSON), Person.class);
@Override public final boolean insertPassengerIntoVehicle(MobsimAgent passenger, Id<Vehicle> vehicleId) { double now = context.getSimTimer().getTimeOfDay(); QVehicle vehicle = this.getParkedVehicle(vehicleId); // if the vehicle is not parked at the link, mark the agent as passenger waiting for vehicle if (vehicle == null) { registerPassengerAgentWaitingForCar(passenger, vehicleId); return false; } else { boolean added = vehicle.addPassenger((PassengerAgent) passenger); if (!added) { log.warn("Passenger " + passenger.getId().toString() + " could not be inserted into vehicle " + vehicleId.toString() + " since there is no free seat available!"); return false; } ((PassengerAgent) passenger).setVehicle(vehicle); EventsManager eventsManager = context.getEventsManager(); eventsManager.processEvent(new PersonEntersVehicleEvent(now, passenger.getId(), vehicle.getId())); // TODO: allow setting passenger's currentLinkId to null return true; } }
if (prevLeg.getMode().equals(TransportMode.car)) { try { eventQueue.add(new PersonEntersVehicleEvent(prevEndTime, personId, personId)); eventQueue.add(new VehicleEntersTrafficEvent(prevEndTime,personId, prevLeg.getRoute().getStartLinkId(),personId, TransportMode.car,1.0)); NetworkRoute croute = (NetworkRoute) prevLeg.getRoute(); vehicleId = Id.create("dummy", Vehicle.class); eventQueue.add(new PersonEntersVehicleEvent(trip.accessTime_s(), personId, vehicleId)); // dummyVehicleId)); eventQueue.add(new PersonLeavesVehicleEvent(trip.egressTime_s(), personId, vehicleId)); // dummyVehicleId)); travelTime = trip.egressTime_s() - prevEndTime;
public void addDepartingAgent(MobsimAgent mobsimAgent, double now) { this.waitingAfterActivityAgents.add(mobsimAgent); this.activateLink(); this.simEngine.getEventsManager().processEvent( new PersonEntersVehicleEvent(now, mobsimAgent.getId(), Id.create(mobsimAgent.getId(), Vehicle.class))); this.simEngine.getEventsManager().processEvent( new VehicleEntersTrafficEvent(now, mobsimAgent.getId(), link.getId(), Id.create(mobsimAgent.getId(), Vehicle.class), mobsimAgent.getMode(), 1.0)); }
@Override public boolean handlePassengerEntering(PTPassengerAgent passenger, MobsimVehicle vehicle, Id<TransitStopFacility> fromStopFacilityId, double time) { boolean handled = vehicle.addPassenger(passenger); if(handled){ this.agentTracker.removeAgentFromStop(passenger, fromStopFacilityId); MobsimAgent planAgent = (MobsimAgent) passenger; // if (planAgent instanceof PersonDriverAgentImpl) { Id<Person> agentId = planAgent.getId(); Id<Link> linkId = planAgent.getCurrentLinkId(); this.internalInterface.unregisterAdditionalAgentOnLink(agentId, linkId) ; // } MobsimDriverAgent agent = (MobsimDriverAgent) passenger; eventsManager.processEvent(new PersonEntersVehicleEvent(time, agent.getId(), vehicle.getVehicle().getId())); } return handled; }
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; }
private void boardPassengers() { // using the vehicle provider might give access to a vehicle which is // used by somebody else, if the sequence is incorrect. // Using getVehicle() looks safer, as it should fail if the vehicle // is somewhere else. // It remains however problematic, as it is not clear whether agents will continue // to be given the vehicle or not... final MobsimVehicle vehicle = getVehicle();// vehicleProvider.getVehicle( delegate.getPlannedVehicleId() ); final EventsManager events = ((QSim) internalInterface.getMobsim()).getEventsManager(); for ( PassengerAgent passenger : passengersToBoard ) { assert passenger.getCurrentLinkId().equals( getCurrentLinkId() ) : passenger+" is at "+passenger.getCurrentLinkId()+" instead of "+getCurrentLinkId()+" for driver "+this; assert ((Leg) getCurrentPlanElement()).getMode().equals( JointActingTypes.DRIVER ) : getCurrentPlanElement(); assert ((DriverRoute) ((Leg) getCurrentPlanElement()).getRoute()).getPassengersIds().contains( passenger.getId() ) : passenger+" not in "+((DriverRoute) ((Leg) getCurrentPlanElement()).getRoute()).getPassengersIds()+" for driver "+this; final boolean isAdded = vehicle.addPassenger( passenger ); if ( !isAdded ) { // do not know how to handle that... throw new RuntimeException( passenger+" could not be added to vehicle "+vehicle ); } events.processEvent( new PersonEntersVehicleEvent(internalInterface.getMobsim().getSimTimer().getTimeOfDay(), passenger.getId(), vehicle.getId())); } passengersToBoard.clear(); final DriverRoute dr = (DriverRoute) ((Leg) getCurrentPlanElement()).getRoute(); assert vehicle.getPassengers().size() == dr.getPassengersIds().size() && IdentifiableCollectionsUtils.containsAll( dr.getPassengersIds() , vehicle.getPassengers() ) : vehicle.getPassengers()+" != "+dr.getPassengersIds()+" for driver "+this; }
public void testReadWriteXml() { Person person = PopulationUtils.getFactory().createPerson(Id.create(1, Person.class)); VehicleType vehicleType = new VehicleTypeImpl(Id.create("testVehType", VehicleType.class)); Vehicle vehicle = new VehicleImpl(Id.create(80, Vehicle.class), vehicleType); PersonEntersVehicleEvent event = new PersonEntersVehicleEvent(5.0 * 3600 + 11.0 * 60, person.getId(), vehicle.getId()); PersonEntersVehicleEvent event2 = XmlEventsTester.testWriteReadXml(getOutputDirectory() + "events.xml", event); assertEquals("wrong time of event.", 5.0 * 3600 + 11.0 * 60, event2.getTime(), EPSILON); assertEquals("wrong vehicle id.", "80", event2.getVehicleId().toString()); } }
tl.handleEvent(new PersonEntersVehicleEvent(7.0*3600-20, Id.create("ptDriver1", Person.class), vehicleIdDep1)); tl.handleEvent(new PersonEntersVehicleEvent(7.0*3600-5, Id.create(0, Person.class), vehicleIdDep1)); tl.handleEvent(new VehicleDepartsAtFacilityEvent(7.0*3600+10, vehicleIdDep1, stop1.getId(), 0)); tl.handleEvent(new PersonEntersVehicleEvent(7.1*3600, Id.create(1, Person.class), vehicleIdDep1)); tl.handleEvent(new PersonEntersVehicleEvent(7.1*3600+5, Id.create(2, Person.class), vehicleIdDep1)); tl.handleEvent(new VehicleDepartsAtFacilityEvent(7.1*3600+25, vehicleIdDep1, stop2.getId(), 0)); tl.handleEvent(new PersonEntersVehicleEvent(7.2*3600, Id.create(3, Person.class), vehicleIdDep1)); tl.handleEvent(new VehicleDepartsAtFacilityEvent(7.2*3600+20, vehicleIdDep1, stop3.getId(), 0)); tl.handleEvent(new PersonEntersVehicleEvent(7.25*3600, Id.create("carDriver1", Person.class), Id.create("car1", Vehicle.class)));
@Test public void testCreatesLegWithRoute() { Scenario scenario = createTriangularNetwork(); EventsToLegs eventsToLegs = new EventsToLegs(scenario); RememberingLegHandler lh = new RememberingLegHandler(); eventsToLegs.addLegHandler(lh); Id<Person> agentId = Id.create("1", Person.class); Id<Vehicle> vehId = Id.create("veh1", Vehicle.class); eventsToLegs.handleEvent(new PersonDepartureEvent(10.0, agentId, Id.createLinkId("l1"), "car")); eventsToLegs.handleEvent(new PersonEntersVehicleEvent(10.0, agentId, vehId)); eventsToLegs.handleEvent(new VehicleEntersTrafficEvent(10.0, agentId, Id.createLinkId("l1"), vehId, "car", 1.0)); eventsToLegs.handleEvent(new LinkLeaveEvent(10.0, vehId, Id.createLinkId("l1"))); eventsToLegs.handleEvent(new LinkEnterEvent(11.0, vehId, Id.createLinkId("l2"))); eventsToLegs.handleEvent(new LinkLeaveEvent(15.0, vehId, Id.createLinkId("l2"))); eventsToLegs.handleEvent(new LinkEnterEvent(16.0, vehId, Id.createLinkId("l3"))); eventsToLegs.handleEvent(new VehicleLeavesTrafficEvent(30.0, agentId, Id.createLinkId("l3"), vehId, "car", 1.0)); eventsToLegs.handleEvent(new PersonArrivalEvent(30.0, agentId, Id.createLinkId("l3"), "car")); Assert.assertNotNull(lh.handledLeg); Assert.assertEquals(10.0,lh.handledLeg.getLeg().getDepartureTime(), 1e-9); Assert.assertEquals(20.0,lh.handledLeg.getLeg().getTravelTime(), 1e-9); Assert.assertEquals(20.0,lh.handledLeg.getLeg().getRoute().getTravelTime(), 1e-9); Assert.assertEquals(550.0,lh.handledLeg.getLeg().getRoute().getDistance(), 1e-9); }
scoring2.handleEvent( departure ); final Event enterVehicle = new PersonEntersVehicleEvent(leg.getDepartureTime() + 100, Id.create( 1, Person.class ), Id.create( 1, Vehicle.class )); scoring1.handleEvent( enterVehicle ); scoring2.handleEvent( enterVehicle ); scoring2.handleEvent( departure ); final Event enterVehicle = new PersonEntersVehicleEvent(leg.getDepartureTime() + 100, Id.create( 1, Person.class ), Id.create( 1, Vehicle.class )); scoring1.handleEvent( enterVehicle ); scoring2.handleEvent( enterVehicle ); scoring2.handleEvent( departure ); final Event enterVehicle = new PersonEntersVehicleEvent(leg.getDepartureTime() + 100, Id.create( 1, Person.class ), Id.create( 1, Vehicle.class )); scoring1.handleEvent( enterVehicle ); scoring2.handleEvent( enterVehicle );
scoring2.handleEvent( departure ); final Event enterVehicle = new PersonEntersVehicleEvent(leg.getDepartureTime() + 100, Id.create( 1, Person.class ), Id.create( 1, Vehicle.class )); scoring1.handleEvent( enterVehicle ); scoring2.handleEvent( enterVehicle );
return new PersonEntersVehicleEvent(pe.getPersonEntersVehicle().getTime(), Id.createPersonId(pe.getPersonEntersVehicle().getPersId().getId()), Id.createVehicleId(pe.getPersonEntersVehicle().getVehId().getId()));