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 2021/05/29 00:07:40 UTC
[commons-math] branch modularized_master updated: Removed
dependency on "UncorrelatedRandomVectorGenerator" (unit test).
This is an automated email from the ASF dual-hosted git repository.
erans pushed a commit to branch modularized_master
in repository https://gitbox.apache.org/repos/asf/commons-math.git
The following commit(s) were added to refs/heads/modularized_master by this push:
new 8441d3f Removed dependency on "UncorrelatedRandomVectorGenerator" (unit test).
8441d3f is described below
commit 8441d3fd6575c57dcc5bd3fed65c1ff4770b8dea
Author: Gilles Sadowski <gi...@gmail.com>
AuthorDate: Sat May 29 01:45:27 2021 +0200
Removed dependency on "UncorrelatedRandomVectorGenerator" (unit test).
---
.../MultiStartMultivariateOptimizerTest.java | 47 +++++++++++++++++-----
1 file changed, 36 insertions(+), 11 deletions(-)
diff --git a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java
index 1c45dd8..96b228e 100644
--- a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java
+++ b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java
@@ -28,9 +28,9 @@ import org.apache.commons.math4.legacy.optim.nonlinear.scalar.noderiv.NelderMead
import org.apache.commons.math4.legacy.optim.nonlinear.scalar.noderiv.SimplexOptimizer;
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
-import org.apache.commons.math4.legacy.random.GaussianRandomGenerator;
+import org.apache.commons.rng.sampling.distribution.GaussianSampler;
+import org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler;
import org.apache.commons.math4.legacy.random.RandomVectorGenerator;
-import org.apache.commons.math4.legacy.random.UncorrelatedRandomVectorGenerator;
import org.junit.Assert;
import org.junit.Test;
@@ -49,11 +49,9 @@ public class MultiStartMultivariateOptimizerTest {
GradientMultivariateOptimizer underlying
= new NonLinearConjugateGradientOptimizer(NonLinearConjugateGradientOptimizer.Formula.POLAK_RIBIERE,
new SimpleValueChecker(1e-10, 1e-10));
- UniformRandomProvider g = RandomSource.create(RandomSource.MT_64);
- RandomVectorGenerator generator
- = new UncorrelatedRandomVectorGenerator(new double[] { 50, 50 },
- new double[] { 10, 10 },
- new GaussianRandomGenerator(g));
+ final RandomVectorGenerator generator = gaussianRandom(new double[] { 50, 50 },
+ new double[] { 10, 10 },
+ RandomSource.create(RandomSource.MT_64));
int nbStarts = 10;
MultiStartMultivariateOptimizer optimizer
= new MultiStartMultivariateOptimizer(underlying, nbStarts, generator);
@@ -90,10 +88,9 @@ public class MultiStartMultivariateOptimizerTest {
{ 0.9, 1.2 } ,
{ 3.5, -2.3 }
});
- // The test is extremely sensitive to the seed.
- UniformRandomProvider g = RandomSource.create(RandomSource.MT_64);
- RandomVectorGenerator generator
- = new UncorrelatedRandomVectorGenerator(2, new GaussianRandomGenerator(g));
+ final RandomVectorGenerator generator = gaussianRandom(new double[] { 0, 0 },
+ new double[] { 1, 1 },
+ RandomSource.create(RandomSource.MT_64));
int nbStarts = 10;
MultiStartMultivariateOptimizer optimizer
= new MultiStartMultivariateOptimizer(underlying, nbStarts, generator);
@@ -131,4 +128,32 @@ public class MultiStartMultivariateOptimizerTest {
return count;
}
}
+
+ /**
+ * @param mean Means.
+ * @param stdev Standard deviations.
+ * @param rng Underlying RNG.
+ * @return a random array generator where each element is a Gaussian
+ * sampling with the given mean and standard deviation.
+ */
+ private RandomVectorGenerator gaussianRandom(final double[] mean,
+ final double[] stdev,
+ final UniformRandomProvider rng) {
+ final ZigguratNormalizedGaussianSampler normalized = new ZigguratNormalizedGaussianSampler(rng);
+ final GaussianSampler[] samplers = new GaussianSampler[mean.length];
+ for (int i = 0; i < mean.length; i++) {
+ samplers[i] = new GaussianSampler(normalized, mean[i], stdev[i]);
+ }
+
+ return new RandomVectorGenerator() {
+ @Override
+ public double[] nextVector() {
+ final double[] s = new double[mean.length];
+ for (int i = 0; i < mean.length; i++) {
+ s[i] = samplers[i].sample();
+ }
+ return s;
+ }
+ };
+ }
}