Author: luc
Date: Mon Mar  3 11:11:46 2014
New Revision: 1573523

URL: http://svn.apache.org/r1573523
Log:
Fixed failing test.

As functions evaluations were not counted properly, which has been fixed
a few days ago, the multi-start test in fact did not performed all
expected restarts. This commit fixes this (by increasing the max
evaluations), and fixes the result checks accordingly.

Modified:
    
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java

Modified: 
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java?rev=1573523&r1=1573522&r2=1573523&view=diff
==============================================================================
--- 
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java
 (original)
+++ 
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/optim/nonlinear/scalar/MultiStartMultivariateOptimizerTest.java
 Mon Mar  3 11:11:46 2014
@@ -18,8 +18,8 @@ package org.apache.commons.math3.optim.n
 
 import org.apache.commons.math3.analysis.MultivariateFunction;
 import org.apache.commons.math3.geometry.euclidean.twod.Vector2D;
-import org.apache.commons.math3.optim.MaxEval;
 import org.apache.commons.math3.optim.InitialGuess;
+import org.apache.commons.math3.optim.MaxEval;
 import org.apache.commons.math3.optim.PointValuePair;
 import org.apache.commons.math3.optim.SimpleValueChecker;
 import org.apache.commons.math3.optim.nonlinear.scalar.gradient.CircleScalar;
@@ -54,26 +54,31 @@ public class MultiStartMultivariateOptim
             = new UncorrelatedRandomVectorGenerator(new double[] { 50, 50 },
                                                     new double[] { 10, 10 },
                                                     new 
GaussianRandomGenerator(g));
+        int nbStarts = 10;
         MultiStartMultivariateOptimizer optimizer
-            = new MultiStartMultivariateOptimizer(underlying, 10, generator);
+            = new MultiStartMultivariateOptimizer(underlying, nbStarts, 
generator);
         PointValuePair optimum
-            = optimizer.optimize(new MaxEval(200),
+            = optimizer.optimize(new MaxEval(1000),
                                  circle.getObjectiveFunction(),
                                  circle.getObjectiveFunctionGradient(),
                                  GoalType.MINIMIZE,
                                  new InitialGuess(new double[] { 98.680, 
47.345 }));
-        Assert.assertEquals(200, optimizer.getMaxEvaluations());
+        Assert.assertEquals(1000, optimizer.getMaxEvaluations());
         PointValuePair[] optima = optimizer.getOptima();
+        Assert.assertEquals(nbStarts, optima.length);
         for (PointValuePair o : optima) {
+            // we check the results of all intermediate restarts here (there 
are 10 such results)
             Vector2D center = new Vector2D(o.getPointRef()[0], 
o.getPointRef()[1]);
-
-            Assert.assertEquals(69.9601, circle.getRadius(center), 1e-4);
-            Assert.assertEquals(96.075, center.getX(), 1e-3);
-            Assert.assertEquals(48.13516, center.getY(), 1e-5);
+            Assert.assertTrue(69.9592 < circle.getRadius(center));
+            Assert.assertTrue(69.9602 > circle.getRadius(center));
+            Assert.assertTrue(96.0745 < center.getX());
+            Assert.assertTrue(96.0762 > center.getX());
+            Assert.assertTrue(48.1344 < center.getY());
+            Assert.assertTrue(48.1354 > center.getY());
         }
 
-        Assert.assertTrue(optimizer.getEvaluations() > 590);
-        Assert.assertTrue(optimizer.getEvaluations() < 610);
+        Assert.assertTrue(optimizer.getEvaluations() > 850);
+        Assert.assertTrue(optimizer.getEvaluations() < 900);
 
         Assert.assertEquals(3.1267527, optimum.getValue(), 1e-8);
     }
@@ -92,19 +97,21 @@ public class MultiStartMultivariateOptim
         g.setSeed(16069223052l);
         RandomVectorGenerator generator
             = new UncorrelatedRandomVectorGenerator(2, new 
GaussianRandomGenerator(g));
+        int nbStarts = 10;
         MultiStartMultivariateOptimizer optimizer
-            = new MultiStartMultivariateOptimizer(underlying, 10, generator);
+            = new MultiStartMultivariateOptimizer(underlying, nbStarts, 
generator);
         PointValuePair optimum
             = optimizer.optimize(new MaxEval(1100),
                                  new ObjectiveFunction(rosenbrock),
                                  GoalType.MINIMIZE,
                                  simplex,
                                  new InitialGuess(new double[] { -1.2, 1.0 }));
+        Assert.assertEquals(nbStarts, optimizer.getOptima().length);
 
         Assert.assertEquals(rosenbrock.getCount(), optimizer.getEvaluations());
         Assert.assertTrue(optimizer.getEvaluations() > 900);
         Assert.assertTrue(optimizer.getEvaluations() < 1200);
-        Assert.assertTrue(optimum.getValue() < 8e-4);
+        Assert.assertTrue(optimum.getValue() < 5e-5);
     }
 
     private static class Rosenbrock implements MultivariateFunction {


Reply via email to