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:
00054 CQPBSVMLib(
00055 float64_t* H, int32_t n, float64_t* f, int32_t m, float64_t UB=1.0);
00056
00058 int32_t solve_qp(float64_t* result, int32_t len);
00059
00064 inline void set_solver(E_QPB_SOLVER solver)
00065 {
00066 m_solver=solver;
00067 }
00068
00069 virtual ~CQPBSVMLib();
00070
00071 protected:
00077 inline float64_t* get_col(int32_t col)
00078 {
00079 return &m_H[m_dim*col];
00080 }
00081
00084 int32_t qpbsvm_sca(
00085 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00086 float64_t **ptr_History, int32_t verb);
00089 int32_t qpbsvm_scas(
00090 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00091 float64_t **ptr_History, int32_t verb);
00094 int32_t qpbsvm_scamv(
00095 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00096 float64_t **ptr_History, int32_t verb);
00099 int32_t qpbsvm_prloqo(
00100 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00101 float64_t **ptr_History, int32_t verb);
00104 int32_t qpbsvm_gauss_seidel(
00105 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00106 float64_t **ptr_History, int32_t verb);
00109 int32_t qpbsvm_gradient_descent(
00110 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00111 float64_t **ptr_History, int32_t verb);
00112 #ifdef USE_CPLEX
00113
00115 int32_t qpbsvm_cplex(
00116 float64_t *x, float64_t *Nabla, int32_t *ptr_t,
00117 float64_t **ptr_History, int32_t verb);
00118 #endif
00119
00121 inline virtual const char* get_name() const { return "QPBSVMLib"; }
00122
00123 protected:
00125 float64_t* m_H;
00127 float64_t* m_diag_H;
00129 int32_t m_dim;
00130
00132 float64_t* m_f;
00133
00135 float64_t m_UB;
00136
00138 int32_t m_tmax;
00140 float64_t m_tolabs;
00142 float64_t m_tolrel;
00144 float64_t m_tolKKT;
00146 E_QPB_SOLVER m_solver;
00147 };
00148 }
00149 #endif //QPBSVMLIB_H__