SHOGUN
v3.0.0
Main Page
Related Pages
Modules
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
src
shogun
mathematics
Cplex.h
Go to the documentation of this file.
1
/*
2
* This program is free software; you can redistribute it and/or modify
3
* it under the terms of the GNU General Public License as published by
4
* the Free Software Foundation; either version 3 of the License, or
5
* (at your option) any later version.
6
*
7
* Written (W) 2006-2009 Soeren Sonnenburg
8
* Copyright (C) 2006-2009 Fraunhofer Institute FIRST and Max-Planck-Society
9
*/
10
11
#ifndef CCPLEX_H__
12
#define CCPLEX_H__
13
14
#include <
shogun/lib/config.h
>
15
16
#ifdef USE_CPLEX
17
extern
"C"
{
18
#include <ilcplex/cplex.h>
19
}
20
21
#include <
shogun/lib/common.h
>
22
#include <
shogun/base/SGObject.h
>
23
24
#include <
shogun/features/SparseFeatures.h
>
25
#include <
shogun/labels/BinaryLabels.h
>
26
27
namespace
shogun
28
{
29
enum
E_PROB_TYPE
30
{
31
E_LINEAR
,
32
E_QP
33
};
34
42
class
CCplex
:
public
CSGObject
43
{
44
public
:
45
46
CCplex
();
47
virtual
~CCplex
();
48
50
bool
init
(
E_PROB_TYPE
t, int32_t timeout=60);
51
bool
cleanup
();
52
53
// A = [ E Z_w Z_x ] dim(A)=(num_dim+1, num_dim+1 + num_zero + num_bound)
54
// (+1 for bias!)
55
bool
setup_subgradientlpm_QP
(
56
float64_t
C,
CBinaryLabels
* labels,
CSparseFeatures<float64_t>
* features,
57
int32_t* idx_bound, int32_t num_bound, int32_t* w_zero,
58
int32_t num_zero,
float64_t
* vee, int32_t num_dim,
bool
use_bias);
59
60
bool
setup_lpboost
(
float64_t
C, int32_t num_cols);
61
bool
add_lpboost_constraint
(
62
float64_t
factor,
SGSparseVectorEntry<float64_t>
* h, int32_t len,
63
int32_t ulen,
CBinaryLabels
* label);
64
65
// given N sparse inputs x_i, and corresponding labels y_i i=0...N-1
66
// create the following 1-norm SVM problem & transfer to cplex
67
//
69
// min_w sum_{i=0}^N ( w^+_i + w^-_i) + C \sum_{i=0}^N \xi_i
70
// w=[w^+ w^-]
71
// b, xi
72
//
73
// -y_i((w^+-w^-)^T x_i + b)-xi_i <= -1
74
// xi_i >= 0
75
// w_i >= 0 forall i=1...N
77
// min f^x
78
// Ax <= b
79
// -x <= 0
80
//
81
// lb= [ -inf, //b
82
// 2*dims [0], //w
83
// num_train [0] //xi
84
// ]
85
//
86
// ub= [ inf, //b
87
// 2*dims [inf], //w
88
// num_train [inf] //xi
89
// ]
90
//
91
// f= [0,2*dim[1], num_train*C]
92
// A= [-y', // b
93
// -y_ix_i // w_+
94
// +y_ix_i // w_-
95
// -1 //xi
96
// ]
97
//
98
// dim(A)=(n,1+2*dim+n)
99
//
100
// b = -1 -1 -1 -1 ...
101
bool
setup_lpm
(
102
float64_t
C,
CSparseFeatures<float64_t>
* x,
CBinaryLabels
* y,
bool
use_bias);
103
104
// call this to setup linear part
105
//
106
// setup lp, to minimize
107
// objective[0]*x_0 ... objective[cols-1]*x_{cols-1}
108
// w.r.t. x
109
// s.t. constraint_mat*x <= rhs
110
// lb[i] <= x[i] <= ub[i] for all i
111
bool
setup_lp
(
112
float64_t
* objective,
float64_t
* constraints_mat, int32_t rows,
113
int32_t cols,
float64_t
* rhs,
float64_t
* lb,
float64_t
* ub);
114
115
116
// call this to setup quadratic part H
117
// x'*H*x
118
// call setup_lp before (to setup the linear part / linear constraints)
119
bool
setup_qp
(
float64_t
*
H
, int32_t dim);
120
bool
optimize
(
float64_t
* sol,
float64_t
* lambda=NULL);
121
122
bool
dense_to_cplex_sparse
(
123
float64_t
* H, int32_t rows, int32_t cols,
int
* &qmatbeg,
int
* &qmatcnt,
124
int
* &qmatind,
double
* &qmatval);
125
126
inline
bool
set_time_limit
(
float64_t
seconds)
127
{
128
return
CPXsetdblparam (
env
, CPX_PARAM_TILIM, seconds) == 0;
129
}
130
inline
bool
write_problem
(
char
* filename)
131
{
132
return
CPXwriteprob (
env
,
lp
, filename, NULL) == 0;
133
}
134
135
inline
bool
write_Q
(
char
* filename)
136
{
137
#if CPX_VERSION >= 1000 //CPXqpwrite has been deprecated in CPLEX 10
138
return
CPXwriteprob (
env
,
lp
, filename, NULL) == 0;
139
#else
140
return
CPXqpwrite (
env
,
lp
, filename) == 0;
141
#endif
142
}
143
145
virtual
const
char
*
get_name
()
const
{
return
"Cplex"
; }
146
147
protected
:
148
CPXENVptr
env
;
149
CPXLPptr
lp
;
150
bool
lp_initialized
;
151
152
E_PROB_TYPE
problem_type
;
153
};
154
}
155
#endif
156
#endif
SHOGUN
Machine Learning Toolbox - Documentation