From 2dce6269690a4dc7599e44c66accc560d65d9459 Mon Sep 17 00:00:00 2001 From: RomanKosovnenko <pariom18@gmail.com> Date: Sat, 8 Jun 2019 17:16:15 +0200 Subject: [PATCH] Add dependency injections --- .../mquat/solving/genetic/GeneticSolver.java | 47 +++++++- .../solving/genetic/opt4j/Opt4jEvaluator.java | 20 +++- .../solving/genetic/opt4j/Opt4jModule.java | 101 ++++++++++++++++++ .../crossover/TreeCrossoverOperator.java | 19 +++- .../operator/mutate/TreeMutateOperator.java | 42 ++++++-- .../opt4j/custom/params/Opt4jEvaluatorK1.java | 13 +++ .../opt4j/custom/params/Opt4jEvaluatorK2.java | 13 +++ .../params/TreeCrossoverOperatorMax.java | 13 +++ .../params/TreeCrossoverOperatorMin.java | 13 +++ .../TreeCrossoverOperatorProbability.java | 13 +++ .../custom/params/TreeMutateOperatorMax.java | 13 +++ .../custom/params/TreeMutateOperatorMin.java | 13 +++ .../custom/params/TreeMutateOperatorP.java | 13 +++ .../custom/params/TreeMutateOperatorP1.java | 13 +++ .../custom/params/TreeMutateOperatorP2.java | 13 +++ .../custom/params/TreeMutateOperatorP3.java | 13 +++ 16 files changed, 351 insertions(+), 21 deletions(-) create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/Opt4jEvaluatorK1.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/Opt4jEvaluatorK2.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorMax.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorMin.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorProbability.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorMax.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorMin.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP1.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP2.java create mode 100644 jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP3.java diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/GeneticSolver.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/GeneticSolver.java index 656d09c..8ecb48e 100644 --- a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/GeneticSolver.java +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/GeneticSolver.java @@ -19,6 +19,7 @@ import org.opt4j.core.start.Opt4JTask; import org.opt4j.optimizers.ea.EvolutionaryAlgorithmModule; import org.opt4j.optimizers.ea.Nsga2Module; import org.opt4j.optimizers.ea.Spea2Module; +import org.opt4j.optimizers.ea.EvolutionaryAlgorithmModule.CrossoverRateType; import java.util.concurrent.TimeUnit; @@ -41,6 +42,22 @@ public class GeneticSolver implements BenchmarkableSolver { private SelectorType selectorType; private boolean timedOut; + // + private double treeCrossoverOperatorMin; + private double treeCrossoverOperatorMax; + private double treeCrossoverOperatorProbability; + + private double treeMutateOperatorMin; + private double treeMutateOperatorMax; + private double treeMutateOperatorP; + private double treeMutateOperatorP1; + private double treeMutateOperatorP2; + private double treeMutateOperatorP3; + + private double opt4jEvaluatorK1; + private double opt4jEvaluatorK2; + // + public GeneticSolver() { this(SelectorType.NSGA2, 100, 100); } @@ -68,15 +85,33 @@ public class GeneticSolver implements BenchmarkableSolver { Opt4jModule.setModel(model); EvolutionaryAlgorithmModule ea = new EvolutionaryAlgorithmModule(); - ea.setGenerations(this.generations); - - // set population size - ea.setAlpha(this.populationSize); + ea.setGenerations(this.generations); //The number of generations. + ea.setAlpha(this.populationSize); //The size of the population.4 + // + ea.setLambda(lambda); //The number of offspring per generation. //Dep inj no + ea.setCrossoverRate(crossoverRate); //Performs a crossover operation with this given rate. //Dep inj no + ea.setCrossoverRateType(CrossoverRateType.CONSTANT); // no more variants //Dep inj no + ea.setMu(mu); //The number of parents per generation. //Dep inj no + // Opt4jModule mquatModule = new Opt4jModule(); mquatModule.setMaxSolvingTime(this.maxSolvingTime); + // + mquatModule.setTreeCrossoverOperatorMin(this.treeCrossoverOperatorMin); + mquatModule.setTreeCrossoverOperatorMax(this.treeCrossoverOperatorMax); + mquatModule.setTreeCrossoverOperatorProbability(this.treeCrossoverOperatorProbability); + mquatModule.setTreeMutateOperatorMin(this.treeMutateOperatorMin); + mquatModule.setTreeMutateOperatorMax(this.treeMutateOperatorMax); + mquatModule.setTreeMutateOperatorP(this.treeMutateOperatorP); + mquatModule.setTreeMutateOperatorP1(this.treeMutateOperatorP1); + mquatModule.setTreeMutateOperatorP2(this.treeMutateOperatorP2); + mquatModule.setTreeMutateOperatorP3(this.treeMutateOperatorP3); + mquatModule.setOpt4jEvaluatorK1(this.opt4jEvaluatorK1); + mquatModule.setOpt4jEvaluatorK2(this.opt4jEvaluatorK2); + // + TreeCrossoverOperatorModule crossover = new TreeCrossoverOperatorModule(); TreeMutateOperatorModule mutate = new TreeMutateOperatorModule(); TreeCopyOperatorModule copy = new TreeCopyOperatorModule(); @@ -89,11 +124,13 @@ public class GeneticSolver implements BenchmarkableSolver { switch (this.selectorType) { case NSGA2: Nsga2Module nsga2 = new Nsga2Module(); + nsga2.setTournament(tournament); //Dep inj no task.init(optimizerModule, ea, nsga2, mquatModule, crossover, mutate, copy); // task.init(optimizerModule, ea, nsga2, mquatModule, crossover, mutate, copy, viewer); break; case SPEA2: Spea2Module spea2 = new Spea2Module(); + spea2.setTournament(tournament); //Dep inj no task.init(optimizerModule, ea, spea2, mquatModule, crossover, mutate, copy); // task.init(optimizerModule, ea, spea2, mquatModule, crossover, mutate, copy, viewer); } @@ -150,6 +187,8 @@ public class GeneticSolver implements BenchmarkableSolver { return this; } + + @Override public boolean hadTimeout() { return this.timedOut; diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jEvaluator.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jEvaluator.java index 3cec7c5..062c7dc 100644 --- a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jEvaluator.java +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jEvaluator.java @@ -1,12 +1,28 @@ package de.tudresden.inf.st.mquat.solving.genetic.opt4j; import de.tudresden.inf.st.mquat.jastadd.model.Solution; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.Opt4jEvaluatorK1; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.Opt4jEvaluatorK2; + import org.opt4j.core.Objective.Sign; import org.opt4j.core.Objectives; import org.opt4j.core.problem.Evaluator; public class Opt4jEvaluator implements Evaluator<Solution> { + // + private double opt4jEvaluatorK1; + private double opt4jEvaluatorK2; + // + + // + @Inject + public Opt4jEvaluator(@Opt4jEvaluatorK1 double opt4jEvaluatorK1, @Opt4jEvaluatorK2 double opt4jEvaluatorK2) { + this.opt4jEvaluatorK1 = opt4jEvaluatorK1; + this.opt4jEvaluatorK2 = opt4jEvaluatorK2; + } + // + @Override public Objectives evaluate(Solution phenotype) { Objectives objectives = new Objectives(); @@ -19,8 +35,8 @@ public class Opt4jEvaluator implements Evaluator<Solution> { double objective = phenotype.computeObjective(); - objective += validity * 0.5 * objective; - objective += softwareValidity * 0.5 * objective; + objective += validity * this.opt4jEvaluatorK1 * objective; //Dep inj Opt4jEvaluatorK1 + objective += softwareValidity * this.opt4jEvaluatorK2 * objective; //Dep inj Opt4jEvaluatorK2 objectives.add("Energy", Sign.MIN, objective); diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jModule.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jModule.java index 6426e7f..4602e22 100644 --- a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jModule.java +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/Opt4jModule.java @@ -2,6 +2,19 @@ package de.tudresden.inf.st.mquat.solving.genetic.opt4j; import de.tudresden.inf.st.mquat.jastadd.model.Root; import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.optimizer.MaxSolvingTime; +// +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeCrossoverOperatorMin; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeCrossoverOperatorMax; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeCrossoverOperatorProbability; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorMin; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorMax; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorP; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorP1; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorP2; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorP3; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.Opt4jEvaluatorK1; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.Opt4jEvaluatorK2; +// import org.opt4j.core.problem.ProblemModule; public class Opt4jModule extends ProblemModule { @@ -10,6 +23,33 @@ public class Opt4jModule extends ProblemModule { public Long maxSolvingTime = Long.MAX_VALUE; private static Root model; + // + @TreeCrossoverOperatorMin + public double treeCrossoverOperatorMin = 0.0d; + @TreeCrossoverOperatorMax + public double treeCrossoverOperatorMax = 1.0d; + @TreeCrossoverOperatorProbability + public double treeCrossoverOperatorProbability = 0.5; + + @TreeMutateOperatorMin + public double treeMutateOperatorMin = 0.0d; + @TreeMutateOperatorMax + public double treeMutateOperatorMax = 1.0d; + @TreeMutateOperatorP + public double treeMutateOperatorP = 0.9; + @TreeMutateOperatorP1 + public double treeMutateOperatorP1 = 3.0; + @TreeMutateOperatorP2 + public double treeMutateOperatorP2 = 0.7; + @TreeMutateOperatorP3 + public double treeMutateOperatorP3 = 0.4; + + @Opt4jEvaluatorK1 + public double opt4jEvaluatorK1 = 0.5; + @Opt4jEvaluatorK2 + public double opt4jEvaluatorK2 = 0.5; + // + public static Root getModel() { return model; } @@ -22,10 +62,71 @@ public class Opt4jModule extends ProblemModule { this.maxSolvingTime = maxSolvingTime; } + // + public void setTreeCrossoverOperatorMin(double treeCrossoverOperatorMin) { + this.treeCrossoverOperatorMin = treeCrossoverOperatorMin; + } + + public void setTreeCrossoverOperatorMax(double treeCrossoverOperatorMax) { + this.treeCrossoverOperatorMax = treeCrossoverOperatorMax; + } + + public void setTreeCrossoverOperatorProbability(double treeCrossoverOperatorProbability) { + this.treeCrossoverOperatorProbability = treeCrossoverOperatorProbability; + } + + public void setTreeMutateOperatorMin(double treeMutateOperatorMin) { + this.treeMutateOperatorMin = treeMutateOperatorMin; + } + + public void setTreeMutateOperatorMax(double treeMutateOperatorMax) { + this.treeMutateOperatorMax = treeMutateOperatorMax; + } + + public void setTreeMutateOperatorP(double treeMutateOperatorP) { + this.treeMutateOperatorP = treeMutateOperatorP; + } + + public void setTreeMutateOperatorP1(double treeMutateOperatorP1) { + this.treeMutateOperatorP1 = treeMutateOperatorP1; + } + + public void setTreeMutateOperatorP2(double treeMutateOperatorP2) { + this.treeMutateOperatorP2 = treeMutateOperatorP2; + } + + public void setTreeMutateOperatorP3(double treeMutateOperatorP3) { + this.treeMutateOperatorP3 = treeMutateOperatorP3; + } + + public void setOpt4jEvaluatorK1(double opt4jEvaluatorK1) { + this.opt4jEvaluatorK1 = opt4jEvaluatorK1; + } + + public void setOpt4jEvaluatorK2(double opt4jEvaluatorK2) { + this.opt4jEvaluatorK2 = opt4jEvaluatorK2; + } + + + // + @Override protected void configure() { bindProblem(Opt4jCreator.class, Opt4jDecoder.class, Opt4jEvaluator.class); bindConstant(MaxSolvingTime.class).to(maxSolvingTime); + // + bindConstant(TreeCrossoverOperatorMin.class).to(treeCrossoverOperatorMin); + bindConstant(TreeCrossoverOperatorMax.class).to(treeCrossoverOperatorMax); + bindConstant(TreeCrossoverOperatorProbability.class).to(treeCrossoverOperatorProbability); + bindConstant(TreeMutateOperatorMin.class).to(treeMutateOperatorMin); + bindConstant(TreeMutateOperatorMax.class).to(treeMutateOperatorMax); + bindConstant(TreeMutateOperatorP.class).to(treeMutateOperatorP); + bindConstant(TreeMutateOperatorP1.class).to(treeMutateOperatorP1); + bindConstant(TreeMutateOperatorP2.class).to(treeMutateOperatorP2); + bindConstant(TreeMutateOperatorP3.class).to(treeMutateOperatorP3); + bindConstant(Opt4jEvaluatorK1.class).to(opt4jEvaluatorK1); + bindConstant(Opt4jEvaluatorK2.class).to(opt4jEvaluatorK2); + // } @Override diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/operator/crossover/TreeCrossoverOperator.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/operator/crossover/TreeCrossoverOperator.java index 10c2233..3f028bf 100644 --- a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/operator/crossover/TreeCrossoverOperator.java +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/operator/crossover/TreeCrossoverOperator.java @@ -7,6 +7,10 @@ import de.tudresden.inf.st.mquat.jastadd.model.Request; import de.tudresden.inf.st.mquat.jastadd.model.Resource; import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.genotypes.TreeGenotype; import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.genotypes.TreeGenotypeNode; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeCrossoverOperatorMax; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeCrossoverOperatorMin; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeCrossoverOperatorProbability; + import org.opt4j.core.common.random.Rand; import org.opt4j.operators.Apply; import org.opt4j.operators.crossover.Crossover; @@ -18,13 +22,18 @@ import java.util.Random; public class TreeCrossoverOperator implements Crossover<TreeGenotype<Request, Instance, Resource, Implementation>> { private final Random random; - private static final double Min = 0.0d; - private static final double Max = 1.0d; - private static final double probability = 0.5; + private final double Min = 0.0d; //Dep inj TreeCrossoverOperatorMin + private final double Max = 1.0d; //Dep inj TreeCrossoverOperatorMax + private final double probability = 0.5; //Dep inj TreeCrossoverOperatorProbability @Inject - public TreeCrossoverOperator(Rand random) { + public TreeCrossoverOperator(Rand random, @TreeCrossoverOperatorMin double treeCrossoverOperatorMin, @TreeCrossoverOperatorMax double treeCrossoverOperatorMax, @TreeCrossoverOperatorProbability double treeCrossoverOperatorProbability) { this.random = random; + // + this.Min = treeCrossoverOperatorMin; + this.Max = treeCrossoverOperatorMax; + this.probability = treeCrossoverOperatorProbability; + // } @Override @@ -79,7 +88,7 @@ public class TreeCrossoverOperator implements Crossover<TreeGenotype<Request, In } else { // TODO figure out what to swap - double randomValue = Min + (Max - Min) * this.random.nextDouble(); + double randomValue = this.Min + (this.Max - this.Min) * this.random.nextDouble(); boolean swapImpl = this.random.nextBoolean(); boolean swapResource = this.random.nextBoolean(); diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/operator/mutate/TreeMutateOperator.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/operator/mutate/TreeMutateOperator.java index ca6a16e..9da0c24 100644 --- a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/operator/mutate/TreeMutateOperator.java +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/operator/mutate/TreeMutateOperator.java @@ -5,6 +5,13 @@ import de.tudresden.inf.st.mquat.jastadd.model.*; import de.tudresden.inf.st.mquat.solving.genetic.opt4j.Opt4jCreator; import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.genotypes.TreeGenotype; import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.genotypes.TreeGenotypeNode; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorMax; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorMin; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorP; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorP1; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorP2; +import de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params.TreeMutateOperatorP3; + import org.opt4j.core.common.random.Rand; import org.opt4j.operators.Apply; import org.opt4j.operators.mutate.Mutate; @@ -16,25 +23,40 @@ import java.util.Random; public class TreeMutateOperator implements Mutate<TreeGenotype<Request, Instance, Resource, Implementation>> { private final Random random; - private static final double Min = 0.0d; - private static final double Max = 1.0d; + private final double Min = 0.0d; //Dep inj TreeMutateOperatorMin + private final double Max = 1.0d; //Dep inj TreeMutateOperatorMax + + // + private double treeMutateOperatorP; + private double treeMutateOperatorP1; + private double treeMutateOperatorP2; + private double treeMutateOperatorP3; + // @Inject - public TreeMutateOperator(Rand random) { + public TreeMutateOperator(Rand random, @TreeMutateOperatorMax double treeMutateOperatorMax, @TreeMutateOperatorMin double treeMutateOperatorMin, @TreeMutateOperatorP double treeMutateOperatorP, @TreeMutateOperatorP1 double treeMutateOperatorP1, @TreeMutateOperatorP2 double treeMutateOperatorP2, @TreeMutateOperatorP3 double treeMutateOperatorP3) { this.random = random; + // + this.Min = treeMutateOperatorMin; + this.Max = treeMutateOperatorMax; + this.treeMutateOperatorP = treeMutateOperatorP; + this.treeMutateOperatorP1 = treeMutateOperatorP1; + this.treeMutateOperatorP2 = treeMutateOperatorP2; + this.treeMutateOperatorP3 = treeMutateOperatorP3; + // } @Override - public void mutate(TreeGenotype<Request, Instance, Resource, Implementation> genotype, double p) { + public void mutate(TreeGenotype<Request, Instance, Resource, Implementation> genotype, @TreeMutateOperatorP double p) { - p = 0.9; + //p = 0.9; //Dep inj TreeMutateOperatorP for (Request e : genotype.getRequestMap() .keySet()) { TreeGenotypeNode<Request, Instance, Resource, Implementation> node = genotype.getRequestMap().get(e); - double randomValue = Min + (Max - Min) * this.random.nextDouble(); + double randomValue = this.Min + (this.Max - this.Min) * this.random.nextDouble(); if (randomValue < p) { genotype.getRequestMap().put(e, mutateNode(e, node, p)); @@ -48,11 +70,11 @@ public class TreeMutateOperator implements Mutate<TreeGenotype<Request, Instance - double randomValue = Min + (Max - Min) * random.nextDouble(); + double randomValue = this.Min + (this.Max - this.Min) * random.nextDouble(); - if (randomValue < p/3.0) { + if (randomValue < p/this.treeMutateOperatorP1) { //Dep inj TreeMutateOperatorP1 List<Resource> unassignedResources = node.getContainingGenotype().getResources(); - if (random.nextDouble() > 0.7) { + if (random.nextDouble() > this.treeMutateOperatorP2) { //Dep inj TreeMutateOperatorP2 // mutate the resources unassignedResources.add(node.getResource()); // get a random unassigned resource @@ -60,7 +82,7 @@ public class TreeMutateOperator implements Mutate<TreeGenotype<Request, Instance node.setResource(unassignedResources.get(resourceIndex)); unassignedResources.remove(resourceIndex); } - if (random.nextDouble() > 0.4) { + if (random.nextDouble() > this.treeMutateOperatorP3) { //Dep inj TreeMutateOperatorP3 // mutate the implementation Component comp = node.getImpl().containingComponent(); Implementation newImp = comp.getImplementation(random.nextInt(comp.getNumImplementation())); diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/Opt4jEvaluatorK1.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/Opt4jEvaluatorK1.java new file mode 100644 index 0000000..0fa15f9 --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/Opt4jEvaluatorK1.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface Opt4jEvaluatorK1 { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/Opt4jEvaluatorK2.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/Opt4jEvaluatorK2.java new file mode 100644 index 0000000..360a5ff --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/Opt4jEvaluatorK2.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface Opt4jEvaluatorK2 { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorMax.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorMax.java new file mode 100644 index 0000000..5b781b3 --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorMax.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeCrossoverOperatorMax { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorMin.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorMin.java new file mode 100644 index 0000000..6a660c8 --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorMin.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeCrossoverOperatorMin { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorProbability.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorProbability.java new file mode 100644 index 0000000..8efe4b3 --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeCrossoverOperatorProbability.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeCrossoverOperatorProbability { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorMax.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorMax.java new file mode 100644 index 0000000..a51706d --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorMax.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeMutateOperatorMax { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorMin.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorMin.java new file mode 100644 index 0000000..7c31d7b --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorMin.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeMutateOperatorMin { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP.java new file mode 100644 index 0000000..825b5b0 --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeMutateOperatorP { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP1.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP1.java new file mode 100644 index 0000000..30ad79d --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP1.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeMutateOperatorP1 { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP2.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP2.java new file mode 100644 index 0000000..3e0393e --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP2.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeMutateOperatorP2 { + +} \ No newline at end of file diff --git a/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP3.java b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP3.java new file mode 100644 index 0000000..672cd17 --- /dev/null +++ b/jastadd-mquat-solver-genetic/src/main/java/de/tudresden/inf/st/mquat/solving/genetic/opt4j/custom/params/TreeMutateOperatorP3.java @@ -0,0 +1,13 @@ +package de.tudresden.inf.st.mquat.solving.genetic.opt4j.custom.params; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@BindingAnnotation +public @interface TreeMutateOperatorP3 { + +} \ No newline at end of file -- GitLab