gpdtsolve.h

Go to the documentation of this file.
00001 /*
00002  * This program is free software; you can redistribute it and/or modify
00003  * it under the terms of the GNU General Public License as published by
00004  * the Free Software Foundation; either version 3 of the License, or
00005  * (at your option) any later version.
00006  *
00007  *** Authors:                                                               ***
00008  ***  Thomas Serafini, Luca Zanni                                           ***
00009  ***   Dept. of Mathematics, University of Modena and Reggio Emilia - ITALY ***
00010  ***   serafini.thomas@unimo.it, zanni.luca@unimo.it                        ***
00011  ***  Gaetano Zanghirati                                                    ***
00012  ***   Dept. of Mathematics, University of Ferrara - ITALY                  ***
00013  ***   g.zanghirati@unife.it                                                ***
00014  ***                                                                        ***
00015  *** Software homepage: http://dm.unife.it/gpdt                             ***
00016  ***                                                                        ***
00017  *** This work is supported by the Italian FIRB Projects                    ***
00018  ***      'Statistical Learning: Theory, Algorithms and Applications'       ***
00019  ***      (grant RBAU01877P), http://slipguru.disi.unige.it/ASTA            ***
00020  *** and                                                                    ***
00021  ***      'Parallel Algorithms and Numerical Nonlinear Optimization'        ***
00022  ***      (grant RBAU01JYPN), http://dm.unife.it/pn2o                       ***
00023  ***                                                                        ***
00024  *** Copyright (C) 2004 by T. Serafini, G. Zanghirati, L. Zanni.            ***
00025  ***                                                                        ***
00026  *** SHOGUN adaptions  Written (W) 2006-2008 Soeren Sonnenburg              ***
00027  */
00028 
00029 #include "base/SGObject.h"
00030 
00031 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00032 namespace shogun
00033 {
00035 class QPproblem : public CSGObject
00036 {
00037 // ----------------- Public Data ---------------
00038 public:
00040   int32_t     chunk_size;
00042   int32_t     ell;
00044   int32_t    *y;
00046   float64_t DELTAsv;
00048   int32_t     q;
00050   int32_t     maxmw;
00052   float64_t  c_const;
00054   float64_t  bee;
00056   float64_t  delta;
00058   bool linadd;
00059 
00061   sKernel* KER;
00063   int32_t     ker_type;
00065   int32_t     projection_solver;
00067   int32_t     projection_projector;
00069   int32_t     PreprocessMode;
00071   int32_t     preprocess_size;
00073   int32_t     verbosity;
00075   float64_t  tau_proximal;
00077   float64_t objective_value;
00078 
00079 // ----------------- Public Methods ---------------
00081   QPproblem ();
00082   ~QPproblem();
00083 
00089   int32_t  ReadSVMFile    (char *fInput);
00090 
00096   int32_t  ReadGPDTBinary(char *fName);
00097 
00102   int32_t  Check2Class    (void);
00103 
00110   void Subproblem     (QPproblem &ker, int32_t len, int32_t *perm);
00111 
00113   void PrepMP         (void);
00114 
00120   float64_t  gpdtsolve      (float64_t *solution);
00121 
00127   float64_t  pgpdtsolve     (float64_t *solution);
00128 
00133   inline bool get_linadd_enabled()
00134   {
00135     return linadd;
00136   }
00137 
00139   inline virtual const char* get_name() const { return "QProblem"; }
00140 
00141 // ----------------- Private Data  ---------------
00142 private:
00143   int32_t    dim;
00144   int32_t    *index_in, *index_out;
00145   int32_t    *ing, *inaux, *inold, *incom;
00146   int32_t    *cec;
00147   int32_t    nb;
00148   int32_t    *bmem, *bmemrid, *pbmr;
00149   int32_t    my_chunk_size;  // chunk_size for the current processor
00150   int32_t    my_spD_offset;  // offset of the current processor into sp_D matrix
00151   int32_t    recvl[32], displ[32];
00152   float64_t kktold;
00153   float64_t DELTAvpm, InitialDELTAvpm, DELTAkin;
00154   float64_t *alpha;
00155   float64_t *grad, *st;
00156 
00157 // ----------------- Private Methods ---------------
00158 private:
00159   int32_t  Preprocess0 (int32_t *aux, int32_t *sv);
00160   int32_t  Preprocess1 (sKernel* KER, int32_t *aux, int32_t *sv);
00161   int32_t  optimal     (void);
00162 
00163   bool is_zero(int32_t  i) { return (alpha[i] < DELTAsv); }
00164   bool is_free(int32_t  i)
00165        { return (alpha[i] > DELTAsv && alpha[i] < (c_const - DELTAsv)); }
00166   bool is_bound(int32_t i) { return (alpha[i] > (c_const - DELTAsv)); }
00167 
00168 };
00169 }
00170 #endif // DOXYGEN_SHOULD_SKIP_THIS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation