You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2011/11/07 15:12:45 UTC

svn commit: r1198741 - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java site/xdoc/changes.xml test/java/org/apache/commons/math/optimization/direct/CMAESOptimizerTest.java

Author: luc
Date: Mon Nov  7 14:12:45 2011
New Revision: 1198741

URL: http://svn.apache.org/viewvc?rev=1198741&view=rev
Log:
Make CMA-ES input sigma is now consistent with boundaries units.

JIRA: MATH-702

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java
    commons/proper/math/trunk/src/site/xdoc/changes.xml
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/CMAESOptimizerTest.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java?rev=1198741&r1=1198740&r2=1198741&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java Mon Nov  7 14:12:45 2011
@@ -515,8 +515,8 @@ public class CMAESOptimizer
                     throw new NotPositiveException(inputSigma[i]);
                 }
                 if (boundaries != null) {
-                    if (inputSigma[i] > 1.0) {
-                        throw new OutOfRangeException(inputSigma[i], 0, 1.0);
+                    if (inputSigma[i] > boundaries[1][i] - boundaries[0][i]) {
+                        throw new OutOfRangeException(inputSigma[i], 0, boundaries[1][i] - boundaries[0][i]);
                     }
                 }
             }
@@ -535,7 +535,8 @@ public class CMAESOptimizer
         // initialize sigma
         double[][] sigmaArray = new double[guess.length][1];
         for (int i = 0; i < guess.length; i++) {
-            sigmaArray[i][0] = inputSigma != null ? inputSigma[i] : 0.3;
+            final double range =  (boundaries == null) ? 1.0 : boundaries[1][i] - boundaries[0][i];
+            sigmaArray[i][0]   = ((inputSigma == null) ? 0.3 : inputSigma[i]) / range;
         }
         RealMatrix insigma = new Array2DRowRealMatrix(sigmaArray, false);
         sigma = max(insigma); // overall standard deviation

Modified: commons/proper/math/trunk/src/site/xdoc/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/site/xdoc/changes.xml?rev=1198741&r1=1198740&r2=1198741&view=diff
==============================================================================
--- commons/proper/math/trunk/src/site/xdoc/changes.xml (original)
+++ commons/proper/math/trunk/src/site/xdoc/changes.xml Mon Nov  7 14:12:45 2011
@@ -52,6 +52,9 @@ The <action> type attribute can be add,u
     If the output is not quite correct, check for invisible trailing spaces!
      -->
     <release version="3.0" date="TBD" description="TBD">
+      <action dev="luc" type="fix" issue="MATH-702" >
+        CMA-ES optimizer input sigma is now consistent with boundaries range units.
+      </action>
       <action dev="psteitz" type="add" issue="MATH-462" due-to="Pavel Ryzhof">
         Added stable random generator based on Chambers-Mallows-Stuck method.
       </action>

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/CMAESOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/CMAESOptimizerTest.java?rev=1198741&r1=1198740&r2=1198741&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/CMAESOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/CMAESOptimizerTest.java Mon Nov  7 14:12:45 2011
@@ -96,7 +96,7 @@ public class CMAESOptimizerTest {
     public void testInputSigmaOutOfRange() {
         double[] startPoint = point(DIM,0.5);
         double[] insigma = point(DIM, 1.1);
-        double[][] boundaries = boundaries(DIM,-1,2);
+        double[][] boundaries = boundaries(DIM,-0.5,0.5);
         RealPointValuePair expected =
             new RealPointValuePair(point(DIM,1.0),0.0);
         doTest(new Rosen(), startPoint, insigma, boundaries,