2
0
mirror of https://github.com/boostorg/math.git synced 2026-02-24 04:02:18 +00:00

added more lbfgs tests

This commit is contained in:
Maksym Zhelyeznyakov
2025-10-17 19:30:26 +02:00
parent 67ed6d6741
commit 8078eba9d7
2 changed files with 57 additions and 0 deletions

View File

@@ -344,6 +344,39 @@ make_lbfgs(Objective&& obj,
lbfgs_update_policy<RealType>{},
std::forward<LineSearchPolicy>(lsp));
}
template<class Objective,
typename ArgumentContainer,
class InitializationPolicy,
class FunctionEvalPolicy,
class GradientEvalPolicy,
class LineSearchPolicy>
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<ArgumentContainer>::type;
return lbfgs<ArgumentContainer,
RealType,
std::decay_t<Objective>,
InitializationPolicy,
FunctionEvalPolicy,
GradientEvalPolicy,
LineSearchPolicy>(std::forward<Objective>(obj),
x,
m,
std::forward<InitializationPolicy>(ip),
std::forward<FunctionEvalPolicy>(fep),
std::forward<GradientEvalPolicy>(gep),
lbfgs_update_policy<RealType>{},
std::forward<LineSearchPolicy>(lsp));
}
} // namespace optimization
} // namespace math
} // namespace boost

View File

@@ -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<T> rng{ T(-5), T(5) };
std::vector<T> x(3);
for (auto& xi : x)
xi = rng.next();
auto opt = bopt::make_lbfgs(&quadratic<T>, // Objective
x, // Arguments
M, // History size
zero_init_policy<T>{}, // Initialization
analytic_objective_eval_pol<T>{}, // Function eval
analytic_gradient_eval_pol<T>{}, // Gradient eval
bopt::armijo_line_search_policy<T>{});
auto result = minimize(opt);
for (auto& xi : x) {
BOOST_REQUIRE_SMALL(xi, eps);
}
}
BOOST_AUTO_TEST_SUITE_END()