Adding CEC2005 constraints

This commit is contained in:
Fabian Becker 2014-02-16 14:00:22 +01:00
parent 5ac9542893
commit 5c77484a11
4 changed files with 40 additions and 15 deletions

View File

@ -13,9 +13,8 @@ import eva2.optimization.operator.mutation.InterfaceMutation;
import eva2.optimization.operator.mutation.MutateDefault;
import eva2.optimization.operator.selection.InterfaceSelection;
import eva2.optimization.operator.selection.SelectXProbRouletteWheel;
import eva2.optimization.operator.terminators.CombinedTerminator;
import eva2.optimization.operator.terminators.FitnessValueTerminator;
import eva2.optimization.population.Population;
import eva2.optimization.problems.AbstractProblemDouble;
import eva2.optimization.problems.AbstractProblemDoubleOffset;
import eva2.optimization.strategies.DifferentialEvolution;
import eva2.optimization.strategies.InterfaceOptimizer;
@ -67,6 +66,12 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
private JsonArray optimizationRuns;
private JsonArray generationsArray;
private double[] fBias = { -4.5000000e+002, -4.5000000e+002, -4.5000000e+002, -4.5000000e+002, -3.1000000e+002,
3.9000000e+002, -1.8000000e+002, -1.4000000e+002, -3.3000000e+002, -3.3000000e+002, 9.0000000e+001,
-4.6000000e+002, -1.3000000e+002, -3.0000000e+002, 1.2000000e+002, 1.2000000e+002, 1.2000000e+002,
1.0000000e+001, 1.0000000e+001, 1.0000000e+001, 3.6000000e+002, 3.6000000e+002, 3.6000000e+002,
2.6000000e+002, 2.6000000e+002};
/**
* Creates a set of default options used in all optimizations.
*
@ -92,6 +97,7 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
opt.addOption("mutator", true, "Mutator Operator");
opt.addOption("crossover", true, "Crossover Operator");
opt.addOption("selection", true, "Selection Operator");
opt.addOption(OptionBuilder
.withLongOpt("help")
@ -428,7 +434,6 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
switch(optimizerName) {
case "DifferentialEvolution": {
System.out.println("DE");
opt.addOption("F", true, "Differential Weight");
opt.addOption("CR", true, "Crossover Rate");
opt.addOption("DEType", true, "DE Type ()");
@ -465,7 +470,6 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
break;
}
case "GeneticAlgorithm": {
System.out.println("Genetic Algorithm");
double pm = 0.01, pc = 0.5;
opt.addOption("pm", true, "Mutation Probability");
opt.addOption("pc", true, "Crossover Probability");
@ -594,6 +598,32 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
} catch (IllegalAccessException e) {
e.printStackTrace();
}
setCECDefaults(this.problem);
}
private void setCECDefaults(AbstractProblemDouble problem) {
switch(problem.getName()) {
case "F1-Problem": // F1: Shifted Sphere
this.problem.setDefaultRange(100);
this.problem.setYOffset(fBias[0]);
break;
case "F2-Problem": // F6: Shifted Rosenbrock's Function
this.problem.setDefaultRange(100);
this.problem.setYOffset(fBias[5]);
break;
case "F5-Problem": // F2: Schwefel's 1.2
this.problem.setDefaultRange(100);
this.problem.setYOffset(fBias[1]);
break;
case "F6-Problem": // F9: Shifted Rastrigin's Function
this.problem.setDefaultRange(5);
this.problem.setYOffset(fBias[8]);
break;
default:
LOGGER.info("No CEC'05 default parameters for this problem found.");
break;
}
}
/**
@ -603,8 +633,8 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
private void runOptimization() {
for(int i = 0; i < this.numberOfRuns; i++) {
// Terminate after 10000 function evaluations OR after reaching a fitness < 0.1
OptimizerFactory.setEvaluationTerminator(50000);
OptimizerFactory.addTerminator(new FitnessValueTerminator(new double[]{0.00001}), CombinedTerminator.OR);
OptimizerFactory.setEvaluationTerminator(500000);
//OptimizerFactory.addTerminator(new FitnessValueTerminator(new double[]{0.00001}), CombinedTerminator.OR);
LOGGER.log(Level.INFO, "Running {0}", optimizer.getName());

View File

@ -31,11 +31,6 @@ public class GAGrayCodingInteger implements InterfaceGAIntegerCoding, java.io.Se
tmpLocus[1] = locus[1];
tmpBitSet = new BitSet(tmpLocus.length);
// for (int i = 0; i < tmpLocus.length; i++) {
// tmpB = (tmpB ^ refBitSet.get(locus[1] + i));
// if (tmpB) tmpBitSet.set(i);
// else tmpBitSet.clear(i);
// }
for (int i = 0; i < tmpLocus[1]; i++) {
tmpB = refBitSet.get(locus[0]);
for (int j = 1; j <= i; j++) {

View File

@ -69,6 +69,6 @@ public class F3Problem extends AbstractProblemDoubleOffset implements java.io.Se
*/
@Override
public String getName() {
return "F3 Problem";
return "F3-Problem";
}
}

View File

@ -7,7 +7,7 @@ import java.io.Serializable;
/**
*
*/
@Description("Schwefel's Function.")
@Description("Schwefel's 1.2 Function.")
public class F5Problem extends AbstractProblemDoubleOffset implements Serializable {
final static double f5range = 65.536;
@ -59,7 +59,7 @@ public class F5Problem extends AbstractProblemDoubleOffset implements Serializab
public String getStringRepresentationForProblem() {
String result = "";
result += "F5 Schwefel's Function:\n";
result += "F5 Schwefel's 1.2 Function:\n";
result += "This problem is unimodal.\n";
result += "Parameters:\n";
result += "Dimension : " + this.problemDimension + "\n";
@ -77,6 +77,6 @@ public class F5Problem extends AbstractProblemDoubleOffset implements Serializab
*/
@Override
public String getName() {
return "F5 Problem";
return "F5-Problem";
}
}