diff --git a/src/ibea/indicator.cpp b/src/ibea/indicator.cpp index 332b3a31ba20c52426530b4c8a5520d45d20b10e..6708a707e7d555bd38be719ebd1d6a7323491ebd 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 epsilon_indicator(double [][] a, double [][] b, int dim_obj, 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 diff --git a/src/ibea/indicator.h b/src/ibea/indicator.h index 61d5922ad7ff21697b254150f2c1895142eb14ad..f78fa9e486092013d87f20c4aac2478e19f71376 100644 --- a/src/ibea/indicator.h +++ b/src/ibea/indicator.h @@ -1,6 +1,6 @@ #ifndef INDICATOR_H #define INDICATOR_H -int espsilon_indicator(); +double epsilon_indicator(); #endif