HDIM  1.0.0
Packages for High Dimensional Linear Regression
abstractsolver.hpp
1 #ifndef ABSTRACTSOLVER_HPP
2 #define ABSTRACTSOLVER_HPP
3 
4 // C System-Headers
5 //
6 // C++ System headers
7 #include <functional> // std::function
8 // Eigen Headers
9 #include <eigen3/Eigen/Dense>
10 #include <eigen3/Eigen/Core>
11 // Boost Headers
12 //
13 // SPAMS Headers
14 //
15 // OpenMP Headers
16 //
17 // Project Specific Headers
18 #include "../Generic/generics.hpp"
19 #include "../Generic/debug.hpp"
20 
21 namespace hdim {
22 
23 namespace internal {
24 
25 template < typename T >
26 
33 
34  public:
35 
36  virtual ~AbstractSolver() = 0;
37 
60  virtual Eigen::Matrix< T, Eigen::Dynamic, 1 > operator()(
61  const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >& X,
62  const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Y,
63  const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Beta_0,
64  T lambda,
65  unsigned int num_iterations ) = 0;
66 
90  virtual Eigen::Matrix< T, Eigen::Dynamic, 1 > operator()(
91  const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >& X,
92  const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Y,
93  const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Beta_0,
94  T lambda,
95  T duality_gap_target ) = 0;
96 
97  protected:
98 
99  virtual Eigen::Matrix< T, Eigen::Dynamic, 1 > update_rule(
100  const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >& X,
101  const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Y,
102  const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Beta_0,
103  T lambda ) = 0;
104 
105 };
106 
107 template < typename T >
109 
110 
111 }
112 
113 }
114 
115 #endif // ABSTRACTSOLVER_HPP
Definition: fos.hpp:18
virtual Eigen::Matrix< T, Eigen::Dynamic, 1 > operator()(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &X, const Eigen::Matrix< T, Eigen::Dynamic, 1 > &Y, const Eigen::Matrix< T, Eigen::Dynamic, 1 > &Beta_0, T lambda, unsigned int num_iterations)=0
Run the AbstractSolver for a fixed number of steps, specified by num_iterations.
Abstract base class for all iterative solvers.