public void handleEvent(LinkEnterEvent event) { scoringFunction.handleEvent(new LinkEnterEvent(event.getTime(),getVehicle().getVehicleId(),event.getLinkId())); /* why can't we do something like: scoringFunction.handleEvent(event); (causes test failures in playground kturner), Theresa Dec'2015 */ currentRoute.add(event.getLinkId()); }
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 handleEvent(final VehicleEntersTrafficEvent event) { delegate.handleEvent(event); Link link = this.network.getLinks().get(event.getLinkId()); if (handler instanceof DistanceTollBehaviour || handler instanceof LinkTollBehaviour) { /* we do not handle wait2link-events for these tolls, because the agent * should not pay twice for this link, and he (likely) paid already when * arriving at this link. */ return; } else { // Just like a LinkEnterEvent this.handler.handleEvent(new LinkEnterEvent(event.getTime(), event.getVehicleId(), event.getLinkId()), link); } }
public void addAgentFromIntersection(MobsimAgent mobsimAgent, double now) { this.activateLink(); this.addAgent(mobsimAgent, now); this.simEngine.getEventsManager().processEvent(new LinkEnterEvent(now, Id.create(mobsimAgent.getId(), Vehicle.class), link.getId())); }
e = new LinkLeaveEvent(time, vehicleId, linkId); } else if (typeIndex == LinkEnter.ordinal()) { e = new LinkEnterEvent(time, vehicleId, linkId); } else if (typeIndex == PersonArrival.ordinal()) { e = new PersonArrivalEvent(time, Id.createPersonId(vehicleId), linkId, "car");
@Override public void addFromUpstream(QVehicle veh) { double now = context.getSimTimer().getTimeOfDay() ; Id<Link> nextL = veh.getDriver().chooseNextLinkId(); Id<Node> leaveId = toQNode.getNode().getId() ; // e.addFromUpstream( getLink().getFromNode().getId(), leaveId, veh); e.addFromUpstream( veh); em.processEvent(new LinkEnterEvent(now, veh.getId(), getLink().getId())); }
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); }
@Override public void processEvent() { Event event = null; // the first EnterLink in a leg is a Wait2LinkEvent if (vehicle.getLinkIndex() == -1) { event = new VehicleEntersTrafficEvent(this.getMessageArrivalTime(), vehicle.getOwnerPerson().getId(), vehicle.getCurrentLinkId(), Id.create(vehicle.getOwnerPerson().getId(), org.matsim.vehicles.Vehicle.class), null, 1.0); } else { event = new LinkEnterEvent(this.getMessageArrivalTime(), Id.create(vehicle.getOwnerPerson().getId(), org.matsim.vehicles.Vehicle.class), vehicle.getCurrentLinkId()); } eventsManager.processEvent(event); }
this.em.processEvent(new LinkEnterEvent(time, veh.getId(), nextLinkId));
public void testWriteReadXml() { final LinkEnterEvent event1 = new LinkEnterEvent(6823.8, Id.create("veh", Vehicle.class), Id.create("abcd", Link.class)); final LinkEnterEvent event2 = XmlEventsTester.testWriteReadXml(getOutputDirectory() + "events.xml", event1); assertEquals(event1.getTime(), event2.getTime(), EPSILON); assertEquals(event1.getLinkId(), event2.getLinkId()); assertEquals(event1.getVehicleId(), event2.getVehicleId()); } }
@Override public void processEvent() { Event event = null; // schedule enter link event // only, if car leg and is not empty if (vehicle.getCurrentLeg().getMode().equals(TransportMode.car) && (vehicle.getCurrentLinkRoute()!=null && vehicle.getCurrentLinkRoute().length!=0)){ event = new LinkEnterEvent(this.getMessageArrivalTime(), Id.create(vehicle.getOwnerPerson().getId().toString(), org.matsim.vehicles.Vehicle.class), vehicle.getCurrentLinkId()); eventsManager.processEvent(event); } // schedule VehicleLeavesTrafficEvent Id<org.matsim.vehicles.Vehicle> vehicleId = Id.create( this.vehicle.getOwnerPerson().getId() , org.matsim.vehicles.Vehicle.class ) ; event = new VehicleLeavesTrafficEvent(this.getMessageArrivalTime(), this.vehicle.getOwnerPerson().getId(), this.vehicle.getCurrentLinkId(), vehicleId, this.vehicle.getCurrentLeg().getMode(), 1.0 ); eventsManager.processEvent(event); // schedule AgentArrivalEvent event = new PersonArrivalEvent(this.getMessageArrivalTime(), this.vehicle.getOwnerPerson().getId(), this.vehicle.getCurrentLinkId(), this.vehicle.getCurrentLeg().getMode()); eventsManager.processEvent(event); // schedule ActStartEvent Activity nextAct = this.vehicle.getNextActivity(); double actStartEventTime = nextAct.getStartTime(); if (this.getMessageArrivalTime() > actStartEventTime) { actStartEventTime = this.getMessageArrivalTime(); } event = new ActivityStartEvent(actStartEventTime, this.vehicle.getOwnerPerson().getId(), this.vehicle.getCurrentLinkId(), nextAct.getFacilityId(), nextAct.getType()); eventsManager.processEvent(event); }
@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); }
public void testLinkEnterEventHandler() { EventsManager events = EventsUtils.createEventsManager(); MyLinkEnterEventHandler handler = new MyLinkEnterEventHandler(); events.addHandler(handler); Network network = NetworkUtils.createNetwork(); Node node1 = network.getFactory().createNode(Id.create(1, Node.class), new Coord((double) 0, (double) 0)); Node node2 = network.getFactory().createNode(Id.create(2, Node.class), new Coord((double) 1000, (double) 0)); final Node from = node1; final Node to = node2; final Network network1 = network; NetworkFactory r = network.getFactory(); Link link1 = NetworkUtils.createLink(Id.create(1, Link.class), from, to, network1, 1000.0, 10.0, 3600.0, (double) 0); events.processEvent(new LinkEnterEvent(8.0*3600, Id.create("veh", Vehicle.class), link1.getId())); assertEquals("expected number of handled events wrong.", 1, handler.counter); }
@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); }
ttcalc.handleEvent(new LinkEnterEvent(firstTimeBinStart, vehId, link1.getId())); ttcalc.handleEvent(new LinkLeaveEvent(firstTimeBinStart + linkTravelTime1, vehId, link1.getId())); ttcalc.handleEvent(new LinkEnterEvent(firstTimeBinStart + 2*timeBinSize, vehId, link1.getId())); ttcalc.handleEvent(new LinkLeaveEvent(firstTimeBinStart + 2*timeBinSize + linkTravelTime2, vehId, link1.getId()));
ttc.handleEvent(new VehicleEntersTrafficEvent(100, agId2, link1.getId(), vehId2, TransportMode.walk, 1.0)); ttc.handleEvent(new LinkLeaveEvent(100, vehId1, link1.getId())); ttc.handleEvent(new LinkEnterEvent(100, vehId1, link2.getId())); ttc.handleEvent(new LinkLeaveEvent(110, vehId2, link1.getId())); ttc.handleEvent(new LinkEnterEvent(110, vehId2, link2.getId())); ttc.handleEvent(new LinkLeaveEvent(200, vehId1, link2.getId())); ttc.handleEvent(new LinkLeaveEvent(410, vehId2, link2.getId()));
ttc.handleEvent(new LinkEnterEvent(200, vehId, link2.getId())); ttc.handleEvent(new LinkLeaveEvent(300, vehId, link2.getId()));