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];
} |
Partager