SHOGUN  v3.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
QPBSVMLib.h
Go to the documentation of this file.
1 /*-----------------------------------------------------------------------
2  *
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation; either version 3 of the License, or
6  * (at your option) any later version.
7  *
8  * Library for solving QP task required for learning SVM without bias term.
9  *
10  * Written (W) 1999-2008 Vojtech Franc, xfrancv@cmp.felk.cvut.cz
11  * Copyright (C) 1999-2008 Center for Machine Perception, CTU FEL Prague
12  *
13  -------------------------------------------------------------------- */
14 
15 #ifndef QPBSVMLIB_H__
16 #define QPBSVMLIB_H__
17 
18 #include <math.h>
19 #include <limits.h>
20 
21 #include <shogun/base/SGObject.h>
22 #include <shogun/io/SGIO.h>
23 #include <shogun/lib/config.h>
24 #include <shogun/lib/common.h>
25 #include <shogun/kernel/Kernel.h>
26 
27 namespace shogun
28 {
29 
30 #ifndef DOXYGEN_SHOULD_SKIP_THIS
31 enum E_QPB_SOLVER
32 {
33  QPB_SOLVER_SCA, // sequential coordinate wise (gaussian seidel based)
34  QPB_SOLVER_SCAS, // sequential coordinate wise selecting the variable
35  // gaining 'best' improved
36  QPB_SOLVER_SCAMV, // sequential coordinate wise selecting variable most violating kkt's
37  QPB_SOLVER_PRLOQO,// via pr_loqo
38  QPB_SOLVER_CPLEX, // via cplex
39  QPB_SOLVER_GS, // gaussian seidel
40  QPB_SOLVER_GRADDESC // gaussian seidel
41 };
42 #endif
43 
45 class CQPBSVMLib: public CSGObject
46 {
47  public:
49  CQPBSVMLib();
50 
59  CQPBSVMLib(
60  float64_t* H, int32_t n, float64_t* f, int32_t m, float64_t UB=1.0);
61 
63  int32_t solve_qp(float64_t* result, int32_t len);
64 
69  inline void set_solver(E_QPB_SOLVER solver)
70  {
71  m_solver=solver;
72  }
73 
74  virtual ~CQPBSVMLib();
75 
76  protected:
82  inline float64_t* get_col(int32_t col)
83  {
84  return &m_H[m_dim*col];
85  }
86 
89  int32_t qpbsvm_sca(
90  float64_t *x, float64_t *Nabla, int32_t *ptr_t,
91  float64_t **ptr_History, int32_t verb);
94  int32_t qpbsvm_scas(
95  float64_t *x, float64_t *Nabla, int32_t *ptr_t,
96  float64_t **ptr_History, int32_t verb);
99  int32_t qpbsvm_scamv(
100  float64_t *x, float64_t *Nabla, int32_t *ptr_t,
101  float64_t **ptr_History, int32_t verb);
104  int32_t qpbsvm_prloqo(
105  float64_t *x, float64_t *Nabla, int32_t *ptr_t,
106  float64_t **ptr_History, int32_t verb);
109  int32_t qpbsvm_gauss_seidel(
110  float64_t *x, float64_t *Nabla, int32_t *ptr_t,
111  float64_t **ptr_History, int32_t verb);
114  int32_t qpbsvm_gradient_descent(
115  float64_t *x, float64_t *Nabla, int32_t *ptr_t,
116  float64_t **ptr_History, int32_t verb);
117 #ifdef USE_CPLEX
118 
120  int32_t qpbsvm_cplex(
121  float64_t *x, float64_t *Nabla, int32_t *ptr_t,
122  float64_t **ptr_History, int32_t verb);
123 #endif
124 
126  inline const char* get_name() const { return "QPBSVMLib"; }
127 
128  protected:
134  int32_t m_dim;
135 
138 
141 
143  int32_t m_tmax;
151  E_QPB_SOLVER m_solver;
152 };
153 }
154 #endif //QPBSVMLIB_H__

SHOGUN Machine Learning Toolbox - Documentation