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.