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 <[email protected]> Authored: Wed May 11 14:06:15 2016 +0200 Committer: Gilles <[email protected]> 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),
