13#ifndef OPTIMIST_OPTIMIZER_HH
14#define OPTIMIST_OPTIMIZER_HH
42 template <
typename T,
typename DerivedSolver>
46 :
public SolverBase<T, typename TypeTrait<T>::Scalar, DerivedSolver> {
73 constexpr std::string
name()
const {
74 return static_cast<const DerivedSolver *
>(
this)->name_impl();
136 template <
typename GradientLambda>
141 std::forward<GradientLambda>(gradient),
154 template <
typename HessianLambda>
159 std::forward<HessianLambda>(hessian),
173 template <
typename FunctionLambda>
175#define CMD "Optimist::Optimizer::solve(...): "
177 static_assert(DerivedSolver::RequiresFunction,
178 CMD "the solver requires the function.");
179 return static_cast<DerivedSolver *
>(
this)->solve_impl(
180 std::forward<FunctionLambda>(function),
197 template <
typename FunctionLambda,
typename GradientLambda>
198 bool solve(FunctionLambda &&function,
199 GradientLambda &&gradient,
202#define CMD "Optimist::Optimizer::solve(...): "
204 static_assert(DerivedSolver::RequiresFunction,
205 CMD "the solver requires the function.");
206 static_assert(DerivedSolver::RequiresFirstDerivative,
207 CMD "the solver requires the first derivative.");
208 return static_cast<DerivedSolver *
>(
this)->solve_impl(
209 std::forward<FunctionLambda>(function),
210 std::forward<GradientLambda>(gradient),
230 template <
typename FunctionLambda,
231 typename GradientLambda,
232 typename HessianLambda>
233 bool solve(FunctionLambda &&function,
234 GradientLambda &&gradient,
235 HessianLambda &&hessian,
238#define CMD "Optimist::Optimizer::solve(...): "
240 static_assert(DerivedSolver::RequiresFunction,
241 CMD "the solver requires the function.");
242 static_assert(DerivedSolver::RequiresFirstDerivative,
243 CMD "the solver requires the first derivative.");
244 static_assert(DerivedSolver::RequiresSecondDerivative,
245 CMD "the solver requires the second derivative.");
246 return static_cast<DerivedSolver *
>(
this)->solve_impl(
247 std::forward<FunctionLambda>(function),
248 std::forward<GradientLambda>(gradient),
249 std::forward<HessianLambda>(hessian),
#define OPTIMIST_BASIC_CONSTANTS(Scalar)
Definition Optimist.hh:69
Class container for the multi-dimensional optimizer.
Definition Optimizer.hh:46
static constexpr bool IsRootFinder
Definition Optimizer.hh:50
typename TypeTrait< T >::Scalar Scalar
Definition Optimizer.hh:54
Integer max_gradient_evaluations() const
Definition Optimizer.hh:89
Integer hessian_evaluations() const
Definition Optimizer.hh:106
Integer max_hessian_evaluations() const
Definition Optimizer.hh:114
bool solve(FunctionLambda &&function, const Input &x_ini, Output &x_sol)
Definition Optimizer.hh:174
void max_gradient_evaluations(const Integer t_gradient_evaluations)
Definition Optimizer.hh:98
Scalar Output
Definition Optimizer.hh:56
constexpr std::string name() const
Definition Optimizer.hh:73
void max_hessian_evaluations(const Integer t_hessian_evaluations)
Definition Optimizer.hh:123
bool evaluate_hessian(HessianLambda &&hessian, const Input &x, SecondDerivative &out)
Definition Optimizer.hh:155
T Input
Definition Optimizer.hh:55
Optimizer()
Definition Optimizer.hh:67
Integer gradient_evaluations() const
Definition Optimizer.hh:81
bool solve(FunctionLambda &&function, GradientLambda &&gradient, const Input &x_ini, Output &x_sol)
Definition Optimizer.hh:198
bool evaluate_gradient(GradientLambda &&gradient, const Input &x, FirstDerivative &out)
Definition Optimizer.hh:137
bool solve(FunctionLambda &&function, GradientLambda &&gradient, HessianLambda &&hessian, const Input &x_ini, Output &x_sol)
Definition Optimizer.hh:233
static constexpr bool IsOptimizer
Definition Optimizer.hh:51
Integer first_derivative_evaluations() const
Definition SolverBase.hh:379
std::conditional_t< InputTrait::IsEigen||OutputTrait::IsEigen, std::conditional_t< InputTrait::IsSparse||OutputTrait::IsSparse, Eigen::SparseMatrix< Scalar >, Eigen::Matrix< Scalar, OutputTrait::Dimension, InputTrait::Dimension > >, Scalar > FirstDerivative
Definition SolverBase.hh:80
bool evaluate_first_derivative(FirstDerivativeLambda &&function, const T &x, FirstDerivative &out)
Definition SolverBase.hh:1061
bool evaluate_second_derivative(SecondDerivativeLambda &&function, const T &x, SecondDerivative &out)
Definition SolverBase.hh:1082
Integer max_first_derivative_evaluations() const
Definition SolverBase.hh:387
Integer second_derivative_evaluations() const
Definition SolverBase.hh:409
Integer max_second_derivative_evaluations() const
Definition SolverBase.hh:417
std::conditional_t< InputTrait::IsEigen||OutputTrait::IsEigen, std::conditional_t< InputTrait::IsSparse||OutputTrait::IsSparse, std::vector< Eigen::SparseMatrix< Scalar > >, std::vector< Eigen::Matrix< Scalar, OutputTrait::Dimension, InputTrait::Dimension > > >, Scalar > SecondDerivative
Definition SolverBase.hh:88
SolverBase()
Definition SolverBase.hh:142
Namespace for the Optimist library.
Definition Optimist.hh:89
OPTIMIST_DEFAULT_INTEGER_TYPE Integer
The Integer type as used for the API.
Definition Optimist.hh:97
Definition Optimist.hh:113