54 } |
54 } |
55 |
55 |
56 int GlpkBase::_addRow() { |
56 int GlpkBase::_addRow() { |
57 int i = glp_add_rows(lp, 1); |
57 int i = glp_add_rows(lp, 1); |
58 glp_set_row_bnds(lp, i, GLP_FR, 0.0, 0.0); |
58 glp_set_row_bnds(lp, i, GLP_FR, 0.0, 0.0); |
|
59 return i; |
|
60 } |
|
61 |
|
62 int GlpkBase::_addRow(Value lo, ExprIterator b, |
|
63 ExprIterator e, Value up) { |
|
64 int i = glp_add_rows(lp, 1); |
|
65 |
|
66 if (lo == -INF) { |
|
67 if (up == INF) { |
|
68 glp_set_row_bnds(lp, i, GLP_FR, lo, up); |
|
69 } else { |
|
70 glp_set_row_bnds(lp, i, GLP_UP, lo, up); |
|
71 } |
|
72 } else { |
|
73 if (up == INF) { |
|
74 glp_set_row_bnds(lp, i, GLP_LO, lo, up); |
|
75 } else if (lo != up) { |
|
76 glp_set_row_bnds(lp, i, GLP_DB, lo, up); |
|
77 } else { |
|
78 glp_set_row_bnds(lp, i, GLP_FX, lo, up); |
|
79 } |
|
80 } |
|
81 |
|
82 std::vector<int> indexes; |
|
83 std::vector<Value> values; |
|
84 |
|
85 indexes.push_back(0); |
|
86 values.push_back(0); |
|
87 |
|
88 for(ExprIterator it = b; it != e; ++it) { |
|
89 indexes.push_back(it->first); |
|
90 values.push_back(it->second); |
|
91 } |
|
92 |
|
93 glp_set_mat_row(lp, i, values.size() - 1, |
|
94 &indexes.front(), &values.front()); |
59 return i; |
95 return i; |
60 } |
96 } |
61 |
97 |
62 void GlpkBase::_eraseCol(int i) { |
98 void GlpkBase::_eraseCol(int i) { |
63 int ca[2]; |
99 int ca[2]; |