You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2009/07/25 18:14:42 UTC
svn commit: r797787 -
/commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/MultiStartUnivariateRealOptimizerTest.java
Author: luc
Date: Sat Jul 25 16:14:42 2009
New Revision: 797787
URL: http://svn.apache.org/viewvc?rev=797787&view=rev
Log:
added tests for recent changes
improved coverage
Modified:
commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/MultiStartUnivariateRealOptimizerTest.java
Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/MultiStartUnivariateRealOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/MultiStartUnivariateRealOptimizerTest.java?rev=797787&r1=797786&r2=797787&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/MultiStartUnivariateRealOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/MultiStartUnivariateRealOptimizerTest.java Sat Jul 25 16:14:42 2009
@@ -19,8 +19,10 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import org.apache.commons.math.MathException;
+import org.apache.commons.math.analysis.QuinticFunction;
import org.apache.commons.math.analysis.SinFunction;
import org.apache.commons.math.analysis.UnivariateRealFunction;
import org.apache.commons.math.optimization.univariate.BrentOptimizer;
@@ -39,13 +41,61 @@
new MultiStartUnivariateRealOptimizer(underlying, 10, g);
minimizer.optimize(f, GoalType.MINIMIZE, -100.0, 100.0);
double[] optima = minimizer.getOptima();
+ double[] optimaValues = minimizer.getOptimaValues();
for (int i = 1; i < optima.length; ++i) {
double d = (optima[i] - optima[i-1]) / (2 * Math.PI);
assertTrue (Math.abs(d - Math.rint(d)) < 1.0e-8);
assertEquals(-1.0, f.value(optima[i]), 1.0e-10);
+ assertEquals(f.value(optima[i]), optimaValues[i], 1.0e-10);
}
assertTrue(minimizer.getEvaluations() > 2900);
assertTrue(minimizer.getEvaluations() < 3100);
+ }
+
+ @Test
+ public void testQuinticMin() throws MathException {
+ // The quintic function has zeros at 0, +-0.5 and +-1.
+ // The function has extrema (first derivative is zero) at 0.27195613 and 0.82221643,
+ UnivariateRealFunction f = new QuinticFunction();
+ UnivariateRealOptimizer underlying = new BrentOptimizer();
+ JDKRandomGenerator g = new JDKRandomGenerator();
+ g.setSeed(4312000053l);
+ MultiStartUnivariateRealOptimizer minimizer =
+ new MultiStartUnivariateRealOptimizer(underlying, 5, g);
+ minimizer.setAbsoluteAccuracy(10 * minimizer.getAbsoluteAccuracy());
+ minimizer.setRelativeAccuracy(10 * minimizer.getRelativeAccuracy());
+
+ try {
+ minimizer.getOptima();
+ fail("an exception should have been thrown");
+ } catch (IllegalStateException ise) {
+ // expected
+ } catch (Exception e) {
+ fail("wrong exception caught");
+ }
+ try {
+ minimizer.getOptimaValues();
+ fail("an exception should have been thrown");
+ } catch (IllegalStateException ise) {
+ // expected
+ } catch (Exception e) {
+ fail("wrong exception caught");
+ }
+
+ assertEquals(-0.27195612846834, minimizer.optimize(f, GoalType.MINIMIZE, -0.3, -0.2), 1.0e-13);
+ assertEquals(-0.27194301946870, minimizer.getResult(), 1.0e-13);
+ assertEquals(-0.04433426940878, minimizer.getFunctionValue(), 1.0e-13);
+
+ double[] optima = minimizer.getOptima();
+ double[] optimaValues = minimizer.getOptimaValues();
+ for (int i = 0; i < optima.length; ++i) {
+ assertEquals(f.value(optima[i]), optimaValues[i], 1.0e-10);
+ }
+
+ assertTrue(minimizer.getEvaluations() >= 510);
+ assertTrue(minimizer.getEvaluations() <= 530);
+ assertTrue(minimizer.getIterationCount() >= 150);
+ assertTrue(minimizer.getIterationCount() <= 170);
}