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