Skip to content
Snippets Groups Projects
Commit 2c5fcbc5 authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Simplifid memory update.

parent 9e022a6a
No related branches found
No related tags found
No related merge requests found
...@@ -68,7 +68,7 @@ public class LShadeSolver extends DESolverWithArchive { ...@@ -68,7 +68,7 @@ public class LShadeSolver extends DESolverWithArchive {
initializeMemory(0.5); initializeMemory(0.5);
ArrayList<Double> successfulCr = new ArrayList<Double>(); ArrayList<Double> successfulCr = new ArrayList<Double>();
ArrayList<Double> successfulF = new ArrayList<Double>(); ArrayList<Double> successfulF = new ArrayList<Double>();
ArrayList<Integer> successfulIndices = new ArrayList<Integer>(); ArrayList<Double> absDelta = new ArrayList<Double>();
generateInitialPopulation(); generateInitialPopulation();
double avgFitness = calculateFitnessForPopulationParallel(currentPopulation); double avgFitness = calculateFitnessForPopulationParallel(currentPopulation);
...@@ -84,7 +84,7 @@ public class LShadeSolver extends DESolverWithArchive { ...@@ -84,7 +84,7 @@ public class LShadeSolver extends DESolverWithArchive {
successfulCr.clear(); successfulCr.clear();
successfulF.clear(); successfulF.clear();
successfulIndices.clear(); absDelta.clear();
StringBuilder generationLog = new StringBuilder(String.format("%s\nGeneration: %d\n", delimiter, (generation + 1))); StringBuilder generationLog = new StringBuilder(String.format("%s\nGeneration: %d\n", delimiter, (generation + 1)));
currentPopulationSorted = createSortedCopyOfCurrentPopulation(); currentPopulationSorted = createSortedCopyOfCurrentPopulation();
...@@ -122,7 +122,7 @@ public class LShadeSolver extends DESolverWithArchive { ...@@ -122,7 +122,7 @@ public class LShadeSolver extends DESolverWithArchive {
if (offsprings[i].getFitness() < old.getFitness()) { if (offsprings[i].getFitness() < old.getFitness()) {
archive.add(old); archive.add(old);
successfulIndices.add(i); absDelta.add(Math.abs(offsprings[i].getFitness() - currentPopulation[i].getFitness()));
successfulCr.add(old.getCrossoverProbability()); successfulCr.add(old.getCrossoverProbability());
successfulF.add(old.getMutationFactor()); successfulF.add(old.getMutationFactor());
} }
...@@ -131,7 +131,7 @@ public class LShadeSolver extends DESolverWithArchive { ...@@ -131,7 +131,7 @@ public class LShadeSolver extends DESolverWithArchive {
} }
} }
updateMemory(successfulIndices, successfulCr, successfulF, offsprings); updateMemory(successfulCr, successfulF, absDelta);
currentPopulation = nextPopulation; currentPopulation = nextPopulation;
applyLinearReductionOfPopulationSize(nfe, maxNfe); applyLinearReductionOfPopulationSize(nfe, maxNfe);
avgFitness = getMseFromCalculatedFitness(currentPopulation); avgFitness = getMseFromCalculatedFitness(currentPopulation);
...@@ -171,25 +171,19 @@ public class LShadeSolver extends DESolverWithArchive { ...@@ -171,25 +171,19 @@ public class LShadeSolver extends DESolverWithArchive {
return newPopulationSize; return newPopulationSize;
} }
private void updateMemory(final ArrayList<Integer> successfulIndices, private void updateMemory(final ArrayList<Double> successfulCr,
final ArrayList<Double> successfulCr,
final ArrayList<Double> successfulF, final ArrayList<Double> successfulF,
final DEIndividual[] offsprings) { final ArrayList<Double> absDelta) {
if ((!successfulCr.isEmpty()) && (!successfulF.isEmpty())) { if ((!successfulCr.isEmpty()) && (!successfulF.isEmpty())) {
assert ((successfulIndices.size() == successfulCr.size()) && (successfulCr.size() == successfulF.size())); assert ((absDelta.size() == successfulCr.size()) && (successfulCr.size() == successfulF.size()));
int kCount = successfulCr.size(); int kCount = successfulCr.size();
double[] weights = new double[kCount]; double[] weights = new double[kCount];
for (int k = 0; k < kCount; k++) { for (int k = 0; k < kCount; k++) {
final int successfulIndex = successfulIndices.get(k);
double numerator = Math.abs(offsprings[successfulIndex].getFitness() - currentPopulation[successfulIndex].getFitness());
double denominator = 0.0;
for (int l = 0; l < kCount; l++) {
denominator += Math.abs(offsprings[successfulIndices.get(l)].getFitness() - currentPopulation[successfulIndices.get(l)].getFitness());
}
final double numerator = absDelta.get(k);
final double denominator = Utils.arrayListSum(absDelta);
weights[k] = (numerator / denominator); weights[k] = (numerator / denominator);
} }
...@@ -203,8 +197,19 @@ public class LShadeSolver extends DESolverWithArchive { ...@@ -203,8 +197,19 @@ public class LShadeSolver extends DESolverWithArchive {
if (memoryIndex >= memorySize) { if (memoryIndex >= memorySize) {
memoryIndex = 0; memoryIndex = 0;
} }
} }
// StringBuilder sb = new StringBuilder();
// sb.append("MEMORY F: ");
// for (int i = 0; i < memoryF.length; i++) {
// sb.append(String.format("%.5f ", memoryF[i]));
// }
// sb.append("\n");
// sb.append("MEMORY Cr: ");
// for (int i = 0; i < memoryCr.length; i++) {
// sb.append(String.format("%.5f ", memoryCr[i]));
// }
// System.out.println(sb.toString());
} }
public int getMemorySize() { public int getMemorySize() {
......
...@@ -63,4 +63,12 @@ public class Utils { ...@@ -63,4 +63,12 @@ public class Utils {
} }
return values; return values;
} }
public static double arrayListSum(final ArrayList<Double> array) {
double sum = 0.0;
for (final double val : array) {
sum += val;
}
return sum;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment