Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef CCPLEX_H__
00012 #define CCPLEX_H__
00013
00014 #include <shogun/lib/config.h>
00015
00016 #ifdef USE_CPLEX
00017 extern "C" {
00018 #include <ilcplex/cplex.h>
00019 }
00020
00021 #include <shogun/lib/common.h>
00022 #include <shogun/base/SGObject.h>
00023
00024 #include <shogun/features/SparseFeatures.h>
00025 #include <shogun/features/Labels.h>
00026
00027 namespace shogun
00028 {
00029 enum E_PROB_TYPE
00030 {
00031 E_LINEAR,
00032 E_QP
00033 };
00034
00042 class CCplex : public CSGObject
00043 {
00044 public:
00045
00046 CCplex();
00047 virtual ~CCplex();
00048
00050 bool init(E_PROB_TYPE t, int32_t timeout=60);
00051 bool cleanup();
00052
00053
00054
00055 bool setup_subgradientlpm_QP(
00056 float64_t C, CLabels* labels, CSparseFeatures<float64_t>* features,
00057 int32_t* idx_bound, int32_t num_bound, int32_t* w_zero,
00058 int32_t num_zero, float64_t* vee, int32_t num_dim, bool use_bias);
00059
00060 bool setup_lpboost(float64_t C, int32_t num_cols);
00061 bool add_lpboost_constraint(
00062 float64_t factor, SGSparseVectorEntry<float64_t>* h, int32_t len,
00063 int32_t ulen, CLabels* label);
00064
00065
00066
00067
00069
00070
00071
00072
00073
00074
00075
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 bool setup_lpm(
00102 float64_t C, CSparseFeatures<float64_t>* x, CLabels* y, bool use_bias);
00103
00104
00105
00106
00107
00108
00109
00110
00111 bool setup_lp(
00112 float64_t* objective, float64_t* constraints_mat, int32_t rows,
00113 int32_t cols, float64_t* rhs, float64_t* lb, float64_t* ub);
00114
00115
00116
00117
00118
00119 bool setup_qp(float64_t* H, int32_t dim);
00120 bool optimize(float64_t* sol, float64_t* lambda=NULL);
00121
00122 bool dense_to_cplex_sparse(
00123 float64_t* H, int32_t rows, int32_t cols, int* &qmatbeg, int* &qmatcnt,
00124 int* &qmatind, double* &qmatval);
00125
00126 inline bool set_time_limit(float64_t seconds)
00127 {
00128 return CPXsetdblparam (env, CPX_PARAM_TILIM, seconds) == 0;
00129 }
00130 inline bool write_problem(char* filename)
00131 {
00132 return CPXwriteprob (env, lp, filename, NULL) == 0;
00133 }
00134
00135 inline bool write_Q(char* filename)
00136 {
00137 #if CPX_VERSION >= 1000 //CPXqpwrite has been deprecated in CPLEX 10
00138 return CPXwriteprob (env, lp, filename, NULL) == 0;
00139 #else
00140 return CPXqpwrite (env, lp, filename) == 0;
00141 #endif
00142 }
00143
00145 inline virtual const char* get_name() const { return "Cplex"; }
00146
00147 protected:
00148 CPXENVptr env;
00149 CPXLPptr lp;
00150 bool lp_initialized;
00151
00152 E_PROB_TYPE problem_type;
00153 };
00154 }
00155 #endif
00156 #endif