From 77ab6a5676587b96a76e3715b879acc241b4bb23 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthieu=20R=C3=89?= <matthieu.re@ensiie.fr>
Date: Mon, 10 Oct 2016 19:23:17 +0200
Subject: [PATCH] Implement indicator.cpp

---
 src/ibea/indicator.cpp | 45 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 42 insertions(+), 3 deletions(-)

diff --git a/src/ibea/indicator.cpp b/src/ibea/indicator.cpp
index 332b3a3..33d56b2 100644
--- a/src/ibea/indicator.cpp
+++ b/src/ibea/indicator.cpp
@@ -1,6 +1,45 @@
 #include "indicator.h"
 
-int espsilon_indicator(){
+/**
+ * Returns the associated espsilon-indicator. In the complete algorithm, we only
+ * need to take as arguments an only vector, but we still use here A and B as
+ * sets of vectors. Furthermore, instead of calling in every
+ * epsilon_indicator the method coco_evaluate, we better save every f(x) and
+ * enter as parameters of the function the two vectors f(x1) and f(x2) we want
+ * to compare.
+ * @param fa: image of the first vector to compare by f
+ * @param fb: image of the second vector to compare by f
+ * @returns: the espsilon-indicator
+ */
+double espsilon_indicator(double [][] a, double [][] b, int dim_obj = a[0], int dim_a = 1, int dim_b = 1) {
+      int  i, j, k;
+      double  eps = 0.0, eps_j = 0.0, eps_k=0.0, eps_temp;
 
-  return 0;
-}
+      /* Here we search for the value of
+       * I (A, B) =
+       *   min{eps} (∀x2 ∈ B ∃x1 ∈ A : fi(x1) − eps ≤ fi(x2) for i ∈ {1,...,n}).
+       * eps is between 0 and the dimension of the vectors
+       *
+       */
+      for (i = 0; i < dim_a; i++) {
+        for (j = 0; j < dim_b; j++) {
+          for (k = 0; k < dim_obj; k++) {
+            eps_temp = b[j][k] - a[i][k];
+            if (k == 0)
+              eps_k = eps_temp;
+            else if (eps_k < eps_temp)
+              eps_k = eps_temp;
+          }
+          if (j == 0)
+            eps_j = eps_k;
+          else if (eps_j > eps_k)
+            eps_j = eps_k;
+        }
+        if (i == 0)
+          eps = eps_j;
+        else if (eps < eps_j)
+          eps = eps_j;
+      }
+      return eps;
+    }
+}
\ No newline at end of file
-- 
GitLab