Replace SelectedTag with useful enum.

refs #32
This commit is contained in:
2014-11-05 18:53:47 +01:00
parent a91d9fbecc
commit e18f9e3b38

View File

@@ -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()