Une erreur est survenue de notre côté
Sélectionner une révision Git
-
Matthieu RÉ a rédigéMatthieu RÉ a rédigé
indicator.cpp 1,50 Kio
#include "indicator.h"
/**
* 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;
/* 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;
}
}