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 <gillese...@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;
+            }
+        };
+    }
 }

Reply via email to