00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "lib/common.h"
00016
00017 #ifndef libocas_h
00018 #define libocas_h
00019 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00020 namespace shogun
00021 {
00022 #define LIBOCAS_PLUS_INF (-log(0.0))
00023 #define LIBOCAS_CALLOC(x,y) calloc(x,y)
00024 #define LIBOCAS_FREE(x) free(x)
00025 #define LIBOCAS_INDEX(ROW,COL,NUM_ROWS) ((COL)*(NUM_ROWS)+(ROW))
00026 #define LIBOCAS_MIN(A,B) ((A) > (B) ? (B) : (A))
00027 #define LIBOCAS_MAX(A,B) ((A) < (B) ? (B) : (A))
00028 #define LIBOCAS_ABS(A) ((A) < 0 ? -(A) : (A))
00029
00030 typedef struct {
00031 uint32_t nIter;
00032 uint32_t nCutPlanes;
00033 uint32_t nNZAlpha;
00034 uint32_t trn_err;
00035 float64_t Q_P;
00036 float64_t Q_D;
00037 float64_t output_time;
00038 float64_t sort_time;
00039 float64_t add_time;
00040 float64_t w_time;
00041 float64_t qp_solver_time;
00042 float64_t ocas_time;
00043 float64_t print_time;
00044 int8_t qp_exitflag;
00045 int8_t exitflag;
00046
00047
00048
00049
00050
00051 } ocas_return_value_T;
00052
00053
00054 ocas_return_value_T svm_ocas_solver(
00055 float64_t C,
00056 uint32_t nData,
00057 float64_t TolRel,
00058 float64_t TolAbs,
00059 float64_t QPBound,
00060 float64_t MaxTime,
00061 uint32_t BufSize,
00062 uint8_t Method,
00063 void (*compute_W)(float64_t*, float64_t*, float64_t*, uint32_t, void*),
00064 float64_t (*update_W)(float64_t, void*),
00065 int (*add_new_cut)(float64_t*, uint32_t*, uint32_t, uint32_t, void*),
00066 int (*compute_output)( float64_t*, void* ),
00067 int (*sort)(float64_t*, float64_t*, uint32_t),
00068 void (*ocas_print)(ocas_return_value_T),
00069 void* user_data);
00070
00071
00072 ocas_return_value_T svm_ocas_solver_difC(
00073 float64_t *C,
00074 uint32_t nData,
00075 float64_t TolRel,
00076 float64_t TolAbs,
00077 float64_t QPBound,
00078 float64_t MaxTime,
00079 uint32_t BufSize,
00080 uint8_t Method,
00081 void (*compute_W)(float64_t*, float64_t*, float64_t*, uint32_t, void*),
00082 float64_t (*update_W)(float64_t, void*),
00083 int (*add_new_cut)(float64_t*, uint32_t*, uint32_t, uint32_t, void*),
00084 int (*compute_output)( float64_t*, void* ),
00085 int (*sort)(float64_t*, float64_t*, uint32_t),
00086 void (*ocas_print)(ocas_return_value_T),
00087 void* user_data);
00088
00089
00090 ocas_return_value_T msvm_ocas_solver(
00091 float64_t C,
00092 float64_t *data_y,
00093 uint32_t nY,
00094 uint32_t nData,
00095 float64_t TolRel,
00096 float64_t TolAbs,
00097 float64_t QPBound,
00098 float64_t MaxTime,
00099 uint32_t _BufSize,
00100 uint8_t Method,
00101 void (*compute_W)(float64_t*, float64_t*, float64_t*, uint32_t, void*),
00102 float64_t (*update_W)(float64_t, void*),
00103 int (*add_new_cut)(float64_t*, uint32_t*, uint32_t, void*),
00104 int (*compute_output)(float64_t*, void* ),
00105 int (*sort)(float64_t*, float64_t*, uint32_t),
00106 void (*ocas_print)(ocas_return_value_T),
00107 void* user_data);
00108 }
00109 #endif // DOXYGEN_SHOULD_SKIP_THIS
00110 #endif