public MobsimAgent getNextWaitingAgent(double now) { MobsimAgent personAgent = waitingToLeaveAgents.poll(); if (personAgent != null) { this.simEngine.getEventsManager().processEvent(new LinkLeaveEvent(now, Id.create(personAgent.getId(), Vehicle.class), link.getId())); } return personAgent; }
private double calcRouteTravelTime(NetworkRoute route, double startTime, TravelTime travelTime, Network network, Queue<Event> eventQueue, Id agentId) { double tt = 0; if (route.getStartLinkId() != route.getEndLinkId()) { Id<Link> startLink = route.getStartLinkId(); double linkEnterTime = startTime; LinkEnterEvent linkEnterEvent = null; LinkLeaveEvent linkLeaveEvent = new LinkLeaveEvent(++linkEnterTime, agentId, startLink); eventQueue.add(linkLeaveEvent); double linkLeaveTime = linkEnterTime; List<Id<Link>> routeLinkIds = route.getLinkIds(); for (Id<Link> routeLinkId : routeLinkIds) { if (linkEnterTime > 1E16) { int mmm = 0; } linkEnterTime = linkLeaveTime; linkEnterEvent = new LinkEnterEvent(linkEnterTime, agentId, routeLinkId); eventQueue.add(linkEnterEvent); double linkTime = travelTime.getLinkTravelTime(network.getLinks().get(routeLinkId), linkEnterTime, null, null); tt += Math.max(linkTime, 1.0); linkLeaveTime = Math.max(linkEnterTime + 1, linkEnterTime + linkTime); linkLeaveEvent = new LinkLeaveEvent(linkLeaveTime, agentId, routeLinkId); eventQueue.add(linkLeaveEvent); } tt = linkLeaveTime - startTime; } LinkEnterEvent linkEnterEvent = new LinkEnterEvent(startTime + tt, agentId, route.getEndLinkId()); eventQueue.add(linkEnterEvent); return tt + travelTime.getLinkTravelTime(network.getLinks().get(route.getEndLinkId()), tt + startTime, null, null); }
@Override public void run() { Id<Link> linkId = Id.create("100", Link.class); for (int i = 0; i < this.nOfEvents; i++) { this.eventsManager.processEvent(new LinkLeaveEvent(60.0, Id.create(i, Vehicle.class), linkId)); } } }
@Override public void run() { Id<Link> linkId = Id.create("100", Link.class); for (int i = 0; i < this.nOfEvents; i++) { this.eventsManager.processEvent(new LinkLeaveEvent(60.0, Id.create(i, Vehicle.class), linkId)); } } }
private void moveVehicleFromInlinkToAbort(final QVehicle veh, final QLaneI fromLane, final double now, Id<Link> currentLinkId) { fromLane.popFirstVehicle(); // --> this.context.getEventsManager().processEvent(new LinkLeaveEvent(now, veh.getId(), currentLinkId)); // <-- // first treat the passengers: for ( PassengerAgent pp : veh.getPassengers() ) { if ( pp instanceof MobsimAgent ) { ((MobsimAgent)pp).setStateToAbort(now); netsimEngine.arrangeNextAgentState((MobsimAgent)pp) ; } else if ( wrnCnt < 1 ) { wrnCnt++ ; log.warn("encountering PassengerAgent that cannot be cast into a MobsimAgent; cannot say if this is a problem" ) ; log.warn(Gbl.ONLYONCE) ; } } // now treat the driver: veh.getDriver().setStateToAbort(now) ; netsimEngine.arrangeNextAgentState(veh.getDriver()) ; }
@Override public void processEvent() { Road road = (Road) this.getReceivingUnit(); Event event = null; event = new LinkLeaveEvent(this.getMessageArrivalTime(), Id.create(vehicle.getOwnerPerson().getId(), org.matsim.vehicles.Vehicle.class), road.getLink().getId()); eventsManager.processEvent(event); }
public final void testHandlerHierarchy() { EventsManager events = EventsUtils.createEventsManager(); Id<Link> linkId = Id.create("1", Link.class); Id<Vehicle> vehId = Id.create("1", Vehicle.class); EventHandler cc = new B(); events.processEvent(new LinkLeaveEvent(0., vehId, linkId)); assertEquals(this.eventHandled, 0); events.addHandler(cc); events.processEvent(new LinkLeaveEvent(0., vehId, linkId)); assertEquals(this.eventHandled, 1); }
public final void testHierarchicalReset() { EventsManager events = EventsUtils.createEventsManager(); Id<Link> linkId = Id.create("1", Link.class); Id<Vehicle> vehId = Id.create("1", Vehicle.class); //first test if handleEvent is not called twice for A and for C C cc = new C(); events.processEvent(new LinkLeaveEvent(0., vehId, linkId)); assertEquals(this.eventHandled, 0); events.addHandler(cc); events.processEvent(new LinkLeaveEvent(0., vehId, linkId)); assertEquals(this.eventHandled, 1); //then test the reset events.resetHandlers(0); assertEquals(1, this.resetCalled); }
private void moveVehicleFromInlinkToOutlink(final QVehicle veh, Id<Link> currentLinkId, final QLaneI fromLane, Id<Link> nextLinkId, QLaneI nextQueueLane) { double now = this.context.getSimTimer().getTimeOfDay() ; fromLane.popFirstVehicle(); // --> // network.simEngine.getMobsim().getEventsManager().processEvent(new LaneLeaveEvent(now, veh.getId(), currentLinkId, fromLane.getId())); this.context.getEventsManager().processEvent(new LinkLeaveEvent(now, veh.getId(), currentLinkId)); // <-- veh.getDriver().notifyMoveOverNode( nextLinkId ); // --> this.context.getEventsManager().processEvent(new LinkEnterEvent(now, veh.getId(), nextLinkId )); // <-- nextQueueLane.addFromUpstream(veh); }
if (veh.getDriver().chooseNextLinkId().toString().equals(tr.getLinkId())) { this.em.processEvent(new LinkLeaveEvent(time, veh.getId(), veh.getCurrentLink().getId())); veh.getDriver().notifyMoveOverNode(nextLinkId); this.em.processEvent(new LinkEnterEvent(time, veh.getId(), nextLinkId)); throw new RuntimeException("DS link is full, spill-back to external is not yet implemented!"); this.em.processEvent(new LinkLeaveEvent(time, v.getId(), v.getCurrentLink().getId())); v.getDriver().notifyMoveOverNode(ql.getLink().getId()); ql.addFromUpstream(v);
/** * Some people use the ids as names, including special characters in there... so make sure attribute * values are correctly encoded when written to a file. */ @Test public void testSpecialCharacters() { String filename = this.utils.getOutputDirectory() + "testEvents.xml"; EventWriterXML writer = new EventWriterXML(filename); writer.handleEvent(new LinkLeaveEvent(3600.0, Id.create("vehicle>3", Vehicle.class), Id.create("link<2", Link.class))); writer.handleEvent(new LinkLeaveEvent(3601.0, Id.create("vehicle\"4", Vehicle.class), Id.create("link'3", Link.class))); writer.closeFile(); Assert.assertTrue(new File(filename).exists()); EventsManager events = EventsUtils.createEventsManager(); EventsCollector collector = new EventsCollector(); events.addHandler(collector); // this is already a test: is the XML valid so it can be parsed again? new MatsimEventsReader(events).readFile(filename); Assert.assertEquals("there must be 2 events.", 2, collector.getEvents().size()); LinkLeaveEvent event1 = (LinkLeaveEvent) collector.getEvents().get(0); LinkLeaveEvent event2 = (LinkLeaveEvent) collector.getEvents().get(1); Assert.assertEquals("link<2", event1.getLinkId().toString()); Assert.assertEquals("vehicle>3", event1.getVehicleId().toString()); Assert.assertEquals("link'3", event2.getLinkId().toString()); Assert.assertEquals("vehicle\"4", event2.getVehicleId().toString()); }
@Override public void run() { Id<Link> linkId = Id.create("100", Link.class); for (int i = 0; i < 100; i++) { Id<Person> agentId = Id.create(i, Person.class); Id<Vehicle> vehId = Id.create(i, Vehicle.class); this.eventsManager.processEvent(new PersonDepartureEvent(60.0, agentId, linkId, TransportMode.car)); this.eventsManager.processEvent(new VehicleEntersTrafficEvent(60.0, agentId, linkId, vehId, TransportMode.car, 1.0)); this.eventsManager.processEvent(new LinkLeaveEvent(60.0, vehId, linkId)); } for (int i = 100; i < 150; i++) { Id<Person> agentId = Id.create(i, Person.class); Id<Vehicle> vehId = Id.create(i, Vehicle.class); this.eventsManager.processEvent(new PersonDepartureEvent(60.0, agentId, linkId, TransportMode.walk)); this.eventsManager.processEvent(new VehicleEntersTrafficEvent(60.0, agentId, linkId, vehId, TransportMode.walk, 1.0)); this.eventsManager.processEvent(new LinkLeaveEvent(60.0, vehId, linkId)); } } }
public void testWriteReadXml() { final LinkLeaveEvent event1 = new LinkLeaveEvent(68423.98, Id.create("veh", Vehicle.class), Id.create(".235", Link.class)); final LinkLeaveEvent event2 = XmlEventsTester.testWriteReadXml(getOutputDirectory() + "events.xml", event1); assertEquals(event1.getTime(), event2.getTime(), EPSILON); assertEquals(event1.getLinkId(), event2.getLinkId()); assertEquals(event1.getVehicleId(), event2.getVehicleId()); } }
@Test public void testOneTravelTimeCalculatorPerMode() { Config config = ConfigUtils.createConfig(); config.travelTimeCalculator().setAnalyzedModes("car,bike"); config.travelTimeCalculator().setSeparateModes(true); Scenario scenario = ScenarioUtils.createScenario(config); Node node0 = scenario.getNetwork().getFactory().createNode(Id.createNodeId(0), new Coord(0, 0)); Node node1 = scenario.getNetwork().getFactory().createNode(Id.createNodeId(1), new Coord(1, 0)); scenario.getNetwork().addNode(node0); scenario.getNetwork().addNode(node1); Id<Link> linkId = Id.createLinkId(0); Link link = scenario.getNetwork().getFactory().createLink(linkId, node0, node1); scenario.getNetwork().addLink(link); com.google.inject.Injector injector = Injector.createInjector(config, new TravelTimeCalculatorModule(), new EventsManagerModule(), new ScenarioByInstanceModule(scenario)); TravelTimeCalculator car = injector.getInstance(Key.get(TravelTimeCalculator.class, Names.named("car"))); TravelTimeCalculator bike = injector.getInstance(Key.get(TravelTimeCalculator.class, Names.named("bike"))); EventsManager events = injector.getInstance(EventsManager.class); events.processEvent(new VehicleEntersTrafficEvent(0.0, Id.createPersonId(0), linkId, Id.createVehicleId(0), "car", 0.0)); events.processEvent(new LinkEnterEvent(0.0, Id.createVehicleId(0), linkId)); events.processEvent(new LinkLeaveEvent(2.0, Id.createVehicleId(0), linkId)); events.processEvent(new VehicleLeavesTrafficEvent(2.0, Id.createPersonId(0), linkId, Id.createVehicleId(0), "car", 0.0)); events.processEvent(new VehicleEntersTrafficEvent(0.0, Id.createPersonId(1), linkId, Id.createVehicleId(1), "bike", 0.0)); events.processEvent(new LinkEnterEvent(0.0, Id.createVehicleId(1), linkId)); events.processEvent(new LinkLeaveEvent(8.0, Id.createVehicleId(1), linkId)); events.processEvent(new VehicleLeavesTrafficEvent(8.0, Id.createPersonId(1), linkId, Id.createVehicleId(1), "bike", 0.0)); assertThat(car.getLinkTravelTime(link, 0.0), is(2.0)); assertThat(bike.getLinkTravelTime(link, 0.0), is(8.0)); }
/** * @author mrieser / senozon */ public void testGetLinkTravelTime_usePtVehiclesWithoutStop() { Network network = NetworkUtils.createNetwork(); TravelTimeCalculatorConfigGroup config = new TravelTimeCalculatorConfigGroup(); config.setTraveltimeBinSize(900); TravelTimeCalculator ttc = new TravelTimeCalculator(network, config); Node n1 = network.getFactory().createNode(Id.create(1, Node.class), new Coord(0, 0)); Node n2 = network.getFactory().createNode(Id.create(2, Node.class), new Coord(1000, 0)); network.addNode(n1); network.addNode(n2); Link link1 = network.getFactory().createLink(Id.create(1, Link.class), n1, n2); network.addLink(link1); Id<Vehicle> ptVehId = Id.create("ptVeh", Vehicle.class); Id<Vehicle> ivVehId = Id.create("ivVeh", Vehicle.class); ttc.handleEvent(new LinkEnterEvent(100, ivVehId, link1.getId())); ttc.handleEvent(new LinkEnterEvent(150, ptVehId, link1.getId())); ttc.handleEvent(new LinkLeaveEvent(200, ivVehId, link1.getId())); ttc.handleEvent(new LinkLeaveEvent(300, ptVehId, link1.getId())); Assert.assertEquals("The time of transit vehicles at stop should not be counted", 125.0, ttc.getLinkTravelTimes().getLinkTravelTime(link1, 200, null, null), 1e-8); }
@Test public void testOneTravelTimeCalculatorForAll() { Config config = ConfigUtils.createConfig(); config.travelTimeCalculator().setAnalyzedModes("car,bike"); Scenario scenario = ScenarioUtils.createScenario(config); Node node0 = scenario.getNetwork().getFactory().createNode(Id.createNodeId(0), new Coord(0, 0)); Node node1 = scenario.getNetwork().getFactory().createNode(Id.createNodeId(1), new Coord(1, 0)); scenario.getNetwork().addNode(node0); scenario.getNetwork().addNode(node1); Id<Link> linkId = Id.createLinkId(0); Link link = scenario.getNetwork().getFactory().createLink(linkId, node0, node1); scenario.getNetwork().addLink(link); com.google.inject.Injector injector = Injector.createInjector(config, new TravelTimeCalculatorModule(), new EventsManagerModule(), new ScenarioByInstanceModule(scenario)); TravelTimeCalculator testee = injector.getInstance(TravelTimeCalculator.class); EventsManager events = injector.getInstance(EventsManager.class); events.processEvent(new VehicleEntersTrafficEvent(0.0, Id.createPersonId(0), linkId, Id.createVehicleId(0), "car", 0.0)); events.processEvent(new LinkEnterEvent(0.0, Id.createVehicleId(0), linkId)); events.processEvent(new LinkLeaveEvent(2.0, Id.createVehicleId(0), linkId)); events.processEvent(new VehicleLeavesTrafficEvent(2.0, Id.createPersonId(0), linkId, Id.createVehicleId(0), "car", 0.0)); events.processEvent(new VehicleEntersTrafficEvent(0.0, Id.createPersonId(1), linkId, Id.createVehicleId(1), "bike", 0.0)); events.processEvent(new LinkEnterEvent(0.0, Id.createVehicleId(1), linkId)); events.processEvent(new LinkLeaveEvent(8.0, Id.createVehicleId(1), linkId)); events.processEvent(new VehicleLeavesTrafficEvent(8.0, Id.createPersonId(1), linkId, Id.createVehicleId(1), "bike", 0.0)); assertThat(testee.getLinkTravelTime(link, 0.0), is(5.0)); }
/** * @author mrieser / senozon */ public void testGetLinkTravelTime_ignorePtVehiclesAtStop() { Network network = NetworkUtils.createNetwork(); TravelTimeCalculatorConfigGroup config = new TravelTimeCalculatorConfigGroup(); config.setTraveltimeBinSize(900); TravelTimeCalculator ttc = new TravelTimeCalculator(network, config); Node n1 = network.getFactory().createNode(Id.create(1, Node.class), new Coord(0, 0)); Node n2 = network.getFactory().createNode(Id.create(2, Node.class), new Coord(1000, 0)); network.addNode(n1); network.addNode(n2); Link link1 = network.getFactory().createLink(Id.create(1, Link.class), n1, n2); network.addLink(link1); Id<Vehicle> ptVehId = Id.create("ptVeh", Vehicle.class); Id<Vehicle> ivVehId = Id.create("ivVeh", Vehicle.class); ttc.handleEvent(new LinkEnterEvent(100, ivVehId, link1.getId())); ttc.handleEvent(new LinkEnterEvent(150, ptVehId, link1.getId())); ttc.handleEvent(new LinkLeaveEvent(200, ivVehId, link1.getId())); ttc.handleEvent(new VehicleArrivesAtFacilityEvent(240, ptVehId, Id.create("stop", TransitStopFacility.class), 0)); ttc.handleEvent(new LinkLeaveEvent(350, ptVehId, link1.getId())); Assert.assertEquals("The time of transit vehicles at stop should not be counted", 100.0, ttc.getLinkTravelTimes().getLinkTravelTime(link1, 200, null, null), 1e-8); }
@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); }
ttc.handleEvent(new LinkLeaveEvent(200, vehId, link1.getId())); ttc.handleEvent(new LinkEnterEvent(200, vehId, link2.getId())); ttc.handleEvent(new LinkLeaveEvent(300, vehId, link2.getId()));
double linkTravelTime2 = 10.0 * 60; // 10minutes in forth time bin ttcalc.handleEvent(new LinkEnterEvent(firstTimeBinStart, vehId, link1.getId())); ttcalc.handleEvent(new LinkLeaveEvent(firstTimeBinStart + linkTravelTime1, vehId, link1.getId())); ttcalc.handleEvent(new LinkEnterEvent(firstTimeBinStart + 3*timeBinSize, vehId, link1.getId())); ttcalc.handleEvent(new LinkLeaveEvent(firstTimeBinStart + 3*timeBinSize + linkTravelTime2, vehId, link1.getId()));