diff --git a/CHANGELOG b/CHANGELOG index 85bbbedcce..26809a91ac 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -77,6 +77,7 @@ Fixed bugs - delay checking node limits after presolving to correctly continue up to the exceeding main node - simplified the objective sense assumption for the subproblems in the Lagromory separator - update effective root depth iteratively to avoid trapping it at a single child node +- fixed that dualsparsify presolver did not always check do-not-multiaggregate variable flag Miscellaneous ------------- diff --git a/src/scip/presol_dualsparsify.c b/src/scip/presol_dualsparsify.c index f6ee1815c1..998eebdc29 100644 --- a/src/scip/presol_dualsparsify.c +++ b/src/scip/presol_dualsparsify.c @@ -1547,8 +1547,10 @@ SCIP_DECL_PRESOLEXEC(presolExecDualsparsify) nnonz = SCIPmatrixGetColNNonzs(matrix, c); vars[c] = SCIPmatrixGetVar(matrix, c); - /* if the locks do not match do not consider the column for sparsification */ - if( SCIPmatrixDownlockConflict(matrix, c) || SCIPmatrixUplockConflict(matrix, c) ) + /* if the locks do not match do not consider the column for sparsification + * also skip if the variable is not allowed to be multi-aggregated + */ + if( SCIPmatrixDownlockConflict(matrix, c) || SCIPmatrixUplockConflict(matrix, c) || SCIPdoNotMultaggrVar(scip, vars[c]) ) { isblockedvar[c] = TRUE; ishashingcols[c] = FALSE;