tfcache

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/tfcache/metadata/Method.java b/src/main/java/br/ufrgs/inf/prosoft/tfcache/metadata/Method.java
index 4071323..ae74a46 100755
--- a/src/main/java/br/ufrgs/inf/prosoft/tfcache/metadata/Method.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/tfcache/metadata/Method.java
@@ -22,6 +22,7 @@ public class Method {
   private List<GroupOfOccurrences> groupsOfOccurrences;
   private Integer countChangeableGroups;
   private Pareto pareto;
+  private Double minEuclideanDistance;
 
   public Method(String name, List<Occurrence> occurrences) {
     this.name = name;
@@ -47,6 +48,11 @@ public class Method {
     return name;
   }
 
+  public double getMinEuclideanDistance() {
+    if (minEuclideanDistance == null) minEuclideanDistance = this.pareto.getNormalised().getMinEuclideanDistance();
+    return minEuclideanDistance;
+  }
+
   public Metrics getBestMetrics() {
     if (this.pareto == null) throw new RuntimeException("trying to access pareto before calculating it");
     return this.pareto.getBestMetrics();
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 edfb7da..1e4e350 100755
--- a/src/main/java/br/ufrgs/inf/prosoft/tfcache/Pareto.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/tfcache/Pareto.java
@@ -11,12 +11,18 @@ public class Pareto {
 
   private final Map<Double, Metrics> savedTimeHasMetrics;
   private Metrics bestMetrics;
+  private Double minEuclideanDistance;
 
   public Pareto() {
     savedTimeHasMetrics = new ConcurrentHashMap<>();
   }
 
-  public Pareto(List<Metrics> metrics) {
+  public Pareto(Collection<Metrics> metrics) {
+    this();
+    metrics.forEach(this::addIfPareto);
+  }
+
+  public Pareto(Stream<Metrics> metrics) {
     this();
     metrics.forEach(this::addIfPareto);
   }
@@ -53,7 +59,7 @@ public class Pareto {
     return values().stream().map(Metrics::getTtl).collect(Collectors.toSet());
   }
 
-  public Stream<Metrics> getNormalised() {
+  public Pareto getNormalised() {
     double minSavedTime = values().stream().mapToDouble(Metrics::getSavedTime).min().orElseThrow();
     double maxSavedTime = values().stream().mapToDouble(Metrics::getSavedTime).max().orElseThrow();
     double distanceSavedTime = maxSavedTime - minSavedTime;
@@ -61,15 +67,22 @@ public class Pareto {
     double maxIdleTime = values().stream().mapToDouble(Metrics::getIdleTime).max().orElseThrow();
     double distanceIdleTime = maxIdleTime - minIdleTime;
 
-    return values().stream().map(it -> {
+    Stream<Metrics> normalisedPareto = values().stream().map(it -> {
       double normalisedSavedTime = (it.getSavedTime() - minSavedTime) / distanceSavedTime;
       double normalisedIdleTime = (it.getIdleTime() - minIdleTime) / distanceIdleTime;
       return it.getNormalised(normalisedSavedTime, normalisedIdleTime);
     });
+    return new Pareto(normalisedPareto);
+  }
+
+  public Double getMinEuclideanDistance() {
+    if (minEuclideanDistance == null) getBestMetrics();
+    return minEuclideanDistance;
   }
 
   public Metrics getBestMetrics() {
     if (this.bestMetrics == null) this.bestMetrics = getBestMetrics(Configuration.getPreferences().get(0), Configuration.getPreferences().get(1));
+    this.minEuclideanDistance = this.bestMetrics.calculateEuclideanDistance(Configuration.getPreferences().get(0), Configuration.getPreferences().get(1));
     return this.bestMetrics;
   }