From 8078eba9d7c944122a40e05600856ac835bf3641 Mon Sep 17 00:00:00 2001 From: Maksym Zhelyeznyakov Date: Fri, 17 Oct 2025 19:30:26 +0200 Subject: [PATCH] added more lbfgs tests --- include/boost/math/optimization/lbfgs.hpp | 33 +++++++++++++++++++++++ test/test_lbfgs.cpp | 24 +++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/include/boost/math/optimization/lbfgs.hpp b/include/boost/math/optimization/lbfgs.hpp index f741e934b..0c18fdb48 100644 --- a/include/boost/math/optimization/lbfgs.hpp +++ b/include/boost/math/optimization/lbfgs.hpp @@ -344,6 +344,39 @@ make_lbfgs(Objective&& obj, lbfgs_update_policy{}, std::forward(lsp)); } + +template +auto +make_lbfgs(Objective&& obj, + ArgumentContainer& x, + std::size_t m, + InitializationPolicy&& ip, + FunctionEvalPolicy&& fep, + GradientEvalPolicy&& gep, + LineSearchPolicy&& lsp) +{ + using RealType = typename argument_container_t::type; + return lbfgs, + InitializationPolicy, + FunctionEvalPolicy, + GradientEvalPolicy, + LineSearchPolicy>(std::forward(obj), + x, + m, + std::forward(ip), + std::forward(fep), + std::forward(gep), + lbfgs_update_policy{}, + std::forward(lsp)); +} + } // namespace optimization } // namespace math } // namespace boost diff --git a/test/test_lbfgs.cpp b/test/test_lbfgs.cpp index ffb86108b..5325e7efc 100644 --- a/test/test_lbfgs.cpp +++ b/test/test_lbfgs.cpp @@ -93,4 +93,28 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(custom_init_lbfgs_test, T, all_float_types) } } +BOOST_AUTO_TEST_CASE_TEMPLATE(analytic_lbfgs_test, T, all_float_types) +{ + constexpr size_t M = 10; + const T eps = T{ 1e-3 }; + + RandomSample rng{ T(-5), T(5) }; + std::vector x(3); + for (auto& xi : x) + xi = rng.next(); + + auto opt = bopt::make_lbfgs(&quadratic, // Objective + x, // Arguments + M, // History size + zero_init_policy{}, // Initialization + analytic_objective_eval_pol{}, // Function eval + analytic_gradient_eval_pol{}, // Gradient eval + bopt::armijo_line_search_policy{}); + + auto result = minimize(opt); + + for (auto& xi : x) { + BOOST_REQUIRE_SMALL(xi, eps); + } +} BOOST_AUTO_TEST_SUITE_END()