/*
  Copyright(C) 2007-2012 National Institute of Information and Communications Technology
*/

/*
  svmtools
  Solver module
*/


#ifndef _SVM_SMO_H_
#define _SVM_SMO_H_


#include "svm_common.h"


/* Training parameter */
typedef struct Svm_tprm {
  SVM_KPRM kprm;	/* カーネルパラメータ */
  double c;	/* ソフトマージンC */
  int kc_size;	/* カーネルキャッシュサイズ(MB) */
  int shrink_loop;	/* srhinkingを行う閾値 */
  int expand_loop;	/* キャッシュ拡張を行う閾値 */
  double kkt_del;	/* 収束条件(KKT) */
  double grad_del;	/* 収束条件(gradient) */
  double alpha_eps;	/* αがboundかどうかの閾値 */
  double kkt_eps;	/* shrinking用閾値 */
} SVM_TPRM;


int svm_smo(SVM_TPRM *tprm, SVM_EXM *exm, double *alpha, double *b);


#endif
