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),