public class MultiStartUnivariateRealOptimizerTest {
@Test
public void testSinMin() throws MathException {
UnivariateRealFunction f = new SinFunction();
UnivariateRealOptimizer underlying = new BrentOptimizer();
JDKRandomGenerator g = new JDKRandomGenerator();
g.setSeed(44428400075l);
MultiStartUnivariateRealOptimizer minimizer =
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 * FastMath.PI);
assertTrue (FastMath.abs(d - FastMath.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() > 150);
assertTrue(minimizer.getEvaluations() < 250);
}