numerical-collection-cpp 0.10.0
A collection of algorithms in numerical analysis implemented in C++
Loading...
Searching...
No Matches
num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian > Class Template Reference

Class of quasi-Newton method with Davidon-Fletcher-Powell (DFP) formula. More...

#include <num_collect/opt/dfp_optimizer.h>

+ Inheritance diagram for num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >:
+ Collaboration diagram for num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >:

Public Types

using base_type = descent_method_base<this_type, LineSearcher>
 Type of base class.
 
using hessian_type = Hessian
 Type of Hessian.
 
using objective_function_type
 Type of the objective function.
 
using this_type = dfp_optimizer<ObjectiveFunction, LineSearcher, Hessian>
 This class.
 
using value_type
 Type of function values.
 
using variable_scalar_type = typename variable_type::Scalar
 Type of scalars in variables.
 
using variable_type
 Type of variables.
 
- Public Types inherited from num_collect::opt::descent_method_base< Derived, LineSearcher >
using line_searcher_type = LineSearcher
 Type of class to perform line search.
 
using objective_function_type
 Type of the objective function.
 
using value_type = typename objective_function_type::value_type
 Type of function values.
 
using variable_type = typename objective_function_type::variable_type
 Type of variables.
 

Public Member Functions

 dfp_optimizer (const objective_function_type &obj_fun=objective_function_type())
 Constructor.
 
auto calc_direction () -> variable_type
 Calculate search direction.
 
void configure_iteration_logger (logging::iterations::iteration_logger< this_type > &iteration_logger) const
 Configure an iteration logger.
 
auto evaluations () const noexcept -> index_type
 Get the number of function evaluations.
 
auto gradient () const -> const variable_type &
 Get gradient for current optimal variable.
 
auto gradient_norm () const -> value_type
 Calculate norm of gradient.
 
void init (const variable_type &init_variable)
 Initialize.
 
auto iterations () const noexcept -> index_type
 Get the number of iterations.
 
auto line_searcher () -> line_searcher_type &
 Access object to perform line search.
 
auto line_searcher () const -> const line_searcher_type &
 Access object to perform line search.
 
auto opt_value () const -> const value_type &
 Get current optimal value.
 
auto opt_variable () const -> const variable_type &
 Get current optimal variable.
 
- Public Member Functions inherited from num_collect::opt::descent_method_base< Derived, LineSearcher >
auto calc_direction () -> variable_type
 Calculate search direction.
 
auto evaluations () const noexcept -> index_type
 Get the number of function evaluations.
 
auto gradient () const -> const variable_type &
 Get gradient for current optimal variable.
 
auto gradient_norm () const -> value_type
 Calculate norm of gradient.
 
void init (const variable_type &init_variable)
 Initialize.
 
auto is_stop_criteria_satisfied () const -> bool
 Determine if stopping criteria of the algorithm are satisfied.
 
void iterate ()
 Iterate the algorithm once.
 
auto iterations () const noexcept -> index_type
 Get the number of iterations.
 
auto line_searcher () -> line_searcher_type &
 Access object to perform line search.
 
auto line_searcher () const -> const line_searcher_type &
 Access object to perform line search.
 
auto opt_value () const -> const value_type &
 Get current optimal value.
 
auto opt_variable () const -> const variable_type &
 Get current optimal variable.
 
auto tol_gradient_norm (const value_type &value) -> Derived &
 Set tolerance of norm of gradient.
 
- Public Member Functions inherited from num_collect::opt::optimizer_base< Derived >
 optimizer_base (logging::log_tag_view tag)
 Constructor.
 
auto evaluations () const noexcept -> index_type
 Get the number of function evaluations.
 
auto iterations () const noexcept -> index_type
 Get the number of iterations.
 
auto opt_value () const
 Get current optimal value.
 
auto opt_variable () const
 Get current optimal variable.
 
- Public Member Functions inherited from num_collect::base::iterative_solver_base< Derived >
 iterative_solver_base (logging::log_tag_view tag)
 Constructor.
 
auto is_stop_criteria_satisfied () const -> bool
 Determine if stopping criteria of the algorithm are satisfied.
 
void iterate ()
 Iterate the algorithm once.
 
void solve ()
 Solve the problem.
 
- Public Member Functions inherited from num_collect::logging::logging_mixin
 logging_mixin (log_tag_view tag)
 Constructor.
 
template<typename Child >
void configure_child_algorithm_logger_if_exists (Child &child)
 Configure a logger of a child algorithm if exists.
 
auto logger () const noexcept -> const num_collect::logging::logger &
 Access to the logger.
 
auto logger () noexcept -> num_collect::logging::logger &
 Access to the logger.
 
- Public Member Functions inherited from num_collect::logging::iterations::iteration_logger_mixin< Derived >
 iteration_logger_mixin ()=default
 Constructor.
 
void configure_iteration_logger (num_collect::logging::iterations::iteration_logger< Derived > &iteration_logger) const
 Configure an iteration logger.
 
auto initialize_iteration_logger () -> num_collect::logging::iterations::iteration_logger< Derived > &
 Get the iteration logger.
 

Private Attributes

hessian_type approx_hessian_ {}
 Approximate Hessian.
 
variable_type diff_grad_ {}
 Difference of gradient.
 
variable_type diff_var_ {}
 Difference of variable.
 
bool has_first_iteration_done_ {false}
 Whether the first iteration has been done.
 
variable_type hessian_grad_ {}
 approx_hessian_ * diff_grad_
 
variable_type prev_grad_ {}
 Previous gradient.
 
variable_type prev_var_ {}
 Previous variable.
 

Additional Inherited Members

- Protected Member Functions inherited from num_collect::opt::descent_method_base< Derived, LineSearcher >
 descent_method_base (logging::log_tag_view tag, const objective_function_type &obj_fun=objective_function_type())
 Constructor.
 
- Protected Member Functions inherited from num_collect::base::iterative_solver_base< Derived >
auto derived () const noexcept -> const Derived &
 Access derived object.
 
auto derived () noexcept -> Derived &
 Access derived object.
 

Detailed Description

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
class num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >

Class of quasi-Newton method with Davidon-Fletcher-Powell (DFP) formula.

Warning
This implementation assumes Eigen's dense vector types for variable types.
Template Parameters
ObjectiveFunctionType of the objective function.
LineSearcherType of class to perform line search.
HessianType of Hessian matrix.

Definition at line 56 of file dfp_optimizer.h.

Member Typedef Documentation

◆ base_type

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
using num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::base_type = descent_method_base<this_type, LineSearcher>

Type of base class.

Definition at line 65 of file dfp_optimizer.h.

◆ hessian_type

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
using num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::hessian_type = Hessian

Type of Hessian.

Definition at line 74 of file dfp_optimizer.h.

◆ objective_function_type

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
using num_collect::opt::descent_method_base< Derived, LineSearcher >::objective_function_type

Type of the objective function.

Definition at line 42 of file descent_method_base.h.

◆ this_type

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
using num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::this_type = dfp_optimizer<ObjectiveFunction, LineSearcher, Hessian>

This class.

Definition at line 62 of file dfp_optimizer.h.

◆ value_type

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
using num_collect::opt::descent_method_base< Derived, LineSearcher >::value_type

Type of function values.

Definition at line 49 of file descent_method_base.h.

◆ variable_scalar_type

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
using num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::variable_scalar_type = typename variable_type::Scalar

Type of scalars in variables.

Definition at line 71 of file dfp_optimizer.h.

◆ variable_type

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
using num_collect::opt::descent_method_base< Derived, LineSearcher >::variable_type

Type of variables.

Definition at line 46 of file descent_method_base.h.

Constructor & Destructor Documentation

◆ dfp_optimizer()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::dfp_optimizer ( const objective_function_type & obj_fun = objective_function_type())
inlineexplicit

Constructor.

Parameters
[in]obj_funObjective function.

Definition at line 81 of file dfp_optimizer.h.

Member Function Documentation

◆ calc_direction()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::calc_direction ( ) -> variable_type
inlinenodiscard

Calculate search direction.

Returns
Search direction.

Definition at line 109 of file dfp_optimizer.h.

◆ configure_iteration_logger()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
void num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::configure_iteration_logger ( logging::iterations::iteration_logger< this_type > & iteration_logger) const
inline

Configure an iteration logger.

Parameters
[in]iteration_loggerIteration logger.

Definition at line 130 of file dfp_optimizer.h.

◆ evaluations()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::descent_method_base< Derived, LineSearcher >::evaluations ( ) const -> index_type
inlinenodiscardnoexcept

Get the number of function evaluations.

Returns
Number of function evaluations.

Definition at line 127 of file descent_method_base.h.

◆ gradient()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::descent_method_base< Derived, LineSearcher >::gradient ( ) const -> const variable_type&
inlinenodiscard

Get gradient for current optimal variable.

Returns
Gradient for current optimal variable.

Definition at line 136 of file descent_method_base.h.

◆ gradient_norm()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::descent_method_base< Derived, LineSearcher >::gradient_norm ( ) const -> value_type
inlinenodiscard

Calculate norm of gradient.

Returns
Norm of gradient.

Definition at line 145 of file descent_method_base.h.

◆ init()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
void num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::init ( const variable_type & init_variable)
inline

Initialize.

Parameters
[in]init_variableInitial variable.

Definition at line 99 of file dfp_optimizer.h.

◆ iterations()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::descent_method_base< Derived, LineSearcher >::iterations ( ) const -> index_type
inlinenodiscardnoexcept

Get the number of iterations.

Returns
Number of iterations.

Definition at line 120 of file descent_method_base.h.

◆ line_searcher() [1/2]

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::descent_method_base< Derived, LineSearcher >::line_searcher ( ) -> line_searcher_type&
inlinenodiscard

Access object to perform line search.

Returns
Object to perform line search.

Definition at line 90 of file descent_method_base.h.

◆ line_searcher() [2/2]

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::descent_method_base< Derived, LineSearcher >::line_searcher ( ) const -> const line_searcher_type&
inlinenodiscard

Access object to perform line search.

Returns
Object to perform line search.

Definition at line 99 of file descent_method_base.h.

◆ opt_value()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::descent_method_base< Derived, LineSearcher >::opt_value ( ) const -> const value_type&
inlinenodiscard

Get current optimal value.

Returns
Current optimal value.

Definition at line 113 of file descent_method_base.h.

◆ opt_variable()

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
auto num_collect::opt::descent_method_base< Derived, LineSearcher >::opt_variable ( ) const -> const variable_type&
inlinenodiscard

Get current optimal variable.

Returns
Current optimal variable.

Definition at line 106 of file descent_method_base.h.

Member Data Documentation

◆ approx_hessian_

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
hessian_type num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::approx_hessian_ {}
private

Approximate Hessian.

Definition at line 145 of file dfp_optimizer.h.

◆ diff_grad_

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
variable_type num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::diff_grad_ {}
private

Difference of gradient.

Definition at line 157 of file dfp_optimizer.h.

◆ diff_var_

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
variable_type num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::diff_var_ {}
private

Difference of variable.

Definition at line 154 of file dfp_optimizer.h.

◆ has_first_iteration_done_

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
bool num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::has_first_iteration_done_ {false}
private

Whether the first iteration has been done.

Definition at line 163 of file dfp_optimizer.h.

◆ hessian_grad_

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
variable_type num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::hessian_grad_ {}
private

approx_hessian_ * diff_grad_

Definition at line 160 of file dfp_optimizer.h.

◆ prev_grad_

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
variable_type num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::prev_grad_ {}
private

Previous gradient.

Definition at line 151 of file dfp_optimizer.h.

◆ prev_var_

template<concepts::multi_variate_differentiable_objective_function ObjectiveFunction, concepts::line_searcher LineSearcher = backtracking_line_searcher<ObjectiveFunction>, base::concepts::real_scalar_dense_matrix Hessian = Eigen::MatrixX<typename ObjectiveFunction::value_type>>
variable_type num_collect::opt::dfp_optimizer< ObjectiveFunction, LineSearcher, Hessian >::prev_var_ {}
private

Previous variable.

Definition at line 148 of file dfp_optimizer.h.


The documentation for this class was generated from the following file: