smo.h
上传用户:xgw_05
上传日期:2014-12-08
资源大小:2726k
文件大小:2k
源码类别:

.net编程

开发平台:

Java

  1. #include "globals.h"
  2. #include <fstream.h>
  3. /*
  4.  *
  5.  * solve  c' * x + 1/2 x' * H * x -> min
  6.  * w.r.t. A * x = b
  7.  *        l <= x <= u
  8.  *
  9.  */
  10.  
  11. class smo_c {
  12.  private:
  13.   quadratic_program* qp;
  14.   SVMFLOAT* x;
  15.   SVMFLOAT* sum;
  16.   SVMINT n;
  17.   SVMFLOAT lambda_eq;
  18.   SVMFLOAT lambda_nu;
  19.   SVMFLOAT is_zero;
  20.   SVMFLOAT max_allowed_error;
  21.   SVMINT max_iteration;
  22.   SVMFLOAT x2tox1(const SVMFLOAT x2, const int id, 
  23.   const SVMFLOAT A1, const SVMFLOAT b);
  24.   SVMFLOAT x1tox2(const SVMFLOAT x1, const int id, 
  25.   const SVMFLOAT A2, const SVMFLOAT b);
  26.   void simple_solve(SVMFLOAT* x1, SVMFLOAT* x2,
  27.     const SVMFLOAT H1, const SVMFLOAT H2,
  28.     const SVMFLOAT c0, 
  29.     const SVMFLOAT c1, const SVMFLOAT c2,
  30.     const SVMFLOAT A1, const SVMFLOAT A2,
  31.     const SVMFLOAT l1, const SVMFLOAT l2,
  32.     const SVMFLOAT u1, const SVMFLOAT u2);
  33.   int minimize_ij(const SVMINT i, const SVMINT j);
  34.   int minimize_i(const SVMINT i);
  35.   void calc_lambda_eq();
  36.   void calc_lambda_nu();
  37.   void set_qp(quadratic_program* the_qp);
  38.  public:
  39.   smo_c();
  40.   smo_c(const SVMFLOAT new_is_zero, 
  41. const SVMFLOAT new_max_allowed_error, 
  42. const SVMINT new_max_iteration);
  43.   void set_max_allowed_error(SVMFLOAT new_max_allowed_error);
  44.   void init(const SVMFLOAT new_is_zero, 
  45.        const SVMFLOAT new_max_allowed_error, 
  46.        const SVMINT new_max_iteration);
  47.   int smo_solve(quadratic_program* the_qp,SVMFLOAT* the_x);
  48.   int smo_solve_single(quadratic_program* the_qp,SVMFLOAT* the_x);
  49.   int smo_solve_const_sum(quadratic_program* the_qp,SVMFLOAT* the_x);
  50.   SVMFLOAT get_lambda_eq();
  51.   SVMFLOAT get_lambda_nu();
  52. };