diff --git a/src/eva2/optimization/operator/mutation/MutateESLocal.java b/src/eva2/optimization/operator/mutation/MutateESLocal.java index 38f0b5ad..47fedcc8 100644 --- a/src/eva2/optimization/operator/mutation/MutateESLocal.java +++ b/src/eva2/optimization/operator/mutation/MutateESLocal.java @@ -7,10 +7,9 @@ import eva2.optimization.population.Population; import eva2.optimization.population.PopulationInterface; import eva2.problems.InterfaceAdditionalPopulationInformer; import eva2.problems.InterfaceOptimizationProblem; -import eva2.tools.SelectedTag; -import eva2.tools.Tag; import eva2.tools.math.RNG; import eva2.util.annotation.Description; +import eva2.util.annotation.Parameter; import java.util.ArrayList; @@ -20,20 +19,18 @@ import java.util.ArrayList; @Description("The local mutation stores n sigmas for each double attribute.") public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopulationInformer, java.io.Serializable { + public enum CrossoverType { None, Intermediate, Discrete } + protected double mutationStepSize = 0.2; protected double tau1 = 0.15; protected double lowerLimitStepSize = 0.0000005; private double[] sigmas; protected double tau2 = 0.15; - protected SelectedTag crossoverType; + protected CrossoverType crossoverType; public MutateESLocal() { this.sigmas = null; - Tag[] tag = new Tag[3]; - tag[0] = new Tag(0, "None"); - tag[1] = new Tag(1, "Intermediate"); - tag[2] = new Tag(2, "Discrete"); - this.crossoverType = new SelectedTag(0, tag); + this.crossoverType = CrossoverType.None; } public MutateESLocal(MutateESLocal mutator) { @@ -45,7 +42,7 @@ public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopu this.tau1 = mutator.tau1; this.tau2 = mutator.tau2; this.lowerLimitStepSize = mutator.lowerLimitStepSize; - this.crossoverType = (SelectedTag) mutator.crossoverType.clone(); + this.crossoverType = mutator.crossoverType; } /** @@ -157,26 +154,26 @@ public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopu ArrayList tmpListA = new ArrayList(); ArrayList tmpListB = new ArrayList(); if (indy1.getMutationOperator() instanceof MutateESLocal) { - tmpListA.add(new Double(((MutateESLocal) indy1.getMutationOperator()).mutationStepSize)); + tmpListA.add(((MutateESLocal) indy1.getMutationOperator()).mutationStepSize); tmpListB.add(((MutateESLocal) indy1.getMutationOperator()).sigmas); } for (int i = 0; i < partners.size(); i++) { if (((AbstractEAIndividual) partners.get(i)).getMutationOperator() instanceof MutateESLocal) { - tmpListA.add(new Double(((MutateESLocal) ((AbstractEAIndividual) partners.get(i)).getMutationOperator()).mutationStepSize)); + tmpListA.add(((MutateESLocal) ((AbstractEAIndividual) partners.get(i)).getMutationOperator()).mutationStepSize); tmpListB.add(((MutateESLocal) ((AbstractEAIndividual) partners.get(i)).getMutationOperator()).sigmas); } } double[] listA = new double[tmpListA.size()]; double[][] listB = new double[tmpListA.size()][]; for (int i = 0; i < tmpListA.size(); i++) { - listA[i] = ((Double) tmpListA.get(i)).doubleValue(); + listA[i] = (Double) tmpListA.get(i); listB[i] = (double[]) tmpListB.get(i); } if (listA.length <= 1) { return; } - switch (this.crossoverType.getSelectedTag().getID()) { - case 1: { + switch (this.crossoverType) { + case Intermediate: { this.mutationStepSize = 0; for (int i = 0; i < this.sigmas.length; i++) { this.sigmas[i] = 0; @@ -193,7 +190,7 @@ public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopu } break; } - case 2: { + case Discrete: { int rn = RNG.randomInt(0, listA.length - 1); this.mutationStepSize = listA[rn]; for (int i = 0; i < this.sigmas.length; i++) { @@ -234,6 +231,7 @@ public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopu * * @param d The mutation operator. */ + @Parameter(description = "Choose the initial mutation step size sigma.") public void setMutationStepSize(double d) { if (d < 0) { d = this.lowerLimitStepSize; @@ -245,15 +243,12 @@ public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopu return this.mutationStepSize; } - public String mutationStepSizeTipText() { - return "Choose the initial mutation step size sigma."; - } - /** * Set the lower limit for the mutation step size with this method. * * @param d The mutation operator. */ + @Parameter(description = "Set the lower limit for the mutation step size.") public void setLowerLimitStepSize(double d) { if (d < 0) { d = 0; @@ -265,15 +260,12 @@ public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopu return this.lowerLimitStepSize; } - public String lowerLimitStepSizeTipText() { - return "Set the lower limit for the mutation step size."; - } - /** * Set the value for tau1 with this method. * * @param d The mutation operator. */ + @Parameter(description = "Set the value for tau1.") public void setTau1(double d) { if (d < 0) { d = 0; @@ -285,15 +277,12 @@ public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopu return this.tau1; } - public String tau1TipText() { - return "Set the value for tau1."; - } - /** * Set the value for tau2 with this method. * * @param d The mutation operator. */ + @Parameter(description = "Set the value for tau2.") public void setTau2(double d) { if (d < 0) { d = 0; @@ -305,27 +294,20 @@ public class MutateESLocal implements InterfaceMutation, InterfaceAdditionalPopu return this.tau2; } - public String tau2TipText() { - return "Set the value for tau2."; - } - /** * Set the value for tau1 with this method. * * @param d The mutation operator. */ - public void setCrossoverType(SelectedTag d) { + @Parameter(description = "Choose the crossover type for the strategy parameters.") + public void setCrossoverType(CrossoverType d) { this.crossoverType = d; } - public SelectedTag getCrossoverType() { + public CrossoverType getCrossoverType() { return this.crossoverType; } - public String crossoverTypeTipText() { - return "Choose the crossover type for the strategy parameters."; - } - /* * (non-Javadoc) * @see eva2.problems.InterfaceAdditionalPopulationInformer#getAdditionalDataHeader()