Skip to content

Commit 05c430e

Browse files
committed
Pass globaldom to some lprelaxation functions
1 parent ec1c4cc commit 05c430e

File tree

3 files changed

+23
-19
lines changed

3 files changed

+23
-19
lines changed

highs/mip/HighsLpRelaxation.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,30 +137,32 @@ double HighsLpRelaxation::LpRow::getMaxAbsVal(
137137
return 0.0;
138138
}
139139

140-
double HighsLpRelaxation::slackLower(HighsInt row) const {
140+
double HighsLpRelaxation::slackLower(HighsInt row,
141+
const HighsDomain& globaldom) const {
141142
switch (lprows[row].origin) {
142143
case LpRow::kCutPool:
143144
assert(lprows[row].cutpool <= mipsolver.mipdata_->cutpools.size());
144-
return mipsolver.mipdata_->domain.getMinCutActivity(
145+
return globaldom.getMinCutActivity(
145146
mipsolver.mipdata_->cutpools[lprows[row].cutpool], lprows[row].index);
146147
case LpRow::kModel:
147148
double rowlower = rowLower(row);
148149
if (rowlower != -kHighsInf) return rowlower;
149-
return mipsolver.mipdata_->domain.getMinActivity(lprows[row].index);
150+
return globaldom.getMinActivity(lprows[row].index);
150151
};
151152

152153
assert(false);
153154
return -kHighsInf;
154155
}
155156

156-
double HighsLpRelaxation::slackUpper(HighsInt row) const {
157+
double HighsLpRelaxation::slackUpper(HighsInt row,
158+
const HighsDomain& globaldom) const {
157159
double rowupper = rowUpper(row);
158160
switch (lprows[row].origin) {
159161
case LpRow::kCutPool:
160162
return rowupper;
161163
case LpRow::kModel:
162164
if (rowupper != kHighsInf) return rowupper;
163-
return mipsolver.mipdata_->domain.getMaxActivity(lprows[row].index);
165+
return globaldom.getMaxActivity(lprows[row].index);
164166
};
165167

166168
assert(false);

highs/mip/HighsLpRelaxation.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ class HighsLpRelaxation {
187187

188188
const HighsSolution& getSolution() const { return lpsolver.getSolution(); }
189189

190-
double slackUpper(HighsInt row) const;
190+
double slackUpper(HighsInt row, const HighsDomain& globaldom) const;
191191

192-
double slackLower(HighsInt row) const;
192+
double slackLower(HighsInt row, const HighsDomain& globaldom) const;
193193

194194
double rowLower(HighsInt row) const {
195195
return lpsolver.getLp().row_lower_[row];
@@ -199,16 +199,16 @@ class HighsLpRelaxation {
199199
return lpsolver.getLp().row_upper_[row];
200200
}
201201

202-
double colLower(HighsInt col) const {
202+
double colLower(HighsInt col, const HighsDomain& globaldom) const {
203203
return col < lpsolver.getLp().num_col_
204204
? lpsolver.getLp().col_lower_[col]
205-
: slackLower(col - lpsolver.getLp().num_col_);
205+
: slackLower(col - lpsolver.getLp().num_col_, globaldom);
206206
}
207207

208-
double colUpper(HighsInt col) const {
208+
double colUpper(HighsInt col, const HighsDomain& globaldom) const {
209209
return col < lpsolver.getLp().num_col_
210210
? lpsolver.getLp().col_upper_[col]
211-
: slackUpper(col - lpsolver.getLp().num_col_);
211+
: slackUpper(col - lpsolver.getLp().num_col_, globaldom);
212212
}
213213

214214
bool isColIntegral(HighsInt col) const {

highs/mip/HighsTransformedLp.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ HighsTransformedLp::HighsTransformedLp(const HighsLpRelaxation& lprelaxation,
110110
HighsInt indexOffset = mipsolver.numCol();
111111
for (HighsInt row = 0; row != numLpRow; ++row) {
112112
HighsInt slackIndex = indexOffset + row;
113-
double bestub = lprelaxation.slackUpper(row);
114-
double bestlb = lprelaxation.slackLower(row);
113+
double bestub = lprelaxation.slackUpper(row, globaldom_);
114+
double bestlb = lprelaxation.slackLower(row, globaldom_);
115115

116116
if (bestlb == bestub) continue;
117117

@@ -145,13 +145,15 @@ bool HighsTransformedLp::transform(std::vector<double>& vals,
145145
HighsInt numNz = inds.size();
146146

147147
auto getLb = [&](HighsInt col) {
148-
return (col < slackOffset ? globaldom_.col_lower_[col]
149-
: lprelaxation.slackLower(col - slackOffset));
148+
return (col < slackOffset
149+
? globaldom_.col_lower_[col]
150+
: lprelaxation.slackLower(col - slackOffset, globaldom_));
150151
};
151152

152153
auto getUb = [&](HighsInt col) {
153-
return (col < slackOffset ? globaldom_.col_upper_[col]
154-
: lprelaxation.slackUpper(col - slackOffset));
154+
return (col < slackOffset
155+
? globaldom_.col_upper_[col]
156+
: lprelaxation.slackUpper(col - slackOffset, globaldom_));
155157
};
156158

157159
auto remove = [&](HighsInt position) {
@@ -479,7 +481,7 @@ bool HighsTransformedLp::untransform(std::vector<double>& vals,
479481
vectorsum.add(col, vals[i]);
480482
} else {
481483
HighsInt row = col - slackOffset;
482-
tmpRhs += vals[i] * lprelaxation.slackLower(row);
484+
tmpRhs += vals[i] * lprelaxation.slackLower(row, globaldom_);
483485

484486
HighsInt rowlen;
485487
const HighsInt* rowinds;
@@ -497,7 +499,7 @@ bool HighsTransformedLp::untransform(std::vector<double>& vals,
497499
vectorsum.add(col, -vals[i]);
498500
} else {
499501
HighsInt row = col - slackOffset;
500-
tmpRhs -= vals[i] * lprelaxation.slackUpper(row);
502+
tmpRhs -= vals[i] * lprelaxation.slackUpper(row, globaldom_);
501503
vals[i] = -vals[i];
502504

503505
HighsInt rowlen;

0 commit comments

Comments
 (0)