diff --git a/src/main/java/br/ufrgs/inf/prosoft/tfcache/Pareto.java b/src/main/java/br/ufrgs/inf/prosoft/tfcache/Pareto.java
index 1e4e350..50e96cd 100755
--- a/src/main/java/br/ufrgs/inf/prosoft/tfcache/Pareto.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/tfcache/Pareto.java
@@ -45,9 +45,7 @@ public class Pareto {
}
public synchronized void addIfPareto(Metrics metrics) {
- if (metrics.getSavedTime() == 0) {
- return;
- }
+ if (metrics.getSavedTime() == 0) return;
savedTimeHasMetrics.merge(metrics.getSavedTime(), metrics, (existing, incoming) -> existing.getIdleTime() < incoming.getIdleTime() ? existing : incoming);
}
@@ -60,6 +58,7 @@ public class Pareto {
}
public Pareto getNormalised() {
+ if (savedTimeHasMetrics.isEmpty()) return this;
double minSavedTime = values().stream().mapToDouble(Metrics::getSavedTime).min().orElseThrow();
double maxSavedTime = values().stream().mapToDouble(Metrics::getSavedTime).max().orElseThrow();
double distanceSavedTime = maxSavedTime - minSavedTime;
@@ -87,15 +86,9 @@ public class Pareto {
}
private Metrics getBestMetrics(double percentageObjectiveSavedTime, double percentageObjectiveIdleTime) {
- if (percentageObjectiveSavedTime < 0 || percentageObjectiveSavedTime > 1) {
- throw new RuntimeException("invalid objective saved time");
- }
- if (percentageObjectiveIdleTime < 0 || percentageObjectiveIdleTime > 1) {
- throw new RuntimeException("invalid objective idle time");
- }
- if (savedTimeHasMetrics.isEmpty()) {
- return new Metrics();
- }
+ if (percentageObjectiveSavedTime < 0 || percentageObjectiveSavedTime > 1) throw new RuntimeException("invalid objective saved time");
+ if (percentageObjectiveIdleTime < 0 || percentageObjectiveIdleTime > 1) throw new RuntimeException("invalid objective idle time");
+ if (savedTimeHasMetrics.isEmpty()) return new Metrics();
double minIdleTime = values().stream().mapToDouble(Metrics::getIdleTime).min().orElseThrow() * percentageObjectiveIdleTime;
double maxSavedTime = values().stream().mapToDouble(Metrics::getSavedTime).max().orElseThrow() * percentageObjectiveSavedTime;
return values().stream().min(Comparator.comparingDouble(it -> it.calculateEuclideanDistance(maxSavedTime, minIdleTime))).orElseThrow();