public static double calcEMA(double time, List<XYDataPoint> timeSeries, double tau) { if (timeSeries.isEmpty()) { return 0; } double norm = 0; double result = 0; for (final XYDataPoint dp : timeSeries) { final double phi = weight(time, dp.getX(), tau); norm += phi; result += phi * dp.getY(); } return result / norm; }
@Override public void timeStep(double dt, double simulationTime, long iterationCount) { instantaneousConsumptionRate = RoadNetworkUtils.instantaneousFuelUsedLiters(route); totalConsumption += instantaneousConsumptionRate * dt; numberOfVehicles = RoadNetworkUtils.vehicleCount(route); instConsumptionEMA = (simulationTime == 0) ? instantaneousConsumptionRate : ExponentialMovingAverage.calc( instantaneousConsumptionRate, instConsumptionEMA, beta); if (fileWriter != null) { fileWriter.write(simulationTime, this); } }
@Override public void timeStep(double dt, double simulationTime, long iterationCount) { int numberOfVehicles = Math.max(0, RoadNetworkUtils.vehicleCount(route) - roadNetwork.obstacleCount(route)); for (TravelTimeType type : TravelTimeType.values()) { TravelTime tt = travelTimes.get(type); tt.numberOfVehicles = numberOfVehicles; tt.instantaneousTravelTime = RoadNetworkUtils.instantaneousTravelTime(route, type); tt.totalTravelTime += dt * numberOfVehicles; tt.meanSpeed = route.getLength() / tt.instantaneousTravelTime; tt.instTravelTimeEMA = (simulationTime == 0) ? tt.instantaneousTravelTime : ExponentialMovingAverage.calc(tt.instantaneousTravelTime, tt.instTravelTimeEMA, beta); if (tt.fileWriter != null) { tt.fileWriter.write(simulationTime, tt); } } }