/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.minimization;
import org.testng.annotations.Test;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class QuasiNewtonTest extends MultidimensionalMinimizerWithGradientTestCase {
private static final QuasiNewtonInverseHessianUpdate BFGS = new BroydenFletcherGoldfarbShannoInverseHessianUpdate();
private static final QuasiNewtonInverseHessianUpdate DFP = new DavidonFletcherPowellInverseHessianUpdate();
private static final double EPS = 1e-8;
@Test
public void solvingRosenbrockTest() {
super.assertSolvingRosenbrock(new QuasiNewtonVectorMinimizer(EPS, EPS, 100, DFP), EPS);
super.assertSolvingRosenbrock(new QuasiNewtonVectorMinimizer(EPS, EPS, 200, BFGS), EPS);
}
//Quasi Newton fails to solve Rosenbrock when finite difference gradients are used - small errors seem to build up in the inverse Hessian estimate
// @Test
// public void solvingRosenbrockTestWithoutGradient() {
// super.testSolvingRosenbrockWithoutGradient(new QuasiNewtonVectorMinimizer(EPS, EPS, 100, DFP), EPS);
// super.testSolvingRosenbrockWithoutGradient(new QuasiNewtonVectorMinimizer(EPS, EPS, 500, BFGS), EPS);
// }
@Test
public void solvingCoupledRosenbrockTest() {
super.assertSolvingCoupledRosenbrock(new QuasiNewtonVectorMinimizer(EPS, EPS, 1000, DFP), EPS);
super.assertSolvingCoupledRosenbrock(new QuasiNewtonVectorMinimizer(EPS, EPS, 1000, BFGS), EPS);
}
}