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 
00032 class QPproblem : public CSGObject
00033 {
00034 // ----------------- Public Data ---------------
00035 public:
00037   int32_t     chunk_size;
00039   int32_t     ell;
00041   int32_t    *y;
00043   float64_t DELTAsv;
00045   int32_t     q;
00047   int32_t     maxmw;
00049   float64_t  c_const;
00051   float64_t  bee;
00053   float64_t  delta;
00055   bool linadd;
00056 
00058   sKernel* KER;
00060   int32_t     ker_type;
00062   int32_t     projection_solver;
00064   int32_t     projection_projector;
00066   int32_t     PreprocessMode;
00068   int32_t     preprocess_size;
00070   int32_t     verbosity;
00072   float64_t  tau_proximal;
00074   float64_t objective_value;
00075 
00076 // ----------------- Public Methods ---------------
00078   QPproblem ();
00079   ~QPproblem();
00080 
00086   int32_t  ReadSVMFile    (char *fInput);
00087 
00093   int32_t  ReadGPDTBinary(char *fName);
00094 
00099   int32_t  Check2Class    (void);
00100 
00107   void Subproblem     (QPproblem &ker, int32_t len, int32_t *perm);
00108 
00110   void PrepMP         (void);
00111 
00117   float64_t  gpdtsolve      (float64_t *solution);
00118 
00124   float64_t  pgpdtsolve     (float64_t *solution);
00125 
00130   inline bool get_linadd_enabled()
00131   {
00132     return linadd;
00133   }
00134 
00135 // ----------------- Private Data  ---------------
00136 private:
00137   int32_t    dim;
00138   int32_t    *index_in, *index_out;
00139   int32_t    *ing, *inaux, *inold, *incom;
00140   int32_t    *cec;
00141   int32_t    nb;
00142   int32_t    *bmem, *bmemrid, *pbmr;
00143   int32_t    my_chunk_size;  // chunk_size for the current processor
00144   int32_t    my_spD_offset;  // offset of the current processor into sp_D matrix
00145   int32_t    recvl[32], displ[32];
00146   float64_t kktold;
00147   float64_t DELTAvpm, InitialDELTAvpm, DELTAkin;
00148   float64_t *alpha;
00149   float64_t *grad, *st;
00150 
00151 // ----------------- Private Methods ---------------
00152 private:
00153   int32_t  Preprocess0 (int32_t *aux, int32_t *sv);
00154   int32_t  Preprocess1 (sKernel* KER, int32_t *aux, int32_t *sv);
00155   int32_t  optimal     (void);
00156 
00157   bool is_zero(int32_t  i) { return (alpha[i] < DELTAsv); }
00158   bool is_free(int32_t  i)
00159        { return (alpha[i] > DELTAsv && alpha[i] < (c_const - DELTAsv)); }
00160   bool is_bound(int32_t i) { return (alpha[i] > (c_const - DELTAsv)); }
00161 
00162 };

SHOGUN Machine Learning Toolbox - Documentation