You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2012/09/29 18:58:18 UTC

svn commit: r1391840 - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java test/java/org/apache/commons/math3/optimization/direct/CMAESOptimizerTest.java

Author: erans
Date: Sat Sep 29 16:58:18 2012
New Revision: 1391840

URL: http://svn.apache.org/viewvc?rev=1391840&view=rev
Log:
MATH-867
Modified "encode" and "decode" methods. Unit test "testFitAccuracyDependsOnBoundary"
now passes and is thus enabled. Unit test "testConstrainedRosen" had to be modified
in order to not fail with the new code (starting point is set closer to the solution).

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/direct/CMAESOptimizerTest.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java?rev=1391840&r1=1391839&r2=1391840&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java Sat Sep 29 16:58:18 2012
@@ -585,8 +585,8 @@ public class CMAESOptimizer
         // initialize sigma
         double[][] sigmaArray = new double[guess.length][1];
         for (int i = 0; i < guess.length; i++) {
-            final double range =  (boundaries == null) ? 1.0 : boundaries[1][i] - boundaries[0][i];
-            sigmaArray[i][0]   = ((inputSigma == null) ? 0.3 : inputSigma[i]) / range;
+            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
@@ -929,7 +929,7 @@ public class CMAESOptimizer
             double[] res = new double[x.length];
             for (int i = 0; i < x.length; i++) {
                 double diff = boundaries[1][i] - boundaries[0][i];
-                res[i] = (x[i] - boundaries[0][i]) / diff;
+                res[i] = x[i] / diff;
             }
             return res;
         }
@@ -955,7 +955,7 @@ public class CMAESOptimizer
             double[] res = new double[x.length];
             for (int i = 0; i < x.length; i++) {
                 double diff = boundaries[1][i] - boundaries[0][i];
-                res[i] = diff * x[i] + boundaries[0][i];
+                res[i] = diff * x[i];
             }
             return res;
         }
@@ -986,11 +986,15 @@ public class CMAESOptimizer
             if (boundaries == null) {
                 return true;
             }
+
+            final double[] bLoEnc = encode(boundaries[0]);
+            final double[] bHiEnc = encode(boundaries[1]);
+
             for (int i = 0; i < x.length; i++) {
-                if (x[i] < 0) {
+                if (x[i] < bLoEnc[i]) {
                     return false;
                 }
-                if (x[i] > 1.0) {
+                if (x[i] > bHiEnc[i]) {
                     return false;
                 }
             }

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/direct/CMAESOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/direct/CMAESOptimizerTest.java?rev=1391840&r1=1391839&r2=1391840&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/direct/CMAESOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optimization/direct/CMAESOptimizerTest.java Sat Sep 29 16:58:18 2012
@@ -350,8 +350,8 @@ public class CMAESOptimizerTest {
 
     @Test
     public void testConstrainedRosen() {
-        double[] startPoint = point(DIM, 0.1);
-        double[] insigma = point(DIM, 1);
+        double[] startPoint = point(DIM, 0.7);
+        double[] insigma = point(DIM, 0.1);
         double[][] boundaries = boundaries(DIM, -1, 2);
         PointValuePair expected =
             new PointValuePair(point(DIM,1.0),0.0);
@@ -427,7 +427,7 @@ public class CMAESOptimizerTest {
     /**
      * Cf. MATH-867
      */
-    @Ignore@Test
+    @Test
     public void testFitAccuracyDependsOnBoundary() {
         final CMAESOptimizer optimizer = new CMAESOptimizer();
         final MultivariateFunction fitnessFunction = new MultivariateFunction() {
@@ -439,7 +439,7 @@ public class CMAESOptimizerTest {
             };
 
         final double[] start = { 1 };
-
+ 
         // No bounds.
         PointValuePair result = optimizer.optimize(100000, fitnessFunction, GoalType.MINIMIZE,
                                                    start);