diff --git a/src/eva2/server/go/problems/AbstractMultiModalProblemKnown.java b/src/eva2/server/go/problems/AbstractMultiModalProblemKnown.java index 9c253934..24029f39 100644 --- a/src/eva2/server/go/problems/AbstractMultiModalProblemKnown.java +++ b/src/eva2/server/go/problems/AbstractMultiModalProblemKnown.java @@ -114,7 +114,8 @@ public abstract class AbstractMultiModalProblemKnown extends AbstractProblemDoub } /** - * This method returns the unnormalized function value for an maximization problem + * This method returns the unnormalized (and unrotated!) function value for an maximization problem. + * * @param x The n-dimensional input vector * @return The m-dimensional output vector. */ @@ -196,6 +197,10 @@ public abstract class AbstractMultiModalProblemKnown extends AbstractProblemDoub m_GlobalOpt = tmp; } } + if (isDoRotation()) { + point = inverseRotateMaybe(point); // theres an inverse rotation required + tmpIndy.SetDoubleGenotype(point); + } this.m_ListOfOptima.add(tmpIndy); } diff --git a/src/eva2/server/go/problems/AbstractProblemDouble.java b/src/eva2/server/go/problems/AbstractProblemDouble.java index cbe8d3da..4189c52c 100644 --- a/src/eva2/server/go/problems/AbstractProblemDouble.java +++ b/src/eva2/server/go/problems/AbstractProblemDouble.java @@ -132,6 +132,13 @@ public abstract class AbstractProblemDouble extends AbstractOptimizationProblem return x; } + protected double[] inverseRotateMaybe(double[] x) { + if (isDoRotation()) { + if (rotation==null) initProblem(); + x = Mathematics.rotate(x, rotation.inverse()); + } + return x; + } /** * Add all constraint violations to the individual. Expect that the fitness has already been set. *