qpbsvmlib.h

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------
00002  *
00003  * This program is free software; you can redistribute it and/or modify
00004  * it under the terms of the GNU General Public License as published by
00005  * the Free Software Foundation; either version 3 of the License, or
00006  * (at your option) any later version.
00007  *
00008  * Library for solving QP task required for learning SVM without bias term. 
00009  *
00010  * Written (W) 1999-2008 Vojtech Franc, xfrancv@cmp.felk.cvut.cz
00011  * Copyright (C) 1999-2008 Center for Machine Perception, CTU FEL Prague 
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, // sequential coordinate wise (gaussian seidel based)
00033     QPB_SOLVER_SCAS,    // sequential coordinate wise selecting the variable
00034     // gaining 'best' improved
00035     QPB_SOLVER_SCAMV, // sequential coordinate wise selecting variable most violating kkt's
00036     QPB_SOLVER_PRLOQO,// via pr_loqo
00037     QPB_SOLVER_CPLEX,  // via cplex
00038     QPB_SOLVER_GS,  // gaussian seidel
00039     QPB_SOLVER_GRADDESC  // gaussian seidel
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__

SHOGUN Machine Learning Toolbox - Documentation