# HG changeset patch # User athos # Date 1171461025 0 # Node ID f2ef1aa8189a2b5d2741d435ca77c5bd97a8655f # Parent 72c7075ad5ba219f441f67dfa0653b326daab34a Implemented virtual functions of class LpCplex. diff -r 72c7075ad5ba -r f2ef1aa8189a lemon/lp_cplex.cc --- a/lemon/lp_cplex.cc Mon Feb 12 17:54:36 2007 +0000 +++ b/lemon/lp_cplex.cc Wed Feb 14 13:50:25 2007 +0000 @@ -147,6 +147,13 @@ CPXchgcoef(env, lp, row, col, value); } + LpCplex::Value LpCplex::_getCoeff(int row, int col) + { + LpCplex::Value value; + CPXgetcoef(env, lp, row, col, &value); + return value; + } + void LpCplex::_setColLowerBound(int i, Value value) { int indices[1]; @@ -158,6 +165,13 @@ status = CPXchgbds(env, lp, 1, indices, lu, bd); } + + LpCplex::Value LpCplex::_getColLowerBound(int i) + { + LpCplex::Value x; + CPXgetlb (env, lp, &x, i, i); + return x; + } void LpCplex::_setColUpperBound(int i, Value value) { @@ -170,6 +184,13 @@ status = CPXchgbds(env, lp, 1, indices, lu, bd); } + LpCplex::Value LpCplex::_getColUpperBound(int i) + { + LpCplex::Value x; + CPXgetub (env, lp, &x, i, i); + return x; + } + //This will be easier to implement void LpCplex::_setRowBounds(int i, Value lb, Value ub) { @@ -242,11 +263,45 @@ // // status = CPXchgcoef(env, lp, i, -2, value_rng); // } + void LpCplex::_getRowBounds(int i, Value &lb, Value &ub) + { + char sense; + CPXgetsense(env, lp, &sense,i,i); + lb=-INF; + ub=INF; + switch (sense) + { + case 'L': + CPXgetcoef(env, lp, i, -1, &ub); + break; + case 'G': + CPXgetcoef(env, lp, i, -1, &lb); + break; + case 'E': + CPXgetcoef(env, lp, i, -1, &lb); + ub=lb; + break; + case 'R': + CPXgetcoef(env, lp, i, -1, &lb); + Value x; + CPXgetcoef(env, lp, i, -2, &x); + ub=lb+x; + break; + } + } + void LpCplex::_setObjCoeff(int i, Value obj_coef) { CPXchgcoef(env, lp, -1, i, obj_coef); } + LpCplex::Value LpCplex::_getObjCoeff(int i) + { + Value x; + CPXgetcoef(env, lp, -1, i, &x); + return x; + } + void LpCplex::_clearObj() { for (int i=0;i< CPXgetnumcols(env, lp);++i){ @@ -564,6 +619,14 @@ { CPXchgobjsen(env, lp, CPX_MIN); } + + bool LpCplex::_isMax() + { + if (CPXgetobjsen(env, lp)==CPX_MAX) + return true; + else + return false; + } } //namespace lemon diff -r 72c7075ad5ba -r f2ef1aa8189a lemon/lp_cplex.h --- a/lemon/lp_cplex.h Mon Feb 12 17:54:36 2007 +0000 +++ b/lemon/lp_cplex.h Wed Feb 14 13:50:25 2007 +0000 @@ -55,6 +55,7 @@ virtual LpSolverBase &_newLp(); virtual LpSolverBase &_copyLp(); + virtual int _addCol(); virtual int _addRow(); virtual void _eraseCol(int i); @@ -64,14 +65,21 @@ virtual void _setRowCoeffs(int i, LpRowIterator b, LpRowIterator e); virtual void _setColCoeffs(int i, LpColIterator b, LpColIterator e); virtual void _setCoeff(int row, int col, Value value); + virtual Value _getCoeff(int row, int col); + virtual void _setColLowerBound(int i, Value value); + virtual Value _getColLowerBound(int i); virtual void _setColUpperBound(int i, Value value); + virtual Value _getColUpperBound(int i); + // virtual void _setRowLowerBound(int i, Value value); // virtual void _setRowUpperBound(int i, Value value); virtual void _setRowBounds(int i, Value lower, Value upper); + virtual void _getRowBounds(int i, Value &lb, Value &ub); virtual void _setObjCoeff(int i, Value obj_coef); + virtual Value _getObjCoeff(int i); virtual void _clearObj(); - ///\e + virtual SolveExitStatus _solve(); virtual Value _getPrimal(int i); @@ -87,6 +95,8 @@ virtual void _setMax(); virtual void _setMin(); + virtual bool _isMax(); + }; } //END OF NAMESPACE LEMON