public void testWriteReadXml() { final VehicleAbortsEvent event1 = new VehicleAbortsEvent(81153.3, Id.create("a007", Vehicle.class), Id.create("link1", Link.class)); final VehicleAbortsEvent event2 = XmlEventsTester.testWriteReadXml(getOutputDirectory() + "events.xml", event1); assertEquals(event1.getTime(), event2.getTime(), EPSILON); assertEquals(event1.getVehicleId(), event2.getVehicleId()); assertEquals(event1.getLinkId(), event2.getLinkId()); }
/** * If the driver agent stucks, no PersonLeavesVehicleEvent will be thrown. Use the * PersonStuckEvent instead as a replacement to avoid NullPointerExceptions and * calculate an approximate running time cost. */ @Override public void handleEvent(VehicleAbortsEvent event) { if (event.getVehicleId().toString().startsWith(this.pIdentifier)) { // it's a paratransit vehicle log.info("Paratransit vehicle " + event.getVehicleId() + " got stuck at " + Time.writeTime(event.getTime()) + ". Operation cost is calculated until the stuck time."); OperatorCostContainer operatorCostContainer = this.vehId2OperatorCostContainer.remove(event.getVehicleId()); operatorCostContainer.handleVehicleAborts(event); // call all OperatorCostContainerHandler for (OperatorCostContainerHandler operatorCostContainerHandler : this.operatorCostContainerHandlerList) { operatorCostContainerHandler.handleOperatorCostContainer(operatorCostContainer); } // Note the operatorCostContainer is dropped at this point. } }
String linkIdString = atts.getValue(VehicleAbortsEvent.ATTRIBUTE_LINK); Id<Link> linkId = linkIdString == null ? null : Id.create(linkIdString, Link.class); this.events.processEvent(new VehicleAbortsEvent(time, Id.create(atts.getValue(VehicleAbortsEvent.ATTRIBUTE_VEHICLE), Vehicle.class), linkId)); }else if (PersonMoneyEvent.EVENT_TYPE.equals(eventType) || "agentMoney".equals(eventType)) { this.events.processEvent(new PersonMoneyEvent(time, Id.create(atts.getValue(PersonMoneyEvent.ATTRIBUTE_PERSON), Person.class), Double.parseDouble(atts.getValue(PersonMoneyEvent.ATTRIBUTE_AMOUNT))));
ProtobufEvents.VehicleAbortsEvent.Builder va = ProtobufEvents.VehicleAbortsEvent.newBuilder() .setTime(event.getTime()) .setVehId(ProtobufEvents.VehicleId.newBuilder().setId(((VehicleAbortsEvent) event).getVehicleId().toString())) .setLinkId(ProtobufEvents.LinkId.newBuilder().setId(((VehicleAbortsEvent) event).getLinkId().toString())); eb.setType(ProtobufEvents.Event.Type.VehicleAborts).setVehicleAborts(va);
public double getRunningCostTime() { double timeInService = 0; if (this.transitDriverAlightsE != null) { if (this.vehicleAbortE != null) { throw new RuntimeException( "There is both a PersonLeavesVehicleEvent and a VehicleAbortsEvent for TransitDriverStartsEvent " + this.transitDriverStartsE); } timeInService = this.transitDriverAlightsE.getTime() - this.transitDriverStartsE.getTime(); } else if (this.vehicleAbortE != null) { timeInService = this.vehicleAbortE.getTime() - this.transitDriverStartsE.getTime(); } else { throw new RuntimeException( "Neither PersonLeavesVehicleEvent nor VehicleAbortEvent found for TransitDriverStartsEvent " + transitDriverStartsE.getDriverId() + "."); } return this.expensesPerSecond * timeInService; }
@Override public void handleEvent(VehicleAbortsEvent event) { LinkEnterEvent e = this.linkEnterEvents.remove(event.getVehicleId()); if (e != null) { DataContainer data = this.dataContainerProvider.getTravelTimeData(e.getLinkId(), true); data.needsConsolidation = true; this.aggregator.addStuckEventTravelTime(data.ttData, e.getTime(), event.getTime()); if (this.calculateLinkToLinkTravelTimes && event.getTime() < qsimConfig.getEndTime() // (we think that this only makes problems when the abort is not just because of mobsim end time. kai & theresa, jan'17) ){ log.error(ERROR_STUCK_AND_LINKTOLINK); throw new IllegalStateException(ERROR_STUCK_AND_LINKTOLINK); } } // try to remove vehicle from set with filtered vehicles if (filterAnalyzedModes) this.vehiclesToIgnore.remove(event.getVehicleId()); }
@Override public final void clearVehicles() { // yyyyyy right now it seems to me that one should rather just abort the agents and have the framework take care of the rest. kai, mar'16 double now = context.getSimTimer().getTimeOfDay() ; for (QVehicle veh : vehQueue) { context.getEventsManager().processEvent( new VehicleAbortsEvent(now, veh.getId(), veh.getCurrentLink().getId())); context.getEventsManager().processEvent( new PersonStuckEvent(now, veh.getDriver().getId(), veh.getCurrentLink().getId(), veh.getDriver().getMode())); context.getAgentCounter().incLost(); context.getAgentCounter().decLiving(); } vehQueue.clear(); for (QVehicle veh : buffer) { context.getEventsManager().processEvent( new VehicleAbortsEvent(now, veh.getId(), veh.getCurrentLink().getId())); context.getEventsManager().processEvent( new PersonStuckEvent(now, veh.getDriver().getId(), veh.getCurrentLink().getId(), veh.getDriver().getMode())); context.getAgentCounter().incLost(); context.getAgentCounter().decLiving(); } buffer.clear(); holes.clear(); this.remainingHolesStorageCapacity = this.storageCapacity; }
new VehicleAbortsEvent(now, veh.getId(), veh.getCurrentLink().getId())); new VehicleAbortsEvent(now, veh.getId(), veh.getCurrentLink().getId()));
MobsimAgent mobsimAgent = tuple.getSecond(); this.simEngine.getMobsim().getEventsManager().processEvent( new VehicleAbortsEvent(now, Id.create(mobsimAgent.getId(), Vehicle.class), link.getId())); this.simEngine.getMobsim().getEventsManager().processEvent( new PersonStuckEvent(now, mobsimAgent.getId(), link.getId(), mobsimAgent.getMode())); new VehicleAbortsEvent(now, Id.create(mobsimAgent.getId(), Vehicle.class), link.getId())); this.simEngine.getMobsim().getEventsManager().processEvent( new PersonStuckEvent(now, mobsimAgent.getId(), link.getId(), mobsimAgent.getMode())); new VehicleAbortsEvent(now, Id.create(mobsimAgent.getId(), Vehicle.class), link.getId())); this.simEngine.getMobsim().getEventsManager().processEvent( new PersonStuckEvent(now, mobsimAgent.getId(), link.getId(), mobsimAgent.getMode()));
return new VehicleAbortsEvent(pe.getVehicleAborts().getTime(), Id.createVehicleId(pe.getVehicleAborts().getVehId().getId()), Id.createLinkId(pe.getVehicleAborts().getLinkId().getId()));