16auto make_inner_lbfgsb_solver(
Options &opts) {
18 InnerLBFGSBSolver::Params solver_param;
19 solver_param.max_iter = 50'000;
20 solver_param.print_interval = 0;
23 return InnerLBFGSBSolver{solver_param};
26template <
class LoadedProblem>
29 if (!direction.empty())
30 throw std::invalid_argument(
31 "L-BFGS-B solver does not support any directions");
32 auto inner_solver = make_inner_lbfgsb_solver(opts);
36 return std::make_shared<SolverWrapper>(
37 [solver{std::move(solver)}, N_exp](
48 static constexpr bool valid_config =
49 std::is_same_v<LoadedProblem::config_t, InnerLBFGSBSolver::config_t>;
50 if constexpr (valid_config)
51 return make_lbfgsb_driver_impl<LoadedProblem>(direction, opts);
53 throw std::invalid_argument(
54 "L-BFGS-B solver only supports double precision");
64 throw std::invalid_argument(
65 "This version of alpaqa was compiled without L-BFGS-B support.");
SolverResults run_alm_solver(LoadedProblem &problem, Solver &solver, std::ostream &os, unsigned N_exp)
auto make_alm_solver(InnerSolver &&inner_solver, Options &opts)
Augmented Lagrangian Method solver.
SharedSolverWrapper make_lbfgsb_driver(std::string_view, Options &)
@ ProjGradUnitNorm
∞-norm of the projected gradient with unit step size:
auto attach_cancellation(Solver &solver)
Attach SIGINT and SIGTERM handlers to stop the given solver.
decltype(auto) set_params(T &t, std::string_view prefix, Options &opts)
std::shared_ptr< SolverWrapper > SharedSolverWrapper