This is an automated email from the ASF dual-hosted git repository.

erans pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-math.git


The following commit(s) were added to refs/heads/master by this push:
     new df927f0  MATH-1552: Fiddling with setup and expectations (unit tests).
df927f0 is described below

commit df927f0b674d8c6cd5f535c2995777a4dd7be101
Author: Gilles Sadowski <gillese...@gmail.com>
AuthorDate: Sat Jun 5 23:48:27 2021 +0200

    MATH-1552: Fiddling with setup and expectations (unit tests).
---
 .../nonlinear/scalar/noderiv/OptimTestUtils.java   | 56 ++++++++++++++--------
 .../SimplexOptimizerMultiDirectionalTest.java      | 28 +++++------
 .../noderiv/SimplexOptimizerNelderMeadTest.java    | 56 +++++++++++-----------
 3 files changed, 75 insertions(+), 65 deletions(-)

diff --git 
a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/OptimTestUtils.java
 
b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/OptimTestUtils.java
index 5c3cb7b..ae81da5 100644
--- 
a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/OptimTestUtils.java
+++ 
b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/OptimTestUtils.java
@@ -20,6 +20,7 @@ import java.util.Arrays;
 import org.apache.commons.rng.UniformRandomProvider;
 import org.apache.commons.rng.simple.RandomSource;
 import 
org.apache.commons.rng.sampling.distribution.MarsagliaNormalizedGaussianSampler;
+import org.apache.commons.rng.sampling.distribution.ContinuousUniformSampler;
 import org.apache.commons.math4.legacy.analysis.MultivariateFunction;
 import org.apache.commons.math4.legacy.core.jdkmath.AccurateMath;
 
@@ -213,29 +214,24 @@ class OptimTestUtils {
     }
  
     static class Ackley implements MultivariateFunction {
-        private double axisratio;
-         
-        Ackley(double axra) {
-            axisratio = axra;
-        }
-         
-        public Ackley() {
-            this(1);
-        }
-         
+        private static final double A = 20;
+        private static final double B = 0.2;
+        private static final double C = 2 * Math.PI;
+
         @Override
         public double value(double[] x) {
-            double f = 0;
-            double res2 = 0;
-            double fac = 0;
-            for (int i = 0; i < x.length; ++i) {
-                fac = AccurateMath.pow(axisratio, (i - 1.) / (x.length - 1.));
-                f += fac * fac * x[i] * x[i];
-                res2 += AccurateMath.cos(2. * AccurateMath.PI * fac * x[i]);
+            final int dim = x.length;
+            double acc1 = 0;
+            double acc2 = 0;
+            for (int i = 0; i < dim; i++) {
+                final double v = x[i];
+                acc1 += v * v;
+                acc2 += Math.cos(C * v);
             }
-            f = (20. - 20. * AccurateMath.exp(-0.2 * AccurateMath.sqrt(f / 
x.length))
-                 + AccurateMath.exp(1.) - AccurateMath.exp(res2 / x.length));
-            return f;
+            acc1 = -B * Math.sqrt(acc1 / dim);
+            acc2 /= dim;
+
+            return -A * Math.exp(acc1) - Math.exp(acc2) + A + Math.E;
         }
     }
 
@@ -334,11 +330,29 @@ class OptimTestUtils {
     }
 
     static double[] point(int n, double value) {
-        double[] ds = new double[n];
+        final double[] ds = new double[n];
         Arrays.fill(ds, value);
         return ds;
     }
 
+    /**
+     * @param n Dimension.
+     * @param value Value.
+     * @param jitter Random noise to add to {@code value}.
+     */
+    static double[] point(int n,
+                          double value,
+                          double jitter) {
+        final ContinuousUniformSampler s = new ContinuousUniformSampler(rng(),
+                                                                        
-jitter,
+                                                                        
jitter);
+        final double[] ds = new double[n];
+        for (int i = 0; i < n; i++) {
+            ds[i] = value + s.sample();
+        }
+        return ds;
+    }
+
     /** Creates a RNG instance. */
     static UniformRandomProvider rng() {
         return RandomSource.create(RandomSource.MWC_256);
diff --git 
a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/SimplexOptimizerMultiDirectionalTest.java
 
b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/SimplexOptimizerMultiDirectionalTest.java
index 3b03942..87505d6 100644
--- 
a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/SimplexOptimizerMultiDirectionalTest.java
+++ 
b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/SimplexOptimizerMultiDirectionalTest.java
@@ -272,7 +272,7 @@ public class SimplexOptimizerMultiDirectionalTest {
         doTest(new OptimTestUtils.DiffPow(),
                OptimTestUtils.point(DIM, 1.0),
                GoalType.MINIMIZE,
-               614,
+               1000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
                1e-14);
     }
@@ -280,33 +280,31 @@ public class SimplexOptimizerMultiDirectionalTest {
     @Test
     public void testSsDiffPow() {
         doTest(new OptimTestUtils.SsDiffPow(),
-               OptimTestUtils.point(DIM / 2, 1.0),
+               OptimTestUtils.point(DIM / 2, 1.0, 1e-1),
                GoalType.MINIMIZE,
-               656,
+               5000,
                new PointValuePair(OptimTestUtils.point(DIM / 2, 0.0), 0.0),
-               1e-15);
+               1e-3);
     }
 
-    @Ignore
     @Test
     public void testAckley() {
         doTest(new OptimTestUtils.Ackley(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 1e-1),
                GoalType.MINIMIZE,
-               587,
-               new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
-               0);
+               7500,
+               new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0d),
+               1e-11);
     }
 
-    @Ignore
     @Test
     public void testRastrigin() {
         doTest(new OptimTestUtils.Rastrigin(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 1e-1),
                GoalType.MINIMIZE,
-               535,
-               new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
-               0);
+               5000,
+               new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0d),
+               1e-6);
     }
 
     /**
@@ -329,7 +327,7 @@ public class SimplexOptimizerMultiDirectionalTest {
                                                      new 
ObjectiveFunction(func),
                                                      goal,
                                                      new 
InitialGuess(startPoint),
-                                                     new 
MultiDirectionalSimplex(dim, 0.1));
+                                                     new 
MultiDirectionalSimplex(dim, 1));
         final double dist = MathArrays.distance(expected.getPoint(),
                                                 result.getPoint());
         Assert.assertEquals(0d, dist, tol);
diff --git 
a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/SimplexOptimizerNelderMeadTest.java
 
b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/SimplexOptimizerNelderMeadTest.java
index 0842296..42d3d99 100644
--- 
a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/SimplexOptimizerNelderMeadTest.java
+++ 
b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/SimplexOptimizerNelderMeadTest.java
@@ -270,7 +270,7 @@ public class SimplexOptimizerNelderMeadTest {
         doTest(new OptimTestUtils.Rosen(),
                OptimTestUtils.point(DIM, 0.1),
                GoalType.MINIMIZE,
-               11975,
+               9078,
                new PointValuePair(OptimTestUtils.point(DIM, 1.0), 0.0),
                1e-6);
     }
@@ -279,18 +279,18 @@ public class SimplexOptimizerNelderMeadTest {
     @Test
     public void testEllipse() {
         doTest(new OptimTestUtils.Elli(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 2e-1),
                GoalType.MINIMIZE,
-               7184,
+               12000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
-               1e-14);
+               1e-6);
      }
 
     @Ignore
     @Test
     public void testElliRotated() {
         doTest(new OptimTestUtils.ElliRotated(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 1e-1),
                GoalType.MINIMIZE,
                7467,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
@@ -300,9 +300,9 @@ public class SimplexOptimizerNelderMeadTest {
     @Test
     public void testCigar() {
         doTest(new OptimTestUtils.Cigar(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 2e-1),
                GoalType.MINIMIZE,
-               9160,
+               7000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
                1e-6);
     }
@@ -311,7 +311,7 @@ public class SimplexOptimizerNelderMeadTest {
     @Test
     public void testTwoAxes() {
         doTest(new OptimTestUtils.TwoAxes(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 1e-1),
                GoalType.MINIMIZE,
                3451,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
@@ -322,20 +322,19 @@ public class SimplexOptimizerNelderMeadTest {
     @Test
     public void testCigTab() {
         doTest(new OptimTestUtils.CigTab(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 1e-1),
                GoalType.MINIMIZE,
-               7454,
+               7000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
-               1e-14);
+               1e-4);
      }
 
-    @Ignore
     @Test
     public void testSphere() {
         doTest(new OptimTestUtils.Sphere(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 1e-1),
                GoalType.MINIMIZE,
-               3881,
+               3000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
                1e-6);
     }
@@ -344,9 +343,9 @@ public class SimplexOptimizerNelderMeadTest {
     @Test
     public void testTablet() {
         doTest(new OptimTestUtils.Tablet(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 1e-1),
                GoalType.MINIMIZE,
-               6639,
+               10000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
                1e-14);
     }
@@ -355,42 +354,41 @@ public class SimplexOptimizerNelderMeadTest {
     @Test
     public void testDiffPow() {
         doTest(new OptimTestUtils.DiffPow(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 2e-1),
                GoalType.MINIMIZE,
-               4105,
+               7000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
-               1e-14);
+               1e-6);
     }
 
-    @Ignore
     @Test
     public void testSsDiffPow() {
         doTest(new OptimTestUtils.SsDiffPow(),
-               OptimTestUtils.point(DIM / 2, 1.0),
+               OptimTestUtils.point(DIM / 2, 1.0, 2e-1),
                GoalType.MINIMIZE,
-               3990,
+               4000,
                new PointValuePair(OptimTestUtils.point(DIM / 2, 0.0), 0.0),
-               1e-15);
+               1e-3);
     }
 
     @Ignore
     @Test
     public void testAckley() {
         doTest(new OptimTestUtils.Ackley(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 2e-1),
                GoalType.MINIMIZE,
-               2849,
+               10000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
-               0);
+               1e-11);
     }
 
     @Ignore
     @Test
     public void testRastrigin() {
         doTest(new OptimTestUtils.Rastrigin(),
-               OptimTestUtils.point(DIM, 1.0),
+               OptimTestUtils.point(DIM, 1.0, 2e-1),
                GoalType.MINIMIZE,
-               2166,
+               10000,
                new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
                0);
     }
@@ -415,7 +413,7 @@ public class SimplexOptimizerNelderMeadTest {
                                                      new 
ObjectiveFunction(func),
                                                      goal,
                                                      new 
InitialGuess(startPoint),
-                                                     new 
NelderMeadSimplex(dim, 0.1));
+                                                     new 
NelderMeadSimplex(dim, 1));
         final double dist = MathArrays.distance(expected.getPoint(),
                                                 result.getPoint());
         Assert.assertEquals(0d, dist, tol);

Reply via email to