[Lemon-commits] Alpar Juttner: Faster CPLEX problem build-up #422
Lemon HG
hg at lemon.cs.elte.hu
Thu Apr 2 14:10:18 CEST 2015
details: http://lemon.cs.elte.hu/hg/lemon/rev/1ad592289f93
changeset: 1330:1ad592289f93
user: Alpar Juttner <alpar [at] cs.elte.hu>
date: Wed Nov 12 14:11:20 2014 +0100
description:
Faster CPLEX problem build-up #422
diffstat:
lemon/cplex.cc | 41 ++++++++++++++++++++++-------------------
1 files changed, 22 insertions(+), 19 deletions(-)
diffs (60 lines):
diff --git a/lemon/cplex.cc b/lemon/cplex.cc
--- a/lemon/cplex.cc
+++ b/lemon/cplex.cc
@@ -115,34 +115,37 @@
int CplexBase::_addRow(Value lb, ExprIterator b,
ExprIterator e, Value ub) {
int i = CPXgetnumrows(cplexEnv(), _prob);
- if (lb == -INF) {
- const char s = 'L';
- CPXnewrows(cplexEnv(), _prob, 1, &ub, &s, 0, 0);
- } else if (ub == INF) {
- const char s = 'G';
- CPXnewrows(cplexEnv(), _prob, 1, &lb, &s, 0, 0);
- } else if (lb == ub){
- const char s = 'E';
- CPXnewrows(cplexEnv(), _prob, 1, &lb, &s, 0, 0);
- } else {
- const char s = 'R';
- double len = ub - lb;
- CPXnewrows(cplexEnv(), _prob, 1, &lb, &s, &len, 0);
- }
+ int rmatbeg = 0;
+
std::vector<int> indices;
- std::vector<int> rowlist;
std::vector<Value> values;
for(ExprIterator it=b; it!=e; ++it) {
indices.push_back(it->first);
values.push_back(it->second);
- rowlist.push_back(i);
}
- CPXchgcoeflist(cplexEnv(), _prob, values.size(),
- &rowlist.front(), &indices.front(), &values.front());
-
+ if (lb == -INF) {
+ const char s = 'L';
+ CPXaddrows(cplexEnv(), _prob, 0, 1, values.size(), &ub, &s,
+ &rmatbeg, &indices.front(), &values.front(), 0, 0);
+ } else if (ub == INF) {
+ const char s = 'G';
+ CPXaddrows(cplexEnv(), _prob, 0, 1, values.size(), &lb, &s,
+ &rmatbeg, &indices.front(), &values.front(), 0, 0);
+ } else if (lb == ub){
+ const char s = 'E';
+ CPXaddrows(cplexEnv(), _prob, 0, 1, values.size(), &lb, &s,
+ &rmatbeg, &indices.front(), &values.front(), 0, 0);
+ } else {
+ const char s = 'R';
+ double len = ub - lb;
+ CPXaddrows(cplexEnv(), _prob, 0, 1, values.size(), &ub, &s,
+ &rmatbeg, &indices.front(), &values.front(), 0, 0);
+ CPXchgrngval(cplexEnv(), _prob, 1, &i, &len);
+ }
+
return i;
}
More information about the Lemon-commits
mailing list