Set default mutation/selection/crossover if none given
Change Problem to AbstractProblemDoubleOffset Set dimension via CLI
This commit is contained in:
parent
8bc1b0141d
commit
c4a3f41924
@ -6,14 +6,18 @@ import eva2.optimization.OptimizationStateListener;
|
|||||||
import eva2.optimization.enums.DETypeEnum;
|
import eva2.optimization.enums.DETypeEnum;
|
||||||
import eva2.optimization.go.InterfacePopulationChangedEventListener;
|
import eva2.optimization.go.InterfacePopulationChangedEventListener;
|
||||||
import eva2.optimization.modules.OptimizationParameters;
|
import eva2.optimization.modules.OptimizationParameters;
|
||||||
|
import eva2.optimization.operator.crossover.CrossoverESDefault;
|
||||||
import eva2.optimization.operator.crossover.InterfaceCrossover;
|
import eva2.optimization.operator.crossover.InterfaceCrossover;
|
||||||
import eva2.optimization.operator.mutation.InterfaceMutation;
|
import eva2.optimization.operator.mutation.InterfaceMutation;
|
||||||
|
import eva2.optimization.operator.mutation.MutateDefault;
|
||||||
import eva2.optimization.operator.selection.InterfaceSelection;
|
import eva2.optimization.operator.selection.InterfaceSelection;
|
||||||
|
import eva2.optimization.operator.selection.SelectXProbRouletteWheel;
|
||||||
import eva2.optimization.operator.terminators.CombinedTerminator;
|
import eva2.optimization.operator.terminators.CombinedTerminator;
|
||||||
import eva2.optimization.operator.terminators.FitnessValueTerminator;
|
import eva2.optimization.operator.terminators.FitnessValueTerminator;
|
||||||
import eva2.optimization.population.Population;
|
import eva2.optimization.population.Population;
|
||||||
import eva2.optimization.problems.AbstractOptimizationProblem;
|
import eva2.optimization.problems.AbstractOptimizationProblem;
|
||||||
import eva2.optimization.problems.AbstractProblemDouble;
|
import eva2.optimization.problems.AbstractProblemDouble;
|
||||||
|
import eva2.optimization.problems.AbstractProblemDoubleOffset;
|
||||||
import eva2.optimization.strategies.DifferentialEvolution;
|
import eva2.optimization.strategies.DifferentialEvolution;
|
||||||
import eva2.optimization.strategies.InterfaceOptimizer;
|
import eva2.optimization.strategies.InterfaceOptimizer;
|
||||||
import org.apache.commons.cli.*;
|
import org.apache.commons.cli.*;
|
||||||
@ -51,9 +55,10 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
private static Logger LOGGER = Logger.getLogger(Main.class.getName());
|
private static Logger LOGGER = Logger.getLogger(Main.class.getName());
|
||||||
private int populationSize = 20;
|
private int populationSize = 20;
|
||||||
private int numberOfRuns = 1;
|
private int numberOfRuns = 1;
|
||||||
|
private int dimension = 30;
|
||||||
private long seed = System.currentTimeMillis();
|
private long seed = System.currentTimeMillis();
|
||||||
|
|
||||||
private AbstractOptimizationProblem problem;
|
private AbstractProblemDoubleOffset problem;
|
||||||
private InterfaceOptimizer optimizer;
|
private InterfaceOptimizer optimizer;
|
||||||
private InterfaceMutation mutator;
|
private InterfaceMutation mutator;
|
||||||
private InterfaceCrossover crossover;
|
private InterfaceCrossover crossover;
|
||||||
@ -102,6 +107,7 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
.hasArg()
|
.hasArg()
|
||||||
.create('p')
|
.create('p')
|
||||||
);
|
);
|
||||||
|
opt.addOption("dim", true, "Problem Dimension");
|
||||||
return opt;
|
return opt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,11 +165,11 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
return optimizerList;
|
return optimizerList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, Class<? extends AbstractProblemDouble>> createProblemList() {
|
public static Map<String, Class<? extends AbstractProblemDoubleOffset>> createProblemList() {
|
||||||
Map<String, Class<? extends AbstractProblemDouble>> problemList = new TreeMap<String, Class<? extends AbstractProblemDouble>>();
|
Map<String, Class<? extends AbstractProblemDoubleOffset>> problemList = new TreeMap<String, Class<? extends AbstractProblemDoubleOffset>>();
|
||||||
Reflections reflections = new Reflections("eva2.optimization.problems");
|
Reflections reflections = new Reflections("eva2.optimization.problems");
|
||||||
Set<Class<? extends AbstractProblemDouble>> problems = reflections.getSubTypesOf(AbstractProblemDouble.class);
|
Set<Class<? extends AbstractProblemDoubleOffset>> problems = reflections.getSubTypesOf(AbstractProblemDoubleOffset.class);
|
||||||
for (Class<? extends AbstractProblemDouble> problem : problems) {
|
for (Class<? extends AbstractProblemDoubleOffset> problem : problems) {
|
||||||
// We only want instantiable classes
|
// We only want instantiable classes
|
||||||
if (problem.isInterface() || Modifier.isAbstract(problem.getModifiers())) {
|
if (problem.isInterface() || Modifier.isAbstract(problem.getModifiers())) {
|
||||||
continue;
|
continue;
|
||||||
@ -304,6 +310,11 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
setProblemFromName(problemName);
|
setProblemFromName(problemName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (commandLine.hasOption("dim")) {
|
||||||
|
this.dimension = Integer.parseInt(commandLine.getOptionValue("dim"));
|
||||||
|
}
|
||||||
|
this.problem.setProblemDimension(this.dimension);
|
||||||
|
|
||||||
if (commandLine.hasOption("mutator")) {
|
if (commandLine.hasOption("mutator")) {
|
||||||
String mutatorName = commandLine.getOptionValue("mutator");
|
String mutatorName = commandLine.getOptionValue("mutator");
|
||||||
try {
|
try {
|
||||||
@ -312,6 +323,8 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
System.out.println(ex.getMessage());
|
System.out.println(ex.getMessage());
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
this.mutator = new MutateDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commandLine.hasOption("crossover")) {
|
if (commandLine.hasOption("crossover")) {
|
||||||
@ -322,6 +335,8 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
System.out.println(ex.getMessage());
|
System.out.println(ex.getMessage());
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
this.crossover = new CrossoverESDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commandLine.hasOption("selection")) {
|
if (commandLine.hasOption("selection")) {
|
||||||
@ -332,6 +347,8 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
System.out.println(ex.getMessage());
|
System.out.println(ex.getMessage());
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
this.selection = new SelectXProbRouletteWheel();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Depends on mutator/crossover/selection being set
|
// Depends on mutator/crossover/selection being set
|
||||||
@ -347,6 +364,7 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
|
|
||||||
this.jsonObject.addProperty("population_size", this.populationSize);
|
this.jsonObject.addProperty("population_size", this.populationSize);
|
||||||
this.jsonObject.addProperty("number_of_runs", this.numberOfRuns);
|
this.jsonObject.addProperty("number_of_runs", this.numberOfRuns);
|
||||||
|
this.jsonObject.addProperty("dimension", this.dimension);
|
||||||
this.jsonObject.addProperty("seed", this.seed);
|
this.jsonObject.addProperty("seed", this.seed);
|
||||||
|
|
||||||
JsonObject problemObject = new JsonObject();
|
JsonObject problemObject = new JsonObject();
|
||||||
@ -499,9 +517,9 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setProblemFromName(String problemName) {
|
private void setProblemFromName(String problemName) {
|
||||||
Map<String, Class<? extends AbstractProblemDouble>> problemList = createProblemList();
|
Map<String, Class<? extends AbstractProblemDoubleOffset>> problemList = createProblemList();
|
||||||
|
|
||||||
Class<? extends AbstractProblemDouble> problem = problemList.get(problemName);
|
Class<? extends AbstractProblemDoubleOffset> problem = problemList.get(problemName);
|
||||||
try {
|
try {
|
||||||
this.problem = problem.newInstance();
|
this.problem = problem.newInstance();
|
||||||
} catch (InstantiationException e) {
|
} catch (InstantiationException e) {
|
||||||
@ -560,7 +578,7 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void listProblems() {
|
private static void listProblems() {
|
||||||
Map<String, Class<? extends AbstractProblemDouble>> problemList = createProblemList();
|
Map<String, Class<? extends AbstractProblemDoubleOffset>> problemList = createProblemList();
|
||||||
|
|
||||||
System.out.println("Available Problems:");
|
System.out.println("Available Problems:");
|
||||||
for (String name : problemList.keySet()) {
|
for (String name : problemList.keySet()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user