diff --git a/src/eva2/server/go/operators/mutation/MutateESCovarianceMatrixAdaptionPlus.java b/src/eva2/server/go/operators/mutation/MutateESCovarianceMatrixAdaptionPlus.java index 4a4c2abc..e8d126ce 100644 --- a/src/eva2/server/go/operators/mutation/MutateESCovarianceMatrixAdaptionPlus.java +++ b/src/eva2/server/go/operators/mutation/MutateESCovarianceMatrixAdaptionPlus.java @@ -6,190 +6,225 @@ import eva2.server.go.populations.Population; import eva2.server.go.problems.InterfaceOptimizationProblem; import eva2.tools.math.Jama.Matrix; -public class MutateESCovarianceMatrixAdaptionPlus extends MutateESCovarianceMatrixAdaption implements InterfaceMutationGenerational -{ +public class MutateESCovarianceMatrixAdaptionPlus extends + MutateESCovarianceMatrixAdaption implements + InterfaceMutationGenerational { protected double m_psuccess; protected double m_cp; - protected double m_psuccesstarget=0.44; + protected double m_psuccesstarget = 0.44; protected double m_stepd; protected double m_pthresh; - protected int m_lambda=1; + protected int m_lambda = 1; - public MutateESCovarianceMatrixAdaptionPlus() { super(); } - - - public MutateESCovarianceMatrixAdaptionPlus(MutateESCovarianceMatrixAdaptionPlus mutator) { + + public MutateESCovarianceMatrixAdaptionPlus( + MutateESCovarianceMatrixAdaptionPlus mutator) { super(mutator); - m_psuccess=mutator.m_psuccess; - m_cp=mutator.m_cp; - m_psuccesstarget=mutator.m_psuccesstarget; - m_lambda=mutator.m_lambda; - m_pthresh=mutator.m_pthresh; - m_stepd=mutator.m_stepd; + m_psuccess = mutator.m_psuccess; + m_cp = mutator.m_cp; + m_psuccesstarget = mutator.m_psuccesstarget; + m_lambda = mutator.m_lambda; + m_pthresh = mutator.m_pthresh; + m_stepd = mutator.m_stepd; } - /** This method will enable you to clone a given mutation operator + /** + * This method will enable you to clone a given mutation operator + * * @return The clone */ - public Object clone() { + public Object clone() { return new MutateESCovarianceMatrixAdaptionPlus(this); - } + } + /** + * This method allows you to init the mutation operator + * + * @param individual + * The individual that will be mutated. + * @param opt + * The optimization problem. + */ + public void init(AbstractEAIndividual individual, + InterfaceOptimizationProblem opt) { - /** This method allows you to init the mutation operator - * @param individual The individual that will be mutated. - * @param opt The optimization problem. - */ - public void init(AbstractEAIndividual individual, InterfaceOptimizationProblem opt) { - - if (!(individual instanceof InterfaceESIndividual)) return; - super.init(individual,opt); - m_psuccesstarget=1.0/(5+Math.sqrt(m_lambda)/2); - m_psuccess=m_psuccesstarget; - m_stepd=1.0+m_D/(2.0*m_lambda); - m_cp=m_psuccesstarget*m_lambda/(2+m_psuccesstarget*m_lambda); - m_c=2.0/(2.0+m_D); - this.cov = 2.0/(6.0+Math.pow(m_D, 2)); //ATTN: differs from the standard CMA-ES - m_pthresh=0.44; + if (!(individual instanceof InterfaceESIndividual)) + return; + super.init(individual, opt); + m_psuccesstarget = 1.0 / (5 + Math.sqrt(m_lambda) / 2); + m_psuccess = m_psuccesstarget; + m_stepd = 1.0 + m_D / (2.0 * m_lambda); + m_cp = m_psuccesstarget * m_lambda / (2 + m_psuccesstarget * m_lambda); + m_c = 2.0 / (2.0 + m_D); + this.cov = 2.0 / (6.0 + Math.pow(m_D, 2)); // ATTN: differs from the + // standard CMA-ES + m_pthresh = 0.44; - } + } + protected void adaptStrategyGen(AbstractEAIndividual child, + AbstractEAIndividual parent) { + if (child.getFitness(0) <= parent.getFitness(0)) { + // updatecov + updateCovariance(child, parent); + // updateCovariance(); + } + } - protected void adaptStrategyGen(AbstractEAIndividual child,AbstractEAIndividual parent) { - if(child.getFitness(0)<=parent.getFitness(0)){ - //updatecov - updateCovariance(child, parent); - //updateCovariance(); - } - - } - /** * @param parent * @param child */ - public void updateCovariance(AbstractEAIndividual child,AbstractEAIndividual parent) { - double[] step=new double[m_D]; - for(int i=0;i SuccessCounterMap=new HashMap(); + HashMap SuccessCounterMap = new HashMap(); - //Eltern markieren und für die Zählung vorbereiten - for(int j=0;jparentSMeasure ) ){ - SuccessCounterMap.get(parent.getIndyID()).value++; + // Vergleichen und den Successcounter hochz�hlen wenn wir besser als + // unser Elter sind + for (int j = 0; j < m_Population.size(); j++) { + AbstractEAIndividual parent = (AbstractEAIndividual) m_Population + .getEAIndividual(j).getData("Parent"); + if (m_Population.getEAIndividual(j) != parent) { // Eltern nicht mit + // sich selber + // vergleichen + int parentParetoLevel = ((Integer) parent + .getData("ParetoLevel")).intValue(); + double parentSMeasure = ((Double) parent.getData("HyperCube")) + .doubleValue(); + int childParetoLevel = ((Integer) m_Population.getEAIndividual( + j).getData("ParetoLevel")).intValue(); + double childSMeasure = ((Double) m_Population + .getEAIndividual(j).getData("HyperCube")).doubleValue(); + if (childParetoLevel < parentParetoLevel + || ((childParetoLevel == parentParetoLevel) && childSMeasure > parentSMeasure)) { + SuccessCounterMap.get(parent.getIndyID()).value++; } - }else{ //Debug + } else { // Debug - SuccessCounterMap.get(parent.getIndyID()).seen=true; + SuccessCounterMap.get(parent.getIndyID()).seen = true; } } - - //Selection + // Selection m_Population.clear(); - for(int i=0;i0&&m_Population.size() 0 && m_Population.size() < m_lambdamo) { + AbstractEAIndividual indy = store[i].getEAIndividual(0); + double bestMeasure = ((Double) indy.getData("HyperCube")) + .doubleValue(); // TODO mal noch effizient machen + // (sortieren und die besten n + // herausholen) + for (int j = 1; j < store[i].size(); j++) { + if (bestMeasure < ((Double) store[i].getEAIndividual(j) + .getData("HyperCube")).doubleValue()) { + bestMeasure = ((Double) store[i].getEAIndividual(j) + .getData("HyperCube")).doubleValue(); + indy = store[i].getEAIndividual(j); } } m_Population.add(indy); @@ -236,51 +252,67 @@ public class MultiObjectiveCMAES implements InterfaceOptimizer, Serializable } - //Strategieparemeter updaten - for(int j=0;j