Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef QPBSVMLIB_H__
00016 #define QPBSVMLIB_H__
00017
00018 #include <math.h>
00019 #include <limits.h>
00020
00021 #include "base/SGObject.h"
00022 #include "lib/io.h"
00023 #include "lib/config.h"
00024 #include "lib/common.h"
00025 #include "kernel/Kernel.h"
00026
00027 namespace shogun
00028 {
00029
00030 enum E_QPB_SOLVER
00031 {
00032 QPB_SOLVER_SCA,
00033 QPB_SOLVER_SCAS,
00034
00035 QPB_SOLVER_SCAMV,
00036 QPB_SOLVER_PRLOQO,
00037 QPB_SOLVER_CPLEX,
00038 QPB_SOLVER_GS,
00039 QPB_SOLVER_GRADDESC
00040 };
00041
00043 class CQPBSVMLib: public CSGObject
00044 {
00045 public:
00047 CQPBSVMLib(void);
00048
00057 CQPBSVMLib(
00058 float64_t* H, int32_t n, float64_t* f, int32_t m, float64_t UB=1.0);
00059
00061 int32_t solve_qp(float64_t* result, int32_t len);
00062
00067 inline void set_solver(E_QPB_SOLVER solver)
00068 {
00069 m_solver=solver;
00070 }
00071
00072 virtual ~CQPBSVMLib();
00073
00074 protected:
00080 inline float64_t* get_col(int32_t col)
00081 {
00082 return &m_H[m_dim*col];
00083 }
00084
00087 int32_t qpbsvm_sca(
00088 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00089 float64_t **ptr_History, int32_t verb);
00092 int32_t qpbsvm_scas(
00093 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00094 float64_t **ptr_History, int32_t verb);
00097 int32_t qpbsvm_scamv(
00098 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00099 float64_t **ptr_History, int32_t verb);
00102 int32_t qpbsvm_prloqo(
00103 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00104 float64_t **ptr_History, int32_t verb);
00107 int32_t qpbsvm_gauss_seidel(
00108 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00109 float64_t **ptr_History, int32_t verb);
00112 int32_t qpbsvm_gradient_descent(
00113 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00114 float64_t **ptr_History, int32_t verb);
00115 #ifdef USE_CPLEX
00116
00118 int32_t qpbsvm_cplex(
00119 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00120 float64_t **ptr_History, int32_t verb);
00121 #endif
00122
00124 inline virtual const char* get_name() const { return "QPBSVMLib"; }
00125
00126 protected:
00128 float64_t* m_H;
00130 float64_t* m_diag_H;
00132 int32_t m_dim;
00133
00135 float64_t* m_f;
00136
00138 float64_t m_UB;
00139
00141 int32_t m_tmax;
00143 float64_t m_tolabs;
00145 float64_t m_tolrel;
00147 float64_t m_tolKKT;
00149 E_QPB_SOLVER m_solver;
00150 };
00151 }
00152 #endif //QPBSVMLIB_H__