Tableau à plusieurs types de valeurs?
J'ai la méthode suivante, j'ai besoin de faire une modification de telle sorte à avoir un tableau searchPoints non pas de type double mais supportant deux types de valeurs "entières" pour la première colonne pour servir d'index et "réelles" pour la deuxième colonne correspondante à l'index de la première colonne. Et si je définis une méthode de trie qui me permet de trier un tel tableau par ordre décroissant de la deuxième colonne,comment procéder pour maintenir chaque valeur réelle indexée par sa valeur entière??? merci beaucoup d'avance :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| public void run() {
double searchPoints[][] = new double[n][var + 1];
for (int i = 0; i < n; i++) {
double[] tmpX = new double[var];
for (int j = 0; j < var; j++) {
searchPoints[i][j] = this.random(upperLimit, lowerLimit);
tmpX[j] = searchPoints[i][j];
}
double tmp = function(tmpX);
searchPoints[i][var] = tmp;
}
for (int itr = 1; itr <= iteration; itr++) {
sort(searchPoints);
for (int i = 0; i < e; i++) {
double[] x = new double[var];
double[] x_best = new double[var];
for (int j = 0; j < var; j++) {
x[j] = searchPoints[i][j];
x_best[j] = x[j];
}
double f = searchPoints[i][var];
double f_best = f;
for (int indx = 0; indx < nep; indx++) {
double[] x_elite = new double[var];
for (int j = 0; j < var; j++) {
x_elite[j] = this.random(x[j] + ngh, x[j] - ngh);
}
double f_elite = function(x_elite);
if (f_elite > f_best) {
for (int j = 0; j < var; j++) {
x_best[j] = x_elite[j];
}
f_best = f_elite;
}
}
for (int j = 0; j < var; j++) {
searchPoints[i][j] = x_best[j];
}
searchPoints[i][var] = f_best;
}
for (int i = e; i < m; i++) {
double[] x = new double[var];
double[] x_best = new double[var];
for (int j = 0; j < var; j++) {
x[j] = searchPoints[i][j];
x_best[j] = x[j];
}
double f = searchPoints[i][var];
double f_best = f;
for (int indx = 0; indx < nsp; indx++) {
double[] x_elite = new double[var];
for (int j = 0; j < var; j++) {
x_elite[j] = this.random(x[j] + ngh, x[j] - ngh);
}
double f_elite = function(x_elite);
if (f_elite > f_best) {
for (int j = 0; j < var; j++) {
x_best[j] = x_elite[j];
}
f_best = f_elite;
}
}
for (int j = 0; j < var; j++) {
searchPoints[i][j] = x_best[j];
}
searchPoints[i][var] = f_best;
}
for (int i = m; i < n; i++) {
double[] tmpX = new double[var];
for (int j = 0; j < var; j++) {
searchPoints[i][j] = this.random(upperLimit, lowerLimit);
tmpX[j] = searchPoints[i][j];
}
searchPoints[i][var] = function(tmpX);
}
}
sort(searchPoints);
for (int j = 0; j < var; j++) {
optimalPoint[j] = searchPoints[0][j];
}
optimalPoint[var] = -searchPoints[0][var];
} |