Skip to content

Commit 850d867

Browse files
committed
Fix logic
1 parent 48bc496 commit 850d867

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

highs/presolve/HPresolve.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5018,7 +5018,8 @@ HPresolve::Result HPresolve::enumerateSolutions(
50185018

50195019
auto handleSolution = [&](HighsInt row, size_t numVars, size_t& numSolutions,
50205020
size_t& numWorstCaseBounds,
5021-
size_t& maxNumActiveCols, bool& noReductions) {
5021+
size_t& minNumActiveCols, size_t& maxNumActiveCols,
5022+
bool& noReductions) {
50225023
// propagate
50235024
domain.propagate();
50245025
if (domain.infeasible()) return;
@@ -5064,11 +5065,13 @@ HPresolve::Result HPresolve::enumerateSolutions(
50645065
solutions[i][numSolutions] = solValue;
50655066
if (solValue != 0) numActiveCols++;
50665067
}
5068+
minNumActiveCols = std::min(minNumActiveCols, numActiveCols);
50675069
maxNumActiveCols = std::max(maxNumActiveCols, numActiveCols);
50685070

50695071
// if no reductions are possible, stop enumerating solutions
5070-
noReductions = numWorstCaseBounds == 0 && maxNumActiveCols != 1 &&
5071-
maxNumActiveCols != numVars - 1;
5072+
noReductions =
5073+
numWorstCaseBounds == 0 && maxNumActiveCols != 1 &&
5074+
(minNumActiveCols != numVars - 1 || maxNumActiveCols != numVars - 1);
50725075
if (noReductions) {
50735076
for (size_t i = 0; i < numVars - 1; i++) {
50745077
for (size_t ii = i + 1; ii < numVars; ii++) {
@@ -5112,6 +5115,7 @@ HPresolve::Result HPresolve::enumerateSolutions(
51125115
HighsInt numBranches = -1;
51135116
size_t numWorstCaseBounds = 0;
51145117
size_t numSolutions = 0;
5118+
size_t minNumActiveCols = numVars;
51155119
size_t maxNumActiveCols = 0;
51165120
bool noReductions = false;
51175121
while (true) {
@@ -5120,7 +5124,7 @@ HPresolve::Result HPresolve::enumerateSolutions(
51205124
backtrack = solutionFound(numVars);
51215125
if (backtrack) {
51225126
handleSolution(row, numVars, numSolutions, numWorstCaseBounds,
5123-
maxNumActiveCols, noReductions);
5127+
minNumActiveCols, maxNumActiveCols, noReductions);
51245128
if (noReductions) break;
51255129
}
51265130
}
@@ -5141,7 +5145,8 @@ HPresolve::Result HPresolve::enumerateSolutions(
51415145
HPRESOLVE_CHECKED_CALL(handleInfeasibility(numSolutions == 0));
51425146

51435147
// check if all variables form a clique
5144-
if (maxNumActiveCols == 1 || maxNumActiveCols == numVars - 1) {
5148+
if (maxNumActiveCols == 1 ||
5149+
(minNumActiveCols == numVars - 1 && maxNumActiveCols == numVars - 1)) {
51455150
std::vector<HighsCliqueTable::CliqueVar> clique(numVars);
51465151
for (size_t i = 0; i < numVars; i++)
51475152
clique[i] =

0 commit comments

Comments
 (0)