Fixing lots of smaller bugs and code inconsitencies.

Added several annotations and removed globalInfo/TipText methods.
This commit is contained in:
Fabian Becker 2014-01-21 16:50:18 +01:00
parent 531bbe50ed
commit 63fe74d2e0
13 changed files with 153 additions and 170 deletions

View File

@ -324,6 +324,10 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
break; break;
case "EvolutionStrategies": case "EvolutionStrategies":
//double cm, cr;
//int mu, lambda;
boolean plusStrategy;
//this.optimizer = OptimizerFactory.createEvolutionStrategy()
break; break;
default: default:
throw new Exception("Unsupported Optimizer"); throw new Exception("Unsupported Optimizer");
@ -349,7 +353,7 @@ public class Main implements OptimizationStateListener, InterfacePopulationChang
OptimizerFactory.setEvaluationTerminator(50000); OptimizerFactory.setEvaluationTerminator(50000);
OptimizerFactory.addTerminator(new FitnessValueTerminator(new double[]{0.00001}), CombinedTerminator.OR); OptimizerFactory.addTerminator(new FitnessValueTerminator(new double[]{0.00001}), CombinedTerminator.OR);
LOGGER.log(Level.INFO, "Running {0}", "Differential Evolution"); LOGGER.log(Level.INFO, "Running {0}", optimizer.getName());
OptimizationParameters params = OptimizerFactory.makeParams(optimizer, this.populationSize, this.problem); OptimizationParameters params = OptimizerFactory.makeParams(optimizer, this.populationSize, this.problem);
double[] result = OptimizerFactory.optimizeToDouble(params); double[] result = OptimizerFactory.optimizeToDouble(params);

View File

@ -7,35 +7,29 @@ import eva2.optimization.problems.InterfaceOptimizationProblem;
import eva2.optimization.strategies.InterfaceOptimizer; import eva2.optimization.strategies.InterfaceOptimizer;
/** /**
* Created by IntelliJ IDEA. *
* User: streiche
* Date: 11.05.2003
* Time: 13:14:06
* To change this template use Options | File Templates.
*/ */
public interface InterfaceOptimizationParameters { public interface InterfaceOptimizationParameters {
/** /**
* This method allows you to serialize the current parameters into a *.ser file * This method allows you to serialize the current parameters into a *.ser file
*/ */
public void saveInstance(); void saveInstance();
/** /**
* This method returns the name * This method returns the name
* *
* @return string * @return string
*/ */
public String getName(); String getName();
/** /**
* This methods allow you to set and get the Seed for the Random Number Generator. * This methods allow you to set and get the Seed for the Random Number Generator.
* *
* @param x Long seed. * @param x Long seed.
*/ */
public void setSeed(long x); void setSeed(long x);
public long getSeed(); long getSeed();
public String seedTipText();
/** /**
* This method allows you to choose a termination criteria for the * This method allows you to choose a termination criteria for the
@ -43,48 +37,33 @@ public interface InterfaceOptimizationParameters {
* *
* @param term The new terminator * @param term The new terminator
*/ */
public void setTerminator(InterfaceTerminator term); void setTerminator(InterfaceTerminator term);
public InterfaceTerminator getTerminator(); InterfaceTerminator getTerminator();
public String terminatorTipText();
/** /**
* This method allows you to set the current optimizing algorithm * This method allows you to set the current optimizing algorithm
* *
* @param optimizer The new optimizing algorithm * @param optimizer The new optimizing algorithm
*/ */
public void setOptimizer(InterfaceOptimizer optimizer); void setOptimizer(InterfaceOptimizer optimizer);
public InterfaceOptimizer getOptimizer(); InterfaceOptimizer getOptimizer();
// public String optimizerTipText();
/** /**
* This method will set the problem that is to be optimized * This method will set the problem that is to be optimized
* *
* @param problem * @param problem
*/ */
public void setProblem(InterfaceOptimizationProblem problem); void setProblem(InterfaceOptimizationProblem problem);
public InterfaceOptimizationProblem getProblem(); InterfaceOptimizationProblem getProblem();
public String problemTipText(); InterfacePostProcessParams getPostProcessParams();
/** void setPostProcessParams(InterfacePostProcessParams ppp);
* This method will set the output filename
*
* @param name TODO invalidate these!
*/
// public void setOutputFileName (String name);
// public String getOutputFileName ();
// public String outputFileNameTipText();
public InterfacePostProcessParams getPostProcessParams();
public void setPostProcessParams(InterfacePostProcessParams ppp); void setDoPostProcessing(boolean doPP);
public String postProcessParamsTipText();
public void setDoPostProcessing(boolean doPP);
/** /**
* Give an instance which should be informed about elements which are additional informers. * Give an instance which should be informed about elements which are additional informers.
@ -92,7 +71,7 @@ public interface InterfaceOptimizationParameters {
* @param o * @param o
* @see InterfaceAdditionalPopulationInformer * @see InterfaceAdditionalPopulationInformer
*/ */
public void addInformableInstance(InterfaceNotifyOnInformers o); void addInformableInstance(InterfaceNotifyOnInformers o);
public boolean removeInformableInstance(InterfaceNotifyOnInformers o); boolean removeInformableInstance(InterfaceNotifyOnInformers o);
} }

View File

@ -11,6 +11,7 @@ import eva2.optimization.problems.InterfaceAdditionalPopulationInformer;
import eva2.optimization.problems.InterfaceOptimizationProblem; import eva2.optimization.problems.InterfaceOptimizationProblem;
import eva2.optimization.strategies.InterfaceOptimizer; import eva2.optimization.strategies.InterfaceOptimizer;
import eva2.tools.Serializer; import eva2.tools.Serializer;
import eva2.util.annotation.Parameter;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -23,13 +24,39 @@ import java.util.logging.Logger;
public abstract class AbstractOptimizationParameters implements InterfaceOptimizationParameters, Serializable { public abstract class AbstractOptimizationParameters implements InterfaceOptimizationParameters, Serializable {
protected static final Logger LOGGER = Logger.getLogger(AbstractOptimizationParameters.class.getName()); protected static final Logger LOGGER = Logger.getLogger(AbstractOptimizationParameters.class.getName());
@Parameter(name = "Random Seed", description = "Random number seed, set to zero to use current system time.")
protected long randomSeed = (long) 0.0; protected long randomSeed = (long) 0.0;
// Opt. Algorithms and Parameters /**
* The optimizer to be executed.
*/
@Parameter(name = "Optimizer", description = "Choose an optimization strategy.")
protected InterfaceOptimizer optimizer; protected InterfaceOptimizer optimizer;
/**
* The optimization problem to be optimized.
* When changed it is automatically applied to the
* selected optimizer.
*/
@Parameter(name = "Problem", description = "Choose the problem that is to optimize and the EA individual parameters.")
protected InterfaceOptimizationProblem problem; protected InterfaceOptimizationProblem problem;
/**
* The termination criteria that terminated an
* optimization run.
*/
@Parameter(name = "Terminator", description = "Choose a termination criterion.")
protected InterfaceTerminator terminator; protected InterfaceTerminator terminator;
/**
* Post processing parameters.
* This can be enabled in the UI and will perform additional
* optimization e.g. with Hill Climbing.
*/
@Parameter(name = "Post Processing", description = "Parameters for the post processing step.")
protected InterfacePostProcessParams postProcessing = new PostProcessParams(false); protected InterfacePostProcessParams postProcessing = new PostProcessParams(false);
transient protected InterfacePopulationChangedEventListener populationChangedEventListener; transient protected InterfacePopulationChangedEventListener populationChangedEventListener;
transient private List<InterfaceNotifyOnInformers> toInformAboutInformers = null; transient private List<InterfaceNotifyOnInformers> toInformAboutInformers = null;
@ -181,10 +208,6 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz
return this.optimizer; return this.optimizer;
} }
public String optimizerTipText() {
return "Choose an optimization strategy.";
}
@Override @Override
public String getName() { public String getName() {
return "Optimization parameters"; return "Optimization parameters";
@ -207,11 +230,6 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz
return this.problem; return this.problem;
} }
@Override
public String problemTipText() {
return "Choose the problem that is to optimize and the EA individual parameters.";
}
/** /**
* This methods allow you to set and get the Seed for the Random Number Generator. * This methods allow you to set and get the Seed for the Random Number Generator.
* *
@ -232,11 +250,6 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz
return randomSeed; return randomSeed;
} }
@Override
public String seedTipText() {
return "Random number seed, set to zero to use current system time.";
}
/** /**
* This method allows you to choose a termination criteria for the * This method allows you to choose a termination criteria for the
* evolutionary algorithm. * evolutionary algorithm.
@ -253,11 +266,6 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz
return this.terminator; return this.terminator;
} }
@Override
public String terminatorTipText() {
return "Choose a termination criterion.";
}
@Override @Override
public InterfacePostProcessParams getPostProcessParams() { public InterfacePostProcessParams getPostProcessParams() {
return postProcessing; return postProcessing;
@ -268,11 +276,6 @@ public abstract class AbstractOptimizationParameters implements InterfaceOptimiz
postProcessing = ppp; postProcessing = ppp;
} }
@Override
public String postProcessParamsTipText() {
return "Parameters for the post processing step";
}
@Override @Override
public void setDoPostProcessing(boolean doPP) { public void setDoPostProcessing(boolean doPP) {
postProcessing.setDoPostProcessing(doPP); postProcessing.setDoPostProcessing(doPP);

View File

@ -102,7 +102,6 @@ public class MOEAParameters extends AbstractOptimizationParameters implements In
((MultiObjectiveEA) this.optimizer).setOptimizer(b); ((MultiObjectiveEA) this.optimizer).setOptimizer(b);
} }
@Override
public String optimizerTipText() { public String optimizerTipText() {
return "Choose a population based optimizing technique to use."; return "Choose a population based optimizing technique to use.";
} }

View File

@ -8,6 +8,7 @@ import eva2.optimization.problems.InterfaceOptimizationProblem;
import eva2.optimization.strategies.GeneticAlgorithm; import eva2.optimization.strategies.GeneticAlgorithm;
import eva2.optimization.strategies.InterfaceOptimizer; import eva2.optimization.strategies.InterfaceOptimizer;
import eva2.tools.Serializer; import eva2.tools.Serializer;
import eva2.util.annotation.Description;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@ -16,16 +17,24 @@ import java.util.logging.Level;
/** /**
* OptimizationParamers for configuration of an * OptimizationParameters for configuration of an
* optimization run. * optimization run.
* <p/> * <p/>
* This class is used to generate the default GUI * This class is used to generate the default GUI
* configuration panel for optimizations. * configuration panel for optimizations.
*/ */
@Description("Select the optimization parameters.")
public class OptimizationParameters extends AbstractOptimizationParameters implements InterfaceOptimizationParameters, Serializable { public class OptimizationParameters extends AbstractOptimizationParameters implements InterfaceOptimizationParameters, Serializable {
/**
* Should be removed and replaced by a more solid
* serialization. (EvAScript?)
*
* @deprecated
* @return
*/
public static OptimizationParameters getInstance() { public static OptimizationParameters getInstance() {
return getInstance("OptimizationParameters.ser", true); return getInstance("OptimizationParameters.set", true);
} }
/** /**
@ -80,13 +89,4 @@ public class OptimizationParameters extends AbstractOptimizationParameters imple
public Object clone() { public Object clone() {
return new OptimizationParameters(this); return new OptimizationParameters(this);
} }
/**
* This method returns a global info string.
*
* @return description
*/
public static String globalInfo() {
return "Select the optimization parameters.";
}
} }

View File

@ -16,14 +16,14 @@ import java.util.BitSet;
*/ */
public class CM2 implements InterfaceCrossover, java.io.Serializable { public class CM2 implements InterfaceCrossover, java.io.Serializable {
private InterfaceOptimizationProblem m_OptimizationProblem; private InterfaceOptimizationProblem optimizationProblem;
public CM2() { public CM2() {
} }
public CM2(CM2 c) { public CM2(CM2 c) {
this.m_OptimizationProblem = c.m_OptimizationProblem; this.optimizationProblem = c.optimizationProblem;
} }
@Override @Override
@ -58,7 +58,7 @@ public class CM2 implements InterfaceCrossover, java.io.Serializable {
@Override @Override
public void init(AbstractEAIndividual individual, public void init(AbstractEAIndividual individual,
InterfaceOptimizationProblem opt) { InterfaceOptimizationProblem opt) {
this.m_OptimizationProblem = opt; this.optimizationProblem = opt;
} }
@Override @Override

View File

@ -10,11 +10,7 @@ import java.util.ArrayList;
/** /**
* Created by IntelliJ IDEA. *
* User: Dante Alighieri
* Date: 21.05.2005
* Time: 11:36:38
* To change this template use File | Settings | File Templates.
*/ */
public class CrossoverEAMixer implements InterfaceCrossover, InterfaceEvaluatingCrossoverOperator, java.io.Serializable { public class CrossoverEAMixer implements InterfaceCrossover, InterfaceEvaluatingCrossoverOperator, java.io.Serializable {
public static final String CROSSOVER_EA_MIXER_OPERATOR_KEY = "CrossoverEAMixerOperatorKey"; public static final String CROSSOVER_EA_MIXER_OPERATOR_KEY = "CrossoverEAMixerOperatorKey";
@ -60,7 +56,7 @@ public class CrossoverEAMixer implements InterfaceCrossover, InterfaceEvaluating
this.m_Crossers.setSelectedCrossers(tmpList); this.m_Crossers.setSelectedCrossers(tmpList);
this.m_Crossers.normalizeWeights(); this.m_Crossers.normalizeWeights();
this.m_Crossers.setDescriptiveString("Combining alternative mutation operators, please norm the weights!"); this.m_Crossers.setDescriptiveString("Combining alternative mutation operators, please norm the weights!");
this.m_Crossers.setWeightsLabel("Weigths"); this.m_Crossers.setWeightsLabel("Weights");
} }
public CrossoverEAMixer(CrossoverEAMixer mutator) { public CrossoverEAMixer(CrossoverEAMixer mutator) {

View File

@ -86,7 +86,8 @@ public class TestESCrossover implements java.io.Serializable {
double[] tmpD = new double[2]; double[] tmpD = new double[2];
tmpD[0] = 0; tmpD[0] = 0;
tmpD[1] = 0; tmpD[1] = 0;
this.m_Plot = new Plot("ES Crossover Testert", "x", "y", tmpD, tmpD); // ToDo: Fix plot (it's internal and not showing)
this.m_Plot = new Plot("ES Crossover Tester", "x", "y", tmpD, tmpD);
// validate and show // validate and show
this.m_Frame.validate(); this.m_Frame.validate();
this.m_Frame.setVisible(true); this.m_Frame.setVisible(true);

View File

@ -6,7 +6,7 @@ import eva2.optimization.population.Population;
/** /**
* Simple method to selecet all. * Simple method to selecet all.
* In case of multiple fitness values the selection * In case of multiple fitness values the selection
* critria is selected randomly for each selection event. pff * criteria is selected randomly for each selection event. pff
* Created by IntelliJ IDEA. * Created by IntelliJ IDEA.
* User: streiche * User: streiche
* Date: 31.03.2004 * Date: 31.03.2004

View File

@ -211,6 +211,6 @@ public class SelectBestIndividuals implements InterfaceSelection, java.io.Serial
} }
public String obeyDebsConstViolationPrincipleToolTip() { public String obeyDebsConstViolationPrincipleToolTip() {
return "Toggle the use of Deb's coonstraint violation principle."; return "Toggle the use of Deb's constraint violation principle.";
} }
} }

View File

@ -17,8 +17,8 @@ import eva2.tools.math.RNG;
*/ */
public class SelectTournament implements InterfaceSelection, java.io.Serializable { public class SelectTournament implements InterfaceSelection, java.io.Serializable {
private int m_TournamentSize = 4; private int tournamentSize = 4;
private boolean m_ObeyDebsConstViolationPrinciple = true; private boolean obeyDebsConstViolationPrinciple = true;
public SelectTournament() { public SelectTournament() {
} }
@ -29,8 +29,8 @@ public class SelectTournament implements InterfaceSelection, java.io.Serializabl
} }
public SelectTournament(SelectTournament a) { public SelectTournament(SelectTournament a) {
this.m_TournamentSize = a.m_TournamentSize; this.tournamentSize = a.tournamentSize;
this.m_ObeyDebsConstViolationPrinciple = a.m_ObeyDebsConstViolationPrinciple; this.obeyDebsConstViolationPrinciple = a.obeyDebsConstViolationPrinciple;
} }
@Override @Override
@ -82,9 +82,9 @@ public class SelectTournament implements InterfaceSelection, java.io.Serializabl
try { try {
critSize = ((AbstractEAIndividual) population.get(0)).getFitness().length; critSize = ((AbstractEAIndividual) population.get(0)).getFitness().length;
currentCriteria = RNG.randomInt(0, critSize - 1); currentCriteria = RNG.randomInt(0, critSize - 1);
if (this.m_ObeyDebsConstViolationPrinciple) { if (this.obeyDebsConstViolationPrinciple) {
Population tournamentGroup = new Population(); Population tournamentGroup = new Population();
for (int i = 0; i < this.m_TournamentSize; i++) { for (int i = 0; i < this.tournamentSize; i++) {
tournamentGroup.add(population.get(RNG.randomInt(0, population.size() - 1))); tournamentGroup.add(population.get(RNG.randomInt(0, population.size() - 1)));
} }
SelectBestIndividuals best = new SelectBestIndividuals(); SelectBestIndividuals best = new SelectBestIndividuals();
@ -92,7 +92,7 @@ public class SelectTournament implements InterfaceSelection, java.io.Serializabl
result = (AbstractEAIndividual) best.selectFrom(tournamentGroup, 1).get(0); result = (AbstractEAIndividual) best.selectFrom(tournamentGroup, 1).get(0);
} else { } else {
result = (AbstractEAIndividual) population.get(RNG.randomInt(0, population.size() - 1)); result = (AbstractEAIndividual) population.get(RNG.randomInt(0, population.size() - 1));
for (int i = 1; i < this.m_TournamentSize; i++) { for (int i = 1; i < this.tournamentSize; i++) {
tmpIndy = (AbstractEAIndividual) population.get(RNG.randomInt(0, population.size() - 1)); tmpIndy = (AbstractEAIndividual) population.get(RNG.randomInt(0, population.size() - 1));
if (tmpIndy.getFitness(currentCriteria) < result.getFitness(currentCriteria)) { if (tmpIndy.getFitness(currentCriteria) < result.getFitness(currentCriteria)) {
result = tmpIndy; result = tmpIndy;
@ -152,11 +152,11 @@ public class SelectTournament implements InterfaceSelection, java.io.Serializabl
} }
public int getTournamentSize() { public int getTournamentSize() {
return m_TournamentSize; return tournamentSize;
} }
public void setTournamentSize(int g) { public void setTournamentSize(int g) {
m_TournamentSize = g; tournamentSize = g;
} }
/** /**
@ -167,11 +167,11 @@ public class SelectTournament implements InterfaceSelection, java.io.Serializabl
*/ */
@Override @Override
public void setObeyDebsConstViolationPrinciple(boolean b) { public void setObeyDebsConstViolationPrinciple(boolean b) {
this.m_ObeyDebsConstViolationPrinciple = b; this.obeyDebsConstViolationPrinciple = b;
} }
public boolean getObeyDebsConstViolationPrinciple() { public boolean getObeyDebsConstViolationPrinciple() {
return this.m_ObeyDebsConstViolationPrinciple; return this.obeyDebsConstViolationPrinciple;
} }
public String obeyDebsConstViolationPrincipleToolTip() { public String obeyDebsConstViolationPrincipleToolTip() {

View File

@ -6,81 +6,28 @@ import eva2.optimization.operator.selection.probability.SelProbStandard;
import eva2.optimization.population.Population; import eva2.optimization.population.Population;
import eva2.tools.math.RNG; import eva2.tools.math.RNG;
class treeElement implements java.io.Serializable {
public double separator = 0;
public int m_Index = -1;
public treeElement m_Left = null, m_Right = null;
public treeElement(double[][] d, int list, int low, int high) {
//System.out.println("Calling Low/high: "+low+"/"+high);
if (low == high) {
// end reached
//System.out.println("This: "+low);
this.m_Index = low;
} else {
if (low == high - 1) {
//System.out.println("This: "+high);
this.m_Index = high;
} else {
int midPoint = (int) ((high + low) / 2);
this.separator = d[midPoint - 1][list];
//System.out.println("Branching: "+midPoint + " : " + this.separator);
this.m_Left = new treeElement(d, list, low, midPoint);
this.m_Right = new treeElement(d, list, midPoint, high);
}
}
}
public int getIndexFor(double d) {
if (this.m_Index >= 0) {
return this.m_Index - 1;
} else {
if (d < this.separator) {
return this.m_Left.getIndexFor(d);
} else {
return this.m_Right.getIndexFor(d);
}
}
}
@Override
public String toString() {
if (this.m_Index >= 0) {
return "Ind:" + this.m_Index;
} else {
return "{" + this.m_Left.toString() + "} X<" + this.separator + " {" + this.m_Right.toString() + "}";
}
}
}
/** /**
* The RoulettWheel selection requires a selection probability calculator. * The RouletteWheel selection requires a selection probability calculator.
* In case of multiple fitness values the selection * In case of multiple fitness values the selection
* critria is selected randomly for each selection event. * criteria is selected randomly for each selection event.
* Created by IntelliJ IDEA.
* User: streiche
* Date: 18.03.2003
* Time: 16:36:11
* To change this template use Options | File Templates.
*/ */
public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Serializable { public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Serializable {
private transient treeElement[] m_TreeRoot = null; private transient TreeElement[] treeRoot = null;
private InterfaceSelectionProbability m_SelProbCalculator = new SelProbStandard(); private InterfaceSelectionProbability selectionProbability = new SelProbStandard();
private boolean m_ObeyDebsConstViolationPrinciple = true; private boolean obeyDebsConstViolationPrinciple = true;
public SelectXProbRouletteWheel() { public SelectXProbRouletteWheel() {
} }
public SelectXProbRouletteWheel(SelectXProbRouletteWheel a) { public SelectXProbRouletteWheel(SelectXProbRouletteWheel a) {
this.m_ObeyDebsConstViolationPrinciple = a.m_ObeyDebsConstViolationPrinciple; this.obeyDebsConstViolationPrinciple = a.obeyDebsConstViolationPrinciple;
this.m_SelProbCalculator = (InterfaceSelectionProbability) a.m_SelProbCalculator.clone(); this.selectionProbability = (InterfaceSelectionProbability) a.selectionProbability.clone();
} }
@Override @Override
public Object clone() { public Object clone() {
return (Object) new SelectXProbRouletteWheel(this); return new SelectXProbRouletteWheel(this);
} }
/** /**
@ -93,8 +40,8 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
*/ */
@Override @Override
public void prepareSelection(Population population) { public void prepareSelection(Population population) {
this.m_SelProbCalculator.computeSelectionProbability(population, "Fitness", this.m_ObeyDebsConstViolationPrinciple); this.selectionProbability.computeSelectionProbability(population, "Fitness", this.obeyDebsConstViolationPrinciple);
this.m_TreeRoot = this.buildSelectionTree(population); this.treeRoot = this.buildSelectionTree(population);
} }
/** /**
@ -123,8 +70,8 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
* *
* @param p The population * @param p The population
*/ */
private treeElement[] buildSelectionTree(Population p) { private TreeElement[] buildSelectionTree(Population p) {
treeElement result[]; TreeElement result[];
double[][] tmpList = new double[p.size()][]; double[][] tmpList = new double[p.size()][];
for (int i = 0; i < p.size(); i++) { for (int i = 0; i < p.size(); i++) {
@ -137,12 +84,12 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
} }
} }
result = new treeElement[tmpList[0].length]; result = new TreeElement[tmpList[0].length];
for (int i = 0; i < tmpList[0].length; i++) { for (int i = 0; i < tmpList[0].length; i++) {
//String s = "Input: {"; //String s = "Input: {";
//for (int j = 0; j < tmpList.length; j++) s += tmpList[j][i] +"; "; //for (int j = 0; j < tmpList.length; j++) s += tmpList[j][i] +"; ";
//System.out.println(s+"}"); //System.out.println(s+"}");
result[i] = new treeElement(tmpList, i, 0, tmpList.length); result[i] = new TreeElement(tmpList, i, 0, tmpList.length);
//System.out.println("Resulting Tree: " + result[i].toString()); //System.out.println("Resulting Tree: " + result[i].toString());
} }
@ -160,7 +107,7 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
critSize = ((AbstractEAIndividual) population.get(0)).getSelectionProbability().length; critSize = ((AbstractEAIndividual) population.get(0)).getSelectionProbability().length;
currentCriteria = RNG.randomInt(0, critSize - 1); currentCriteria = RNG.randomInt(0, critSize - 1);
double d = RNG.randomDouble(); double d = RNG.randomDouble();
int index = this.m_TreeRoot[currentCriteria].getIndexFor(d); int index = this.treeRoot[currentCriteria].getIndexFor(d);
//System.out.println("Looking for: " + d + " found " +index); //System.out.println("Looking for: " + d + " found " +index);
return ((AbstractEAIndividual) (population.get(index))); return ((AbstractEAIndividual) (population.get(index)));
} }
@ -234,11 +181,11 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
* @param normation * @param normation
*/ */
public void setSelProbCalculator(InterfaceSelectionProbability normation) { public void setSelProbCalculator(InterfaceSelectionProbability normation) {
this.m_SelProbCalculator = normation; this.selectionProbability = normation;
} }
public InterfaceSelectionProbability getSelProbCalculator() { public InterfaceSelectionProbability getSelProbCalculator() {
return this.m_SelProbCalculator; return this.selectionProbability;
} }
public String selProbCalculatorTipText() { public String selProbCalculatorTipText() {
@ -253,14 +200,62 @@ public class SelectXProbRouletteWheel implements InterfaceSelection, java.io.Ser
*/ */
@Override @Override
public void setObeyDebsConstViolationPrinciple(boolean b) { public void setObeyDebsConstViolationPrinciple(boolean b) {
this.m_ObeyDebsConstViolationPrinciple = b; this.obeyDebsConstViolationPrinciple = b;
} }
public boolean getObeyDebsConstViolationPrinciple() { public boolean getObeyDebsConstViolationPrinciple() {
return this.m_ObeyDebsConstViolationPrinciple; return this.obeyDebsConstViolationPrinciple;
} }
public String obeyDebsConstViolationPrincipleToolTip() { public String obeyDebsConstViolationPrincipleToolTip() {
return "Toggle the use of Deb's coonstraint violation principle."; return "Toggle the use of Deb's coonstraint violation principle.";
} }
} }
class TreeElement implements java.io.Serializable {
public double separator = 0;
public int m_Index = -1;
public TreeElement m_Left = null, m_Right = null;
public TreeElement(double[][] d, int list, int low, int high) {
//System.out.println("Calling Low/high: "+low+"/"+high);
if (low == high) {
// end reached
//System.out.println("This: "+low);
this.m_Index = low;
} else {
if (low == high - 1) {
//System.out.println("This: "+high);
this.m_Index = high;
} else {
int midPoint = (int) ((high + low) / 2);
this.separator = d[midPoint - 1][list];
//System.out.println("Branching: "+midPoint + " : " + this.separator);
this.m_Left = new TreeElement(d, list, low, midPoint);
this.m_Right = new TreeElement(d, list, midPoint, high);
}
}
}
public int getIndexFor(double d) {
if (this.m_Index >= 0) {
return this.m_Index - 1;
} else {
if (d < this.separator) {
return this.m_Left.getIndexFor(d);
} else {
return this.m_Right.getIndexFor(d);
}
}
}
@Override
public String toString() {
if (this.m_Index >= 0) {
return "Ind:" + this.m_Index;
} else {
return "{" + this.m_Left.toString() + "} X<" + this.separator + " {" + this.m_Right.toString() + "}";
}
}
}

View File

@ -12,6 +12,7 @@ import eva2.optimization.population.SolutionSet;
import eva2.optimization.problems.B1Problem; import eva2.optimization.problems.B1Problem;
import eva2.optimization.problems.InterfaceOptimizationProblem; import eva2.optimization.problems.InterfaceOptimizationProblem;
import eva2.util.annotation.Description; import eva2.util.annotation.Description;
import eva2.util.annotation.Parameter;
/** /**
* Evolution strategies by Rechenberg and Schwefel, but please remember that * Evolution strategies by Rechenberg and Schwefel, but please remember that
@ -26,8 +27,13 @@ import eva2.util.annotation.Description;
@Description(value = "This is an Evolution Strategy. Note that the population size depends on mu (number of parents) and lambda (number of offspring)") @Description(value = "This is an Evolution Strategy. Note that the population size depends on mu (number of parents) and lambda (number of offspring)")
public class EvolutionStrategies implements InterfaceOptimizer, java.io.Serializable { public class EvolutionStrategies implements InterfaceOptimizer, java.io.Serializable {
@Parameter(description = "Mu", name = "mu")
protected int mu = 5; protected int mu = 5;
@Parameter(description = "Lambda", name = "lambda")
protected int lambda = 20; protected int lambda = 20;
@Parameter(description = "Determines whether the +-Strategy should be used.", name = "usePlus")
protected boolean usePlusStrategy = false; protected boolean usePlusStrategy = false;
protected Population population = new Population(); protected Population population = new Population();
protected InterfaceOptimizationProblem optimizationProblem = new B1Problem(); protected InterfaceOptimizationProblem optimizationProblem = new B1Problem();