add test for different nonlinear CG direction methods
parent
2d4ee5057a
commit
07b11bc9f1
|
@ -79,6 +79,49 @@ TEST(NonlinearConjugateGradientOptimizer, Optimize) {
|
|||
EXPECT_DOUBLES_EQUAL(0.0, graph.error(result), 1e-4);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
/// Test different direction methods
|
||||
TEST(NonlinearConjugateGradientOptimizer, DirectionMethods) {
|
||||
const auto [graph, initialEstimate] = generateProblem();
|
||||
|
||||
NonlinearOptimizerParams param;
|
||||
param.maxIterations =
|
||||
500; /* requires a larger number of iterations to converge */
|
||||
param.verbosity = NonlinearOptimizerParams::SILENT;
|
||||
|
||||
// Fletcher-Reeves
|
||||
{
|
||||
NonlinearConjugateGradientOptimizer optimizer(
|
||||
graph, initialEstimate, param, DirectionMethod::FletcherReeves);
|
||||
Values result = optimizer.optimize();
|
||||
|
||||
EXPECT_DOUBLES_EQUAL(0.0, graph.error(result), 1e-4);
|
||||
}
|
||||
// Polak-Ribiere
|
||||
{
|
||||
NonlinearConjugateGradientOptimizer optimizer(
|
||||
graph, initialEstimate, param, DirectionMethod::PolakRibiere);
|
||||
Values result = optimizer.optimize();
|
||||
|
||||
EXPECT_DOUBLES_EQUAL(0.0, graph.error(result), 1e-4);
|
||||
}
|
||||
// Hestenes-Stiefel
|
||||
{
|
||||
NonlinearConjugateGradientOptimizer optimizer(
|
||||
graph, initialEstimate, param, DirectionMethod::HestenesStiefel);
|
||||
Values result = optimizer.optimize();
|
||||
|
||||
EXPECT_DOUBLES_EQUAL(0.0, graph.error(result), 1e-4);
|
||||
}
|
||||
// Dai-Yuan
|
||||
{
|
||||
NonlinearConjugateGradientOptimizer optimizer(graph, initialEstimate, param,
|
||||
DirectionMethod::DaiYuan);
|
||||
Values result = optimizer.optimize();
|
||||
|
||||
EXPECT_DOUBLES_EQUAL(0.0, graph.error(result), 1e-4);
|
||||
}
|
||||
}
|
||||
/* ************************************************************************* */
|
||||
int main() {
|
||||
TestResult tr;
|
||||
|
|
Loading…
Reference in New Issue