DiSMEC++
newton.h
Go to the documentation of this file.
1 // Copyright (c) 2021, Aalto University, developed by Erik Schultheis
2 // All rights reserved.
3 //
4 // SPDX-License-Identifier: MIT
5 
6 #ifndef DISMEC_NEWTON_H
7 #define DISMEC_NEWTON_H
8 
9 #include "solver/minimizer.h"
10 #include "solver/cg.h"
11 #include "solver/line_search.h"
12 #include "utils/hash_vector.h"
13 
14 namespace dismec::solvers
15 {
17  public:
18  explicit NewtonWithLineSearch(long num_variables);
19 
20  // hyperparameters
21  void set_epsilon(double eps);
22  double get_epsilon() const { return m_Epsilon; }
23 
24  void set_maximum_iterations(long max_iter);
25  long get_maximum_iterations() const { return m_MaxIter; }
26 
27  void set_alpha_preconditioner(double alpha);
28  double get_alpha_preconditioner() const { return m_Alpha_PCG; }
29 
30  private:
31  MinimizationResult run(objective::Objective& objective, Eigen::Ref<DenseRealVector> init) override;
32 
33  // newton parameters
34  double m_Epsilon = 0.01;
35  double m_Alpha_PCG = 0.01;
36  long m_MaxIter = 1000;
37 
38  // sub-algorithms
41 
42  // buffers
46 
47  void record_iteration(int iter, int cg_iter, real_t gnorm, real_t objective, const sLineSearchResult& step, real_t gnorm0);
48  };
49 }
50 
51 #endif //DISMEC_NEWTON_H
An Eigen vector with versioning information, to implement simple caching of results.
Definition: hash_vector.h:43
Class that models an optimization objective.
Definition: objective.h:41
Backtracking line search using the armijo rule.
Definition: line_search.h:35
Approximately solve a linear equation Ax + b = 0.
Definition: cg.h:23
DenseRealVector m_PreConditioner
Definition: newton.h:44
BacktrackingLineSearch m_LineSearcher
Definition: newton.h:40
void record_iteration(int iter, int cg_iter, real_t gnorm, real_t objective, const sLineSearchResult &step, real_t gnorm0)
Definition: newton.cpp:169
void set_maximum_iterations(long max_iter)
Definition: newton.cpp:194
double get_alpha_preconditioner() const
Definition: newton.h:28
MinimizationResult run(objective::Objective &objective, Eigen::Ref< DenseRealVector > init) override
Definition: newton.cpp:63
NewtonWithLineSearch(long num_variables)
Definition: newton.cpp:35
void set_alpha_preconditioner(double alpha)
Definition: newton.cpp:202
types::DenseVector< real_t > DenseRealVector
Any dense, real values vector.
Definition: matrix_types.h:40
float real_t
The default type for floating point values.
Definition: config.h:17
Result of a Line Search operation.
Definition: line_search.h:17