9 #include <eigen3/Eigen/Dense> 10 #include <eigen3/Eigen/Core> 18 #include "../Generic/generics.hpp" 19 #include "../Generic/debug.hpp" 20 #include "abstractsolver.hpp" 26 template <
typename T >
38 virtual Eigen::Matrix< T, Eigen::Dynamic, 1 >
operator()(
39 const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >& X,
40 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Y,
41 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Beta_0,
43 unsigned int num_iterations );
45 virtual Eigen::Matrix< T, Eigen::Dynamic, 1 >
operator()(
46 const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >& X,
47 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Y,
48 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Beta_0,
50 T duality_gap_target );
54 virtual Eigen::Matrix< T, Eigen::Dynamic, 1 > update_rule(
55 const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >& X,
56 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Y,
57 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Beta_0,
62 template <
typename T >
67 template <
typename T >
71 template <
typename T >
73 const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >& X,
74 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Y,
75 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Beta_0,
77 T duality_gap_target ) {
79 Eigen::Matrix< T, Eigen::Dynamic, 1 > Beta = Beta_0;
81 bool optim_continue =
true;
83 while( optim_continue ) {
85 T dg = duality_gap( X, Y, Beta, lambda );
87 if( dg <= duality_gap_target ) {
88 optim_continue =
false;
91 Beta = update_rule( X, Y, Beta, lambda );
99 template <
typename T >
101 const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >& X,
102 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Y,
103 const Eigen::Matrix< T, Eigen::Dynamic, 1 >& Beta_0,
105 unsigned int num_iterations ) {
107 Eigen::Matrix< T, Eigen::Dynamic, 1 > Beta = Beta_0;
109 for(
unsigned int i = 0; i < num_iterations ; i++ ) {
111 Beta = update_rule( X, Y, Beta, lambda );
112 DEBUG_PRINT(
"Duality Gap:" << duality_gap( X, Y, Beta, lambda ) );
Abstract base class for solvers that do not make use of GAP SAFE screening rules. ...
#define DEBUG_PRINT(x,...)
Abstract base class for all iterative solvers.
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)
Run the AbstractSolver for a fixed number of steps, specified by num_iterations.