SHOGUN v0.9.0
|
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