[Lemon-commits] deba: r3088 - hugo/trunk/lemon
Lemon SVN
svn at lemon.cs.elte.hu
Wed Nov 29 16:01:14 CET 2006
Author: deba
Date: Wed Nov 29 16:01:13 2006
New Revision: 3088
Modified:
hugo/trunk/lemon/lp.h
hugo/trunk/lemon/lp_base.h
hugo/trunk/lemon/lp_cplex.cc
hugo/trunk/lemon/lp_cplex.h
hugo/trunk/lemon/lp_glpk.cc
hugo/trunk/lemon/lp_glpk.h
hugo/trunk/lemon/lp_skeleton.cc
hugo/trunk/lemon/lp_skeleton.h
Log:
modified _setColCoeff and _setRowCoeff parameters
const simplify() for expressions
Modified: hugo/trunk/lemon/lp.h
==============================================================================
--- hugo/trunk/lemon/lp.h (original)
+++ hugo/trunk/lemon/lp.h Wed Nov 29 16:01:13 2006
@@ -28,6 +28,8 @@
#elif HAVE_CPLEX
#include <lemon/lp_cplex.h>
#include <lemon/mip_cplex.h>
+#elif HAVE_SOPLEX
+#include <lemon/lp_soplex.h>
#endif
///\file
@@ -76,6 +78,10 @@
typedef LpCplex Lp;
typedef MipCplex Mip;
const char default_solver_name[]="CPLEX";
+#elif HAVE_SOPLEX
+#define DEFAULT_LP SOPLEX
+ typedef LpSoplex Lp;
+ const char default_solver_name[]="SOPLEX";
#endif
#endif
Modified: hugo/trunk/lemon/lp_base.h
==============================================================================
--- hugo/trunk/lemon/lp_base.h (original)
+++ hugo/trunk/lemon/lp_base.h Wed Nov 29 16:01:13 2006
@@ -32,7 +32,8 @@
///\brief The interface of the LP solver interface.
///\ingroup gen_opt_group
namespace lemon {
-
+
+
///Internal data structure to convert floating id's to fix one's
///\todo This might be implemented to be also usable in other places.
@@ -109,7 +110,7 @@
///or -1 if no index has been inserted before.
int firstIndex() {return _first_index;}
};
-
+
///Common base class for LP solvers
///\todo Much more docs
@@ -128,7 +129,8 @@
///an optimal solution has been found or infeasibility/unboundedness
///has been proved.
SOLVED = 0,
- ///Any other case (including the case when some user specified limit has been exceeded)
+ ///Any other case (including the case when some user specified
+ ///limit has been exceeded)
UNSOLVED = 1
};
@@ -221,6 +223,9 @@
return *this;
}
};
+
+ static int id(const Col& col) { return col.id; }
+
///Refer to a row of the LP.
@@ -245,7 +250,22 @@
bool operator> (Row c) const {return id> c.id;}
bool operator==(Row c) const {return id==c.id;}
bool operator!=(Row c) const {return id!=c.id;}
- };
+ };
+
+ static int id(const Row& row) { return row.id; }
+
+ protected:
+
+ int _lpId(const Col& col) const {
+ return cols.floatingId(id(col));
+ }
+
+ int _lpId(const Row& row) const {
+ return rows.floatingId(id(row));
+ }
+
+
+ public:
///Linear expression of variables and a constant component
@@ -336,6 +356,10 @@
}
}
+ void simplify() const {
+ const_cast<Expr*>(this)->simplify();
+ }
+
///Removes the coefficients closer to zero than \c tolerance.
void simplify(double &tolerance) {
for (Base::iterator i=Base::begin(); i!=Base::end();) {
@@ -415,9 +439,6 @@
typedef Expr::Key Key;
typedef Expr::Value Value;
-// static const Value INF;
-// static const Value NaN;
-
protected:
Expr _expr;
Value _lb,_ub;
@@ -553,6 +574,10 @@
}
}
+ void simplify() const {
+ const_cast<DualExpr*>(this)->simplify();
+ }
+
///Removes the coefficients closer to zero than \c tolerance.
void simplify(double &tolerance) {
for (Base::iterator i=Base::begin(); i!=Base::end();) {
@@ -563,7 +588,6 @@
}
}
-
///Sets all coefficients to 0.
void clear() {
Base::clear();
@@ -596,12 +620,73 @@
};
+ private:
+
+ template <typename _Base>
+ class MappedIterator {
+ public:
+
+ typedef _Base Base;
+
+ typedef typename Base::iterator_category iterator_category;
+ typedef typename Base::difference_type difference_type;
+ typedef const std::pair<int, Value> value_type;
+ typedef value_type reference;
+ class pointer {
+ public:
+ pointer(value_type& _value) : value(_value) {}
+ value_type* operator->() { return &value; }
+ private:
+ value_type value;
+ };
+
+ MappedIterator(const Base& _base, const LpSolverBase& _lp)
+ : base(_base), lp(_lp) {}
+
+ reference operator*() {
+ return std::make_pair(lp._lpId(base->first), base->second);
+ }
+
+ pointer operator->() {
+ return pointer(operator*());
+ }
+
+ MappedIterator& operator++() {
+ ++base;
+ return *this;
+ }
+
+ MappedIterator& operator++(int) {
+ MappedIterator tmp(*this);
+ ++base;
+ return tmp;
+ }
+
+ bool operator==(const MappedIterator& it) const {
+ return base == it.base;
+ }
+
+ bool operator!=(const MappedIterator& it) const {
+ return base != it.base;
+ }
+
+ private:
+ Base base;
+ const LpSolverBase& lp;
+ };
+
protected:
+ /// STL compatible iterator for lp col
+ typedef MappedIterator<Expr::const_iterator> LpRowIterator;
+ /// STL compatible iterator for lp row
+ typedef MappedIterator<DualExpr::const_iterator> LpColIterator;
+
//Abstract virtual functions
virtual LpSolverBase &_newLp() = 0;
virtual LpSolverBase &_copyLp(){
- ///\todo This should be implemented here, too, when we have problem retrieving routines. It can be overriden.
+ ///\todo This should be implemented here, too, when we have
+ ///problem retrieving routines. It can be overriden.
//Starting:
LpSolverBase & newlp(_newLp());
@@ -613,16 +698,10 @@
virtual int _addRow() = 0;
virtual void _eraseCol(int col) = 0;
virtual void _eraseRow(int row) = 0;
- virtual void _getColName(int col, std::string & name) = 0;
+ virtual void _getColName(int col, std::string & name) = 0;
virtual void _setColName(int col, const std::string & name) = 0;
- virtual void _setRowCoeffs(int i,
- int length,
- int const * indices,
- Value const * values ) = 0;
- virtual void _setColCoeffs(int i,
- int length,
- int const * indices,
- Value const * values ) = 0;
+ virtual void _setRowCoeffs(int i, LpRowIterator b, LpRowIterator e) = 0;
+ virtual void _setColCoeffs(int i, LpColIterator b, LpColIterator e) = 0;
virtual void _setCoeff(int row, int col, Value value) = 0;
virtual void _setColLowerBound(int i, Value value) = 0;
virtual void _setColUpperBound(int i, Value value) = 0;
@@ -631,9 +710,7 @@
virtual void _setRowBounds(int i, Value lower, Value upper) = 0;
virtual void _setObjCoeff(int i, Value obj_coef) = 0;
virtual void _clearObj()=0;
-// virtual void _setObj(int length,
-// int const * indices,
-// Value const * values ) = 0;
+
virtual SolveExitStatus _solve() = 0;
virtual Value _getPrimal(int i) = 0;
virtual Value _getDual(int i) = 0;
@@ -652,10 +729,7 @@
//Constant component of the objective function
Value obj_const_comp;
-
-
-
-
+
public:
///\e
@@ -744,17 +818,9 @@
///\param e is a dual linear expression (see \ref DualExpr)
///a better one.
void col(Col c,const DualExpr &e) {
- std::vector<int> indices;
- std::vector<Value> values;
- indices.push_back(0);
- values.push_back(0);
- for(DualExpr::const_iterator i=e.begin(); i!=e.end(); ++i)
- if((*i).second!=0) {
- indices.push_back(rows.floatingId((*i).first.id));
- values.push_back((*i).second);
- }
- _setColCoeffs(cols.floatingId(c.id),indices.size()-1,
- &indices[0],&values[0]);
+ e.simplify();
+ _setColCoeffs(_lpId(c), LpColIterator(e.begin(), *this),
+ LpColIterator(e.end(), *this));
}
///Add a new column to the LP
@@ -849,20 +915,12 @@
///\todo Option to control whether a constraint with a single variable is
///added or not.
void row(Row r, Value l,const Expr &e, Value u) {
- std::vector<int> indices;
- std::vector<Value> values;
- indices.push_back(0);
- values.push_back(0);
- for(Expr::const_iterator i=e.begin(); i!=e.end(); ++i)
- if((*i).second!=0) { ///\bug EPSILON would be necessary here!!!
- indices.push_back(cols.floatingId((*i).first.id));
- values.push_back((*i).second);
- }
- _setRowCoeffs(rows.floatingId(r.id),indices.size()-1,
- &indices[0],&values[0]);
-// _setRowLowerBound(rows.floatingId(r.id),l-e.constComp());
-// _setRowUpperBound(rows.floatingId(r.id),u-e.constComp());
- _setRowBounds(rows.floatingId(r.id),l-e.constComp(),u-e.constComp());
+ e.simplify();
+ _setRowCoeffs(_lpId(r), LpRowIterator(e.begin(), *this),
+ LpRowIterator(e.end(), *this));
+// _setRowLowerBound(_lpId(r),l-e.constComp());
+// _setRowUpperBound(_lpId(r),u-e.constComp());
+ _setRowBounds(_lpId(r),l-e.constComp(),u-e.constComp());
}
///Set a row (i.e a constraint) of the LP
@@ -870,10 +928,8 @@
///\param r is the row to be modified
///\param c is a linear expression (see \ref Constr)
void row(Row r, const Constr &c) {
- row(r,
- c.lowerBounded()?c.lowerBound():-INF,
- c.expr(),
- c.upperBounded()?c.upperBound():INF);
+ row(r, c.lowerBounded()?c.lowerBound():-INF,
+ c.expr(), c.upperBounded()?c.upperBound():INF);
}
///Add a new row (i.e a new constraint) to the LP
@@ -904,7 +960,7 @@
///\param c is the coloumn to be deleted
///\todo Please check this
void eraseCol(Col c) {
- _eraseCol(cols.floatingId(c.id));
+ _eraseCol(_lpId(c));
cols.erase(c.id);
}
///Erase a row (i.e a constraint) from the LP
@@ -912,7 +968,7 @@
///\param r is the row to be deleted
///\todo Please check this
void eraseRow(Row r) {
- _eraseRow(rows.floatingId(r.id));
+ _eraseRow(_lpId(r));
rows.erase(r.id);
}
@@ -922,7 +978,7 @@
///\return The name of the colunm
std::string colName(Col c){
std::string name;
- _getColName(cols.floatingId(c.id), name);
+ _getColName(_lpId(c), name);
return name;
}
@@ -930,8 +986,8 @@
///\param c is the coresponding coloumn
///\param name The name to be given
- void colName(Col c, const std::string & name){
- _setColName(cols.floatingId(c.id), name);
+ void colName(Col c, const std::string& name){
+ _setColName(_lpId(c), name);
}
/// Set an element of the coefficient matrix of the LP
@@ -941,7 +997,7 @@
///\param val is the new value of the coefficient
void coeff(Row r, Col c, Value val){
- _setCoeff(rows.floatingId(r.id),cols.floatingId(c.id), val);
+ _setCoeff(_lpId(r),_lpId(c), val);
}
/// Set the lower bound of a column (i.e a variable)
@@ -950,7 +1006,7 @@
/// extended number of type Value, i.e. a finite number of type
/// Value or -\ref INF.
void colLowerBound(Col c, Value value) {
- _setColLowerBound(cols.floatingId(c.id),value);
+ _setColLowerBound(_lpId(c),value);
}
///\brief Set the lower bound of several columns
@@ -996,7 +1052,7 @@
/// extended number of type Value, i.e. a finite number of type
/// Value or \ref INF.
void colUpperBound(Col c, Value value) {
- _setColUpperBound(cols.floatingId(c.id),value);
+ _setColUpperBound(_lpId(c),value);
};
///\brief Set the lower bound of several columns
@@ -1043,8 +1099,8 @@
/// extended number of type Value, i.e. a finite number of type
/// Value, -\ref INF or \ref INF.
void colBounds(Col c, Value lower, Value upper) {
- _setColLowerBound(cols.floatingId(c.id),lower);
- _setColUpperBound(cols.floatingId(c.id),upper);
+ _setColLowerBound(_lpId(c),lower);
+ _setColUpperBound(_lpId(c),upper);
}
///\brief Set the lower and the upper bound of several columns
@@ -1091,7 +1147,7 @@
// /// extended number of type Value, i.e. a finite number of type
// /// Value or -\ref INF.
// void rowLowerBound(Row r, Value value) {
-// _setRowLowerBound(rows.floatingId(r.id),value);
+// _setRowLowerBound(_lpId(r),value);
// };
// /// Set the upper bound of a row (i.e a constraint)
@@ -1099,7 +1155,7 @@
// /// extended number of type Value, i.e. a finite number of type
// /// Value or \ref INF.
// void rowUpperBound(Row r, Value value) {
-// _setRowUpperBound(rows.floatingId(r.id),value);
+// _setRowUpperBound(_lpId(r),value);
// };
/// Set the lower and the upper bounds of a row (i.e a constraint)
@@ -1109,12 +1165,12 @@
/// extended number of type Value, i.e. a finite number of type
/// Value, -\ref INF or \ref INF.
void rowBounds(Row c, Value lower, Value upper) {
- _setRowBounds(rows.floatingId(c.id),lower, upper);
- // _setRowUpperBound(rows.floatingId(c.id),upper);
+ _setRowBounds(_lpId(c),lower, upper);
+ // _setRowUpperBound(_lpId(c),upper);
}
///Set an element of the objective function
- void objCoeff(Col c, Value v) {_setObjCoeff(cols.floatingId(c.id),v); };
+ void objCoeff(Col c, Value v) {_setObjCoeff(_lpId(c),v); };
///Set the objective function
///\param e is a linear expression of type \ref Expr.
@@ -1170,13 +1226,13 @@
}
///\e
- Value primal(Col c) { return _getPrimal(cols.floatingId(c.id)); }
+ Value primal(Col c) { return _getPrimal(_lpId(c)); }
///\e
- Value dual(Row r) { return _getDual(rows.floatingId(r.id)); }
+ Value dual(Row r) { return _getDual(_lpId(r)); }
///\e
- bool isBasicCol(Col c) { return _isBasicCol(cols.floatingId(c.id)); }
+ bool isBasicCol(Col c) { return _isBasicCol(_lpId(c)); }
///\e
@@ -1213,14 +1269,14 @@
///
///Sets the type of the given coloumn to the given type.
void colType(Col c, ColTypes col_type) {
- _colType(cols.floatingId(c.id),col_type);
+ _colType(_lpId(c),col_type);
}
///Gives back the type of the column.
///
///Gives back the type of the column.
ColTypes colType(Col c){
- return _colType(cols.floatingId(c.id));
+ return _colType(_lpId(c));
}
///Sets the type of the given Col to integer or remove that property.
@@ -1440,7 +1496,7 @@
///\relates LpSolverBase::DualExpr
///
inline LpSolverBase::DualExpr operator+(const LpSolverBase::DualExpr &a,
- const LpSolverBase::DualExpr &b)
+ const LpSolverBase::DualExpr &b)
{
LpSolverBase::DualExpr tmp(a);
tmp+=b;
@@ -1451,7 +1507,7 @@
///\relates LpSolverBase::DualExpr
///
inline LpSolverBase::DualExpr operator-(const LpSolverBase::DualExpr &a,
- const LpSolverBase::DualExpr &b)
+ const LpSolverBase::DualExpr &b)
{
LpSolverBase::DualExpr tmp(a);
tmp-=b;
@@ -1462,7 +1518,7 @@
///\relates LpSolverBase::DualExpr
///
inline LpSolverBase::DualExpr operator*(const LpSolverBase::DualExpr &a,
- const LpSolverBase::Value &b)
+ const LpSolverBase::Value &b)
{
LpSolverBase::DualExpr tmp(a);
tmp*=b;
@@ -1474,7 +1530,7 @@
///\relates LpSolverBase::DualExpr
///
inline LpSolverBase::DualExpr operator*(const LpSolverBase::Value &a,
- const LpSolverBase::DualExpr &b)
+ const LpSolverBase::DualExpr &b)
{
LpSolverBase::DualExpr tmp(b);
tmp*=a;
@@ -1485,7 +1541,7 @@
///\relates LpSolverBase::DualExpr
///
inline LpSolverBase::DualExpr operator/(const LpSolverBase::DualExpr &a,
- const LpSolverBase::Value &b)
+ const LpSolverBase::Value &b)
{
LpSolverBase::DualExpr tmp(a);
tmp/=b;
Modified: hugo/trunk/lemon/lp_cplex.cc
==============================================================================
--- hugo/trunk/lemon/lp_cplex.cc (original)
+++ hugo/trunk/lemon/lp_cplex.cc Wed Nov 29 16:01:13 2006
@@ -109,38 +109,36 @@
}
///\warning Data at index 0 is ignored in the arrays.
- void LpCplex::_setRowCoeffs(int i,
- int length,
- int const * indices,
- Value const * values )
- {
- int rowlist[length+1];
- int* p=rowlist;
- for (int k=1;k<=length;++k){
- rowlist[k]=i;
- }
- status = CPXchgcoeflist(env, lp,
- length,
- p+1,
- const_cast<int * >(indices+1),
- const_cast<Value * >(values+1));
+ void LpCplex::_setRowCoeffs(int i, LpRowIterator b, LpRowIterator e)
+ {
+ std::vector<int> indices;
+ std::vector<int> rowlist;
+ std::vector<Value> values;
+
+ for(LpRowIterator it=b; it!=e; ++it) {
+ indices.push_back(it->first);
+ values.push_back(it->second);
+ rowlist.push_back(i);
+ }
+
+ status = CPXchgcoeflist(env, lp, values.size(),
+ &rowlist[0], &indices[0], &values[0]);
}
- void LpCplex::_setColCoeffs(int i,
- int length,
- int const * indices,
- Value const * values)
- {
- int collist[length+1];
- int* p=collist;
- for (int k=1;k<=length;++k){
- collist[k]=i;
- }
- status = CPXchgcoeflist(env, lp,
- length,
- const_cast<int * >(indices+1),
- p+1,
- const_cast<Value * >(values+1));
+ void LpCplex::_setColCoeffs(int i, LpColIterator b, LpColIterator e)
+ {
+ std::vector<int> indices;
+ std::vector<int> collist;
+ std::vector<Value> values;
+
+ for(LpColIterator it=b; it!=e; ++it) {
+ indices.push_back(it->first);
+ values.push_back(it->second);
+ collist.push_back(i);
+ }
+
+ status = CPXchgcoeflist(env, lp, values.size(),
+ &indices[0], &collist[0], &values[0]);
}
void LpCplex::_setCoeff(int row, int col, Value value)
Modified: hugo/trunk/lemon/lp_cplex.h
==============================================================================
--- hugo/trunk/lemon/lp_cplex.h (original)
+++ hugo/trunk/lemon/lp_cplex.h Wed Nov 29 16:01:13 2006
@@ -61,14 +61,8 @@
virtual void _eraseRow(int i);
virtual void _getColName(int col, std::string & name);
virtual void _setColName(int col, const std::string & name);
- virtual void _setRowCoeffs(int i,
- int length,
- const int * indices,
- const Value * values );
- virtual void _setColCoeffs(int i,
- int length,
- const int * indices,
- const Value * values);
+ 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 void _setColLowerBound(int i, Value value);
virtual void _setColUpperBound(int i, Value value);
Modified: hugo/trunk/lemon/lp_glpk.cc
==============================================================================
--- hugo/trunk/lemon/lp_glpk.cc (original)
+++ hugo/trunk/lemon/lp_glpk.cc Wed Nov 29 16:01:13 2006
@@ -116,60 +116,96 @@
lpx_set_col_name(lp,col,const_cast<char*>(name.c_str()));
}
- void LpGlpk::_setRowCoeffs(int i,
- int length,
- const int * indices,
- const Value * values )
- {
- lpx_set_mat_row(lp, i, length,
- const_cast<int * >(indices) ,
- const_cast<Value * >(values));
+ void LpGlpk::_setRowCoeffs(int i, LpRowIterator b, LpRowIterator e)
+ {
+ std::vector<int> indices;
+ std::vector<Value> values;
+
+ indices.push_back(0);
+ values.push_back(0);
+
+ for(LpRowIterator it=b; it!=e; ++it) {
+ indices.push_back(it->first);
+ values.push_back(it->second);
+ }
+
+ lpx_set_mat_row(lp, i, values.size() - 1, &indices[0], &values[0]);
}
- void LpGlpk::_setColCoeffs(int i,
- int length,
- const int * indices,
- const Value * values)
- {
- lpx_set_mat_col(lp, i, length,
- const_cast<int * >(indices),
- const_cast<Value * >(values));
+ void LpGlpk::_setColCoeffs(int i, LpColIterator b, LpColIterator e) {
+
+ std::vector<int> indices;
+ std::vector<Value> values;
+
+ indices.push_back(0);
+ values.push_back(0);
+
+ for(LpColIterator it=b; it!=e; ++it) {
+ indices.push_back(it->first);
+ values.push_back(it->second);
+ }
+
+ lpx_set_mat_col(lp, i, values.size() - 1, &indices[0], &values[0]);
}
void LpGlpk::_setCoeff(int row, int col, Value value)
{
- ///FIXME Of course this is not efficient at all, but GLPK knows not more.
- // First approach: get one row, apply changes and set it again
- //(one idea to improve this: maybe it is better to do this with 1 coloumn)
-
- int mem_length=2+lpx_get_num_cols(lp);
- int* indices = new int[mem_length];
- Value* values = new Value[mem_length];
-
- int length=lpx_get_mat_row(lp, row, indices, values);
+ if (lpx_get_num_cols(lp) < lpx_get_num_rows(lp)) {
- //The following code does not suppose that the elements of the array indices are sorted
- int i=1;
- bool found=false;
- while (i <= length && !found){
- if (indices[i]==col){
- found = true;
- values[i]=value;
- }
- ++i;
- }
- if (!found){
- ++length;
- indices[length]=col;
- values[length]=value;
- }
+ int length=lpx_get_mat_row(lp, row, 0, 0);
+
+ std::vector<int> indices(length + 2);
+ std::vector<Value> values(length + 2);
+
+ lpx_get_mat_row(lp, row, &indices[0], &values[0]);
+
+ //The following code does not suppose that the elements of the
+ //array indices are sorted
+ bool found=false;
+ for (int i = 1; i <= length; ++i) {
+ if (indices[i]==col){
+ found=true;
+ values[i]=value;
+ break;
+ }
+ }
+ if (!found){
+ ++length;
+ indices[length]=col;
+ values[length]=value;
+ }
- lpx_set_mat_row(lp, row, length, indices, values);
- delete [] indices;
- delete [] values;
+ lpx_set_mat_row(lp, row, length, &indices[0], &values[0]);
+
+ } else {
+
+ int length=lpx_get_mat_col(lp, col, 0, 0);
+
+ std::vector<int> indices(length + 2);
+ std::vector<Value> values(length + 2);
+
+ lpx_get_mat_col(lp, col, &indices[0], &values[0]);
+
+ //The following code does not suppose that the elements of the
+ //array indices are sorted
+ bool found=false;
+ for (int i = 1; i <= length; ++i) {
+ if (indices[i]==col){
+ found=true;
+ values[i]=value;
+ break;
+ }
+ }
+ if (!found){
+ ++length;
+ indices[length]=row;
+ values[length]=value;
+ }
+ lpx_set_mat_col(lp, col, length, &indices[0], &values[0]);
+ }
}
void LpGlpk::_setColLowerBound(int i, Value lo)
Modified: hugo/trunk/lemon/lp_glpk.h
==============================================================================
--- hugo/trunk/lemon/lp_glpk.h (original)
+++ hugo/trunk/lemon/lp_glpk.h Wed Nov 29 16:01:13 2006
@@ -56,14 +56,8 @@
virtual void _eraseRow(int i);
virtual void _getColName(int col, std::string & name);
virtual void _setColName(int col, const std::string & name);
- virtual void _setRowCoeffs(int i,
- int length,
- const int * indices,
- const Value * values );
- virtual void _setColCoeffs(int i,
- int length,
- const int * indices,
- const Value * values);
+ 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 void _setColLowerBound(int i, Value value);
virtual void _setColUpperBound(int i, Value value);
Modified: hugo/trunk/lemon/lp_skeleton.cc
==============================================================================
--- hugo/trunk/lemon/lp_skeleton.cc (original)
+++ hugo/trunk/lemon/lp_skeleton.cc Wed Nov 29 16:01:13 2006
@@ -58,18 +58,10 @@
}
- void LpSkeleton::_setRowCoeffs(int,
- int,
- int const *,
- Value const *)
- {
+ void LpSkeleton::_setRowCoeffs(int, LpRowIterator, LpRowIterator) {
}
- void LpSkeleton::_setColCoeffs(int,
- int,
- int const *,
- Value const *)
- {
+ void LpSkeleton::_setColCoeffs(int, LpColIterator, LpColIterator) {
}
void LpSkeleton::_setCoeff(int, int, Value )
Modified: hugo/trunk/lemon/lp_skeleton.h
==============================================================================
--- hugo/trunk/lemon/lp_skeleton.h (original)
+++ hugo/trunk/lemon/lp_skeleton.h Wed Nov 29 16:01:13 2006
@@ -43,26 +43,14 @@
/// \e
virtual void _eraseRow(int i);
/// \e
- virtual void _getColName(int col, std::string & name);
+ virtual void _getColName(int col, std::string & name);
/// \e
virtual void _setColName(int col, const std::string & name);
/// \e
-
- /// \warning Arrays are indexed from 1 (datum at index 0 is ignored)
- ///
- virtual void _setRowCoeffs(int i,
- int length,
- int const * indices,
- Value const * values );
+ virtual void _setRowCoeffs(int i, LpRowIterator b, LpRowIterator e);
/// \e
-
- /// \warning Arrays are indexed from 1 (datum at index 0 is ignored)
- ///
- virtual void _setColCoeffs(int i,
- int length,
- int const * indices,
- Value const * values );
+ virtual void _setColCoeffs(int i, LpColIterator b, LpColIterator e);
/// Set one element of the coefficient matrix
virtual void _setCoeff(int row, int col, Value value);
More information about the Lemon-commits
mailing list