Methods for generalized resolution conflict analysis.
This file implements a conflict analysis method based on generalized resolution, as detailed in the paper:
Gioni Mexi, et al. "Cut-based Conflict Analysis in Mixed Integer Programming." arXiv preprint arXiv:2410.15110 (2024).
The generalized resolution conflict analysis procedure starts with an initial conflict row and it iteratively aggregates this row with a reason row—the row that propagated the bound change causing the conflict. The aggregation cancels the coefficient of the resolving variable. This process continues until a first unique implication point (FUIP) is reached. If the aggregation does not yield a valid (infeasible) row, the algorithm attempts to reduce the reason row (e.g., using MIR reduction) and retries the aggregation. Once a valid conflict row with negative slack is generated, a conflict constraint is constructed and added to the problem.
Definition in file conflict_resolution.h.
#include "scip/type_conflict.h"#include "scip/type_reopt.h"#include "scip/type_implics.h"#include "scip/type_set.h"#include "scip/type_stat.h"#include "scip/type_lp.h"#include "scip/type_branch.h"#include "scip/type_var.h"#include "scip/type_prob.h"#include "scip/type_event.h"Go to the source code of this file.
Functions | |
| SCIP_Bool | SCIPconflictResolutionApplicable (SCIP_SET *set) |
| SCIP_Longint | SCIPconflictGetNResConflictConss (SCIP_CONFLICT *conflict) |
| SCIP_Longint | SCIPconflictGetNResSuccess (SCIP_CONFLICT *conflict) |
| SCIP_Longint | SCIPconflictGetNResLargeCoefs (SCIP_CONFLICT *conflict) |
| SCIP_Longint | SCIPconflictGetNResLongConflicts (SCIP_CONFLICT *conflict) |
| SCIP_Longint | SCIPconflictGetNResCalls (SCIP_CONFLICT *conflict) |
| SCIP_RETCODE | SCIPconflictAddConflictCon (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_CONFLICTROW *conflictrow, SCIP_Bool *success) |
| SCIP_RETCODE | SCIPconflictInitRows (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem) |
| void | SCIPconflictRowFree (SCIP_CONFLICTROW **row, BMS_BLKMEM *blkmem) |
return TRUE if generalized resolution conflict analysis is applicable
| set | global SCIP settings |
Definition at line 1161 of file conflict_resolution.c.
References FALSE, SCIP_Bool, and TRUE.
Referenced by SCIPconflictAnalyzeResolution().
| SCIP_Longint SCIPconflictGetNResConflictConss | ( | SCIP_CONFLICT * | conflict | ) |
gets number of conflict constraints found during propagation with the generalized resolution conflict analysis
| conflict | conflict analysis data |
Definition at line 233 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nresconfconss, NULL, and SCIP_Longint.
Referenced by SCIPgetNConflictConssFound(), and SCIPprintConflictStatistics().
| SCIP_Longint SCIPconflictGetNResSuccess | ( | SCIP_CONFLICT * | conflict | ) |
gets number of calls to generalized resolution conflict analysis that yield at least one conflict constraint
| conflict | conflict analysis data |
Definition at line 243 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nressuccess, NULL, and SCIP_Longint.
Referenced by SCIPprintConflictStatistics().
| SCIP_Longint SCIPconflictGetNResLargeCoefs | ( | SCIP_CONFLICT * | conflict | ) |
gets number of calls to generalized resolution conflict analysis terminating because of large coefficients
| conflict | conflict analysis data |
Definition at line 254 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nreslargecoefs, NULL, and SCIP_Longint.
Referenced by SCIPprintConflictStatistics().
| SCIP_Longint SCIPconflictGetNResLongConflicts | ( | SCIP_CONFLICT * | conflict | ) |
gets number of calls to generalized resolution conflict analysis terminating because of long conflicts
| conflict | conflict analysis data |
Definition at line 264 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nreslongconfs, NULL, and SCIP_Longint.
Referenced by SCIPprintConflictStatistics().
| SCIP_Longint SCIPconflictGetNResCalls | ( | SCIP_CONFLICT * | conflict | ) |
gets number of calls to generalized resolution conflict analysis
| conflict | conflict analysis data |
Definition at line 274 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nrescalls, NULL, and SCIP_Longint.
Referenced by SCIPprintConflictStatistics().
| SCIP_RETCODE SCIPconflictAddConflictCon | ( | SCIP_CONFLICT * | conflict, |
| BMS_BLKMEM * | blkmem, | ||
| SCIP_SET * | set, | ||
| SCIP_STAT * | stat, | ||
| SCIP_PROB * | transprob, | ||
| SCIP_PROB * | origprob, | ||
| SCIP_TREE * | tree, | ||
| SCIP_REOPT * | reopt, | ||
| SCIP_LP * | lp, | ||
| SCIP_BRANCHCAND * | branchcand, | ||
| SCIP_EVENTQUEUE * | eventqueue, | ||
| SCIP_EVENTFILTER * | eventfilter, | ||
| SCIP_CLIQUETABLE * | cliquetable, | ||
| SCIP_CONFLICTROW * | conflictrow, | ||
| SCIP_Bool * | success ) |
create constraints out of the conflict row and add them to the problem
create conflict constraints out of conflict row and add them to the problem
| conflict | conflict analysis data |
| blkmem | block memory |
| set | global SCIP settings |
| stat | dynamic problem statistics |
| transprob | transformed problem |
| origprob | original problem |
| tree | branch and bound tree |
| reopt | reoptimization data structure |
| lp | current LP data |
| branchcand | branching candidate storage |
| eventqueue | event queue |
| eventfilter | global event filter |
| cliquetable | clique table data structure |
| conflictrow | conflict row to add to the tree |
| success | true if the conflict is added to the problem |
Definition at line 1958 of file conflict_resolution.c.
References assert(), bound, conflictCalcResMaxsize(), SCIP_ConflictRow::conflictdepth, createAndAddConflictCon(), SCIP_Lp::diving, FALSE, hasRelaxationOnlyVar(), SCIP_ConflictRow::inds, SCIP_ConflictRow::insertdepth, SCIP_ConflictRow::lhs, SCIP_Conflict::nappliedglbresconss, SCIP_ConflictRow::nnz, SCIP_Conflict::nreslongconfs, NULL, SCIP_Tree::path, SCIP_Tree::pathlen, SCIP_ConflictRow::repropdepth, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPnodeAddBoundchg(), SCIPnodeCutoff(), SCIPprobGetVars(), SCIPsetCeil(), SCIPsetDebugMsg, SCIPsetDebugMsgPrint, SCIPsetFloor(), SCIPsetIsFeasGT(), SCIPsetIsGT(), SCIPsetIsLT(), SCIPsetIsZero(), SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarIsIntegral(), SCIP_Lp::strongbranching, TRUE, updateStatistics(), SCIP_ConflictRow::validdepth, SCIP_ConflictRow::vals, var, and vars.
Referenced by addConflictRows().
| SCIP_RETCODE SCIPconflictInitRows | ( | SCIP_CONFLICT * | conflict, |
| BMS_BLKMEM * | blkmem ) |
creates and clears the conflict rows
creates conflict and reason rows
| conflict | conflict analysis data |
| blkmem | block memory of transformed problem |
Definition at line 1202 of file conflict_resolution.c.
References assert(), SCIP_Conflict::conflictrow, conflictRowCreate(), NULL, SCIP_Conflict::reasonrow, SCIP_Conflict::reducedreasonrow, SCIP_Conflict::resolvedconflictrow, SCIP_CALL, and SCIP_OKAY.
Referenced by SCIPconflictCreate().
| void SCIPconflictRowFree | ( | SCIP_CONFLICTROW ** | row, |
| BMS_BLKMEM * | blkmem ) |
frees a conflict row
frees a generalized resolution row
| row | conflict row |
| blkmem | block memory |
Definition at line 1220 of file conflict_resolution.c.
References assert(), BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.
Referenced by freeConflictResources(), SCIPconflictAnalyzeResolution(), and SCIPconflictFree().