@Override public void handleEvent(LinkLeaveEvent event) { // initialize link based analysis data structure if (!totalDelayPerLink.containsKey(event.getLinkId())) { totalDelayPerLink.put(event.getLinkId(), 0.0); numberOfAgentsPerLink.put(event.getLinkId(), 0); } for (Id<Person> passengerId : vehicleIdToPassengerIds.get(event.getVehicleId())) { // calculate delay for every passenger double currentDelay = event.getTime() - this.earliestLinkExitTimePerAgent.remove(passengerId); totalDelayPerLink.put(event.getLinkId(), totalDelayPerLink.get(event.getLinkId()) + currentDelay); totalDelay += currentDelay; // increase agent counter numberOfAgentsPerLink.put(event.getLinkId(), numberOfAgentsPerLink.get(event.getLinkId()) +1 ); } }
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()); } }
@Override public void handleEvent(LinkLeaveEvent event) { Logger.getLogger(VehicleLinkTravelTimeEventHandler.class).info(event.toString()); Map<Id<Link>, double[]> times = this.vehicleLinkEnterLeaveTimes.get(event.getVehicleId()); if (times != null) { double linkEnterTime = times.get(event.getLinkId())[0]; double [] linkEnterLeaveTime = {linkEnterTime,event.getTime()}; times.put(event.getLinkId(), linkEnterLeaveTime); } }
@Override public void handleEvent(LinkLeaveEvent event) { int timeBinNr = getIntervalNr(event.getTime()); Id<Link> linkId = event.getLinkId(); if (linkId2time2leavingAgents.get(linkId) != null) { if (linkId2time2leavingAgents.get(linkId).get(timeBinNr) != null) { int leavingAgents = linkId2time2leavingAgents.get(linkId).get(timeBinNr) + 1; linkId2time2leavingAgents.get(linkId).put(timeBinNr, leavingAgents); } else { linkId2time2leavingAgents.get(linkId).put(timeBinNr, 1); } } else { Map<Integer, Integer> time2leavingAgents = new HashMap<>(); time2leavingAgents.put(timeBinNr, 1); linkId2time2leavingAgents.put(linkId, time2leavingAgents); } }
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; }
@Override public void handleEvent(LinkLeaveEvent event) { if (eventCounter.incrementAndGet() > maxEvents) return; try { if (ptVehicles.keySet().contains(event.getVehicleId())) { PTVehicle vehicle = ptVehicles.get(event.getVehicleId()); if (vehicle.in) vehicle.in = false; vehicle.incDistance(network.getLinks().get(event.getLinkId()) .getLength()); } else { TravellerChain chain = chains.get(driverIdFromVehicleId .get(event.getVehicleId())); if (chain.inCongestedMode) { Journey journey = chain.getJourneys().getLast(); journey.incrementCarDistance(network.getLinks() .get(event.getLinkId()).getLength()); } } } catch (Exception e) { System.err.println(e.getStackTrace()); System.err.println(event.toString()); } }
/** * 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()); }
if (Integer.parseInt(((LinkLeaveEvent) personEvent).getLinkId().toString()) != deqSimEvent.getLinkId()) { CppEventFileParser.printNotEqualEvents(personEvent, deqSimEvent); return false; if (Integer.parseInt(((LinkLeaveEvent) personEvent).getVehicleId().toString()) != deqSimEvent.getVehicleId()) { CppEventFileParser.printNotEqualEvents(personEvent, deqSimEvent); return false;
private void handleLinkLeaveEvent(LinkLeaveEvent ev) { Map<Id<Person>, Monitor> toRemove = new HashMap<>(); LinkLeaveEvent event = ev; Id<Person> driverId = this.getDriverOfVehicle(event.getVehicleId()); Gbl.assertNotNull(driverId); Monitor monitor = monitors.get(ExitedLink).get(driverId); if (monitor != null) { if (monitor.getAgentId().equals(event.getDriverId()) && monitor.getLinkId().equals(event.getLinkId())) { if (monitor.getHandler().handle(monitor.getAgentId(), monitor.getLinkId(), monitor.getEvent())) { toRemove.put(driverId,monitor); } } } synchronized (monitors.get(ExitedLink)) { monitors.get(ExitedLink).entrySet().removeAll(toRemove.entrySet()); } }
public void handleEvent(LinkLeaveEvent event) { vehicleLeftLink(event.getVehicleId()); }
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(LinkLeaveEvent event) { int timeBinNr = getIntervalNr(event.getTime()); Id<Link> linkId = event.getLinkId(); if (linkId2time2leavingAgents.get(linkId) != null) { if (linkId2time2leavingAgents.get(linkId).get(timeBinNr) != null) { int leavingAgents = linkId2time2leavingAgents.get(linkId).get(timeBinNr) + 1; linkId2time2leavingAgents.get(linkId).put(timeBinNr, leavingAgents); } else { linkId2time2leavingAgents.get(linkId).put(timeBinNr, 1); } } else { Map<Integer, Integer> time2leavingAgents = new HashMap<>(); time2leavingAgents.put(timeBinNr, 1); linkId2time2leavingAgents.put(linkId, time2leavingAgents); } }
ProtobufEvents.LinkLeaveEvent.Builder ll = ProtobufEvents.LinkLeaveEvent.newBuilder() .setTime(event.getTime()) .setLinkId(ProtobufEvents.LinkId.newBuilder().setId(((LinkLeaveEvent) event).getLinkId().toString())) .setVehId(ProtobufEvents.VehicleId.newBuilder().setId(((LinkLeaveEvent) event).getVehicleId().toString())); eb.setType(ProtobufEvents.Event.Type.LinkLeave).setLinkLeave(ll);
@Override public void handleEvent(LinkLeaveEvent event) { this.removeEarliestLinkExitTimesAtTime(delegate.getDriverOfVehicle(event.getVehicleId())); }
@Override public void handleEvent(LinkLeaveEvent event) { Double enterTime = vehicleEnterTimes.get( event.getVehicleId() ) ; if ( enterTime != null && enterTime < 9.*3600. ) { final Id<Link> linkId = event.getLinkId(); final Double sumSoFar = linkTtimesSums.get( linkId ); if ( sumSoFar == null ) { linkTtimesSums.put( linkId, event.getTime() - enterTime ) ; linkCnts.put( linkId, 1. ) ; } else { linkTtimesSums.put( linkId, event.getTime() - enterTime + sumSoFar ) ; linkCnts.put( linkId, 1. + linkCnts.get(linkId) ) ; } } }
@Override public void handleEvent(LinkLeaveEvent event) { if (this.vehicleId2enterTime.get(event.getVehicleId()) != null) { double traveltimeThisAgent = event.getTime() - this.vehicleId2enterTime.get(event.getVehicleId()); double freespeedTravelTime = 1 + Math.ceil(this.scenario.getNetwork().getLinks().get(event.getLinkId()).getLength() / this.scenario.getNetwork().getLinks().get(event.getLinkId()).getFreespeed()); double delayThisAgent = traveltimeThisAgent - freespeedTravelTime; log.warn("The delay is negative! Delay:" + delayThisAgent + " - traveltime: " + traveltimeThisAgent + " - freespeed traveltime: " + freespeedTravelTime + " - link: " + event.getLinkId() ); log.warn(event.toString()); if (warnCnt2 == 5) { log.warn("Further warnings of this type will not be printed out.");
vehicleId = driverToVeh.get(personId); assert vehicleId != null; this.events.processEvent(new LinkLeaveEvent(time, vehicleId, linkId)); } else {