numerical-collection-cpp 0.10.0
A collection of algorithms in numerical analysis implemented in C++
Loading...
Searching...
No Matches
steepest_descent.h
Go to the documentation of this file.
1/*
2 * Copyright 2021 MusicScience37 (Kenta Kabashima)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
20#pragma once
21
29
30namespace num_collect::opt {
31
33constexpr auto steepest_descent_tag =
34 logging::log_tag_view("num_collect::opt::steepest_descent");
35
42template <concepts::differentiable_objective_function ObjectiveFunction,
43 concepts::line_searcher LineSearcher =
46 : public descent_method_base<
47 steepest_descent<ObjectiveFunction, LineSearcher>, LineSearcher> {
48public:
51
54
61 using typename base_type::value_type;
62 using typename base_type::variable_type;
63
72
76 [[nodiscard]] auto calc_direction() const -> variable_type {
77 return -gradient();
78 }
79
85 const {
86 iteration_logger.template append<index_type>(
87 "Iter.", &base_type::iterations);
88 iteration_logger.template append<index_type>(
89 "Eval.", &base_type::evaluations);
90 iteration_logger.template append<value_type>(
91 "Value", &base_type::opt_value);
92 iteration_logger.template append<value_type>(
93 "Grad.", &base_type::gradient_norm);
94 }
95};
96
97} // namespace num_collect::opt
Definition of backtracking_line_searcher class.
Class of tags of logs without memory management.
Class to perform backtracking line search.
Base class of implementations of descent methods for optimization.
typename objective_function_type::value_type value_type
Type of function values.
auto gradient() const -> const variable_type &
Get gradient for current optimal variable.
auto iterations() const noexcept -> index_type
Get the number of iterations.
typename objective_function_type::variable_type variable_type
Type of variables.
auto evaluations() const noexcept -> index_type
Get the number of function evaluations.
typename line_searcher_type::objective_function_type objective_function_type
Type of the objective function.
auto gradient_norm() const -> value_type
Calculate norm of gradient.
auto opt_value() const -> const value_type &
Get current optimal value.
Class of steepest descent method.
auto gradient() const -> const variable_type &
Get gradient for current optimal variable.
typename objective_function_type::variable_type variable_type
Type of variables.
void configure_iteration_logger(logging::iterations::iteration_logger< this_type > &iteration_logger) const
Configure an iteration logger.
steepest_descent(const objective_function_type &obj_fun=objective_function_type())
Constructor.
typename line_searcher_type::objective_function_type objective_function_type
Type of the objective function.
auto calc_direction() const -> variable_type
Calculate search direction.
Concept of first-order differentiable objective functions in optimization.
Concept of objects to perform line search in optimization.
Definition of descent_method_base class.
Definition of differentiable_objective_function concept.
Definition of index_type type.
Definition of iteration_logger class.
Definition of line_searcher concept.
Definition of log_tag_view class.
Namespace of optimization algorithms.
constexpr auto steepest_descent_tag
Tag of steepest_descent.