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);
|
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() {
|
int main() {
|
||||||
TestResult tr;
|
TestResult tr;
|
||||||
|
|
Loading…
Reference in New Issue