lemon/glpk.cc
changeset 964 2b6bffe0e7e8
parent 746 e4554cd6b2bf
child 989 38e1d4383262
     1.1 --- a/lemon/glpk.cc	Tue Dec 20 17:44:38 2011 +0100
     1.2 +++ b/lemon/glpk.cc	Tue Dec 20 18:15:14 2011 +0100
     1.3 @@ -2,7 +2,7 @@
     1.4   *
     1.5   * This file is a part of LEMON, a generic C++ optimization library.
     1.6   *
     1.7 - * Copyright (C) 2003-2009
     1.8 + * Copyright (C) 2003-2010
     1.9   * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
    1.10   * (Egervary Research Group on Combinatorial Optimization, EGRES).
    1.11   *
    1.12 @@ -59,6 +59,42 @@
    1.13      return i;
    1.14    }
    1.15  
    1.16 +  int GlpkBase::_addRow(Value lo, ExprIterator b,
    1.17 +                        ExprIterator e, Value up) {
    1.18 +    int i = glp_add_rows(lp, 1);
    1.19 +
    1.20 +    if (lo == -INF) {
    1.21 +      if (up == INF) {
    1.22 +        glp_set_row_bnds(lp, i, GLP_FR, lo, up);
    1.23 +      } else {
    1.24 +        glp_set_row_bnds(lp, i, GLP_UP, lo, up);
    1.25 +      }
    1.26 +    } else {
    1.27 +      if (up == INF) {
    1.28 +        glp_set_row_bnds(lp, i, GLP_LO, lo, up);
    1.29 +      } else if (lo != up) {
    1.30 +        glp_set_row_bnds(lp, i, GLP_DB, lo, up);
    1.31 +      } else {
    1.32 +        glp_set_row_bnds(lp, i, GLP_FX, lo, up);
    1.33 +      }
    1.34 +    }
    1.35 +
    1.36 +    std::vector<int> indexes;
    1.37 +    std::vector<Value> values;
    1.38 +
    1.39 +    indexes.push_back(0);
    1.40 +    values.push_back(0);
    1.41 +
    1.42 +    for(ExprIterator it = b; it != e; ++it) {
    1.43 +      indexes.push_back(it->first);
    1.44 +      values.push_back(it->second);
    1.45 +    }
    1.46 +
    1.47 +    glp_set_mat_row(lp, i, values.size() - 1,
    1.48 +                    &indexes.front(), &values.front());
    1.49 +    return i;
    1.50 +  }
    1.51 +
    1.52    void GlpkBase::_eraseCol(int i) {
    1.53      int ca[2];
    1.54      ca[1] = i;