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 2016/05/17 15:49:41 UTC

[08/25] [math] MATH-1335

MATH-1335

Use new RNG API.


Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/11409e62
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/11409e62
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/11409e62

Branch: refs/heads/develop
Commit: 11409e628b0461be3c268f81642ce36bc4b0bf84
Parents: 0c9af5f
Author: Gilles <er...@apache.org>
Authored: Wed May 11 14:06:15 2016 +0200
Committer: Gilles <er...@apache.org>
Committed: Tue May 17 15:30:23 2016 +0200

----------------------------------------------------------------------
 .../nonlinear/scalar/noderiv/CMAESOptimizer.java  | 18 ++++++++++--------
 .../scalar/noderiv/CMAESOptimizerTest.java        |  8 ++++----
 2 files changed, 14 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-math/blob/11409e62/src/main/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java b/src/main/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
index 727fd18..8fe9afe 100644
--- a/src/main/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
+++ b/src/main/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
@@ -35,7 +35,9 @@ import org.apache.commons.math4.optim.OptimizationData;
 import org.apache.commons.math4.optim.PointValuePair;
 import org.apache.commons.math4.optim.nonlinear.scalar.GoalType;
 import org.apache.commons.math4.optim.nonlinear.scalar.MultivariateOptimizer;
-import org.apache.commons.math4.random.RandomGenerator;
+import org.apache.commons.math4.rng.UniformRandomProvider;
+import org.apache.commons.math4.distribution.RealDistribution;
+import org.apache.commons.math4.distribution.NormalDistribution;
 import org.apache.commons.math4.util.FastMath;
 import org.apache.commons.math4.util.MathArrays;
 
@@ -195,8 +197,8 @@ public class CMAESOptimizer
     /** Size of history queue of best values. */
     private int historySize;
 
-    /** Random generator. */
-    private final RandomGenerator random;
+    /** Gaussian sampler. */
+    private final RealDistribution.Sampler random;
 
     /** History of sigma values. */
     private final List<Double> statisticsSigmaHistory = new ArrayList<Double>();
@@ -216,7 +218,7 @@ public class CMAESOptimizer
      * remains diagonal.
      * @param checkFeasableCount Determines how often new random objective variables are
      * generated in case they are out of bounds.
-     * @param random Random generator.
+     * @param rng Random generator.
      * @param generateStatistics Whether statistic data is collected.
      * @param checker Convergence checker.
      *
@@ -227,7 +229,7 @@ public class CMAESOptimizer
                           boolean isActiveCMA,
                           int diagonalOnly,
                           int checkFeasableCount,
-                          RandomGenerator random,
+                          UniformRandomProvider rng,
                           boolean generateStatistics,
                           ConvergenceChecker<PointValuePair> checker) {
         super(checker);
@@ -236,7 +238,7 @@ public class CMAESOptimizer
         this.isActiveCMA = isActiveCMA;
         this.diagonalOnly = diagonalOnly;
         this.checkFeasableCount = checkFeasableCount;
-        this.random = random;
+        this.random = new NormalDistribution().createSampler(rng);
         this.generateStatistics = generateStatistics;
     }
 
@@ -1335,7 +1337,7 @@ public class CMAESOptimizer
     private double[] randn(int size) {
         final double[] randn = new double[size];
         for (int i = 0; i < size; i++) {
-            randn[i] = random.nextGaussian();
+            randn[i] = random.sample();
         }
         return randn;
     }
@@ -1349,7 +1351,7 @@ public class CMAESOptimizer
         final double[][] d = new double[size][popSize];
         for (int r = 0; r < size; r++) {
             for (int c = 0; c < popSize; c++) {
-                d[r][c] = random.nextGaussian();
+                d[r][c] = random.sample();
             }
         }
         return new Array2DRowRealMatrix(d, false);

http://git-wip-us.apache.org/repos/asf/commons-math/blob/11409e62/src/test/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java b/src/test/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java
index 51617d6..50cf6dc 100644
--- a/src/test/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java
+++ b/src/test/java/org/apache/commons/math4/optim/nonlinear/scalar/noderiv/CMAESOptimizerTest.java
@@ -34,7 +34,7 @@ import org.apache.commons.math4.optim.SimpleBounds;
 import org.apache.commons.math4.optim.nonlinear.scalar.GoalType;
 import org.apache.commons.math4.optim.nonlinear.scalar.ObjectiveFunction;
 import org.apache.commons.math4.optim.nonlinear.scalar.noderiv.CMAESOptimizer;
-import org.apache.commons.math4.random.MersenneTwister;
+import org.apache.commons.math4.rng.RandomSource;
 import org.apache.commons.math4.util.FastMath;
 import org.junit.Assert;
 import org.junit.Test;
@@ -368,7 +368,7 @@ public class CMAESOptimizerTest {
     public void testMath864() {
         final CMAESOptimizer optimizer
             = new CMAESOptimizer(30000, 0, true, 10,
-                                 0, new MersenneTwister(), false, null);
+                                 0, RandomSource.create(RandomSource.MT_64), false, null);
         final MultivariateFunction fitnessFunction = new MultivariateFunction() {
                 public double value(double[] parameters) {
                     final double target = 1;
@@ -399,7 +399,7 @@ public class CMAESOptimizerTest {
     public void testFitAccuracyDependsOnBoundary() {
         final CMAESOptimizer optimizer
             = new CMAESOptimizer(30000, 0, true, 10,
-                                 0, new MersenneTwister(), false, null);
+                                 0, RandomSource.create(RandomSource.MT_64), false, null);
         final MultivariateFunction fitnessFunction = new MultivariateFunction() {
                 public double value(double[] parameters) {
                     final double target = 11.1;
@@ -486,7 +486,7 @@ public class CMAESOptimizerTest {
         int dim = startPoint.length;
         // test diagonalOnly = 0 - slow but normally fewer feval#
         CMAESOptimizer optim = new CMAESOptimizer(30000, stopValue, isActive, diagonalOnly,
-                                                  0, new MersenneTwister(), false, null);
+                                                  0, RandomSource.create(RandomSource.MT_64), false, null);
         PointValuePair result = boundaries == null ?
             optim.optimize(new MaxEval(maxEvaluations),
                            new ObjectiveFunction(func),