SCIP Doxygen Documentation
Loading...
Searching...
No Matches

Detailed Description

Methods for generalized resolution conflict analysis.

Author
Gioni Mexi

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)

Function Documentation

◆ SCIPconflictResolutionApplicable()

SCIP_Bool SCIPconflictResolutionApplicable ( SCIP_SET * set)

return TRUE if generalized resolution conflict analysis is applicable

Parameters
setglobal SCIP settings

Definition at line 1161 of file conflict_resolution.c.

References FALSE, SCIP_Bool, and TRUE.

Referenced by SCIPconflictAnalyzeResolution().

◆ SCIPconflictGetNResConflictConss()

SCIP_Longint SCIPconflictGetNResConflictConss ( SCIP_CONFLICT * conflict)

gets number of conflict constraints found during propagation with the generalized resolution conflict analysis

Parameters
conflictconflict 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().

◆ SCIPconflictGetNResSuccess()

SCIP_Longint SCIPconflictGetNResSuccess ( SCIP_CONFLICT * conflict)

gets number of calls to generalized resolution conflict analysis that yield at least one conflict constraint

Parameters
conflictconflict analysis data

Definition at line 243 of file conflict_resolution.c.

References assert(), SCIP_Conflict::nressuccess, NULL, and SCIP_Longint.

Referenced by SCIPprintConflictStatistics().

◆ SCIPconflictGetNResLargeCoefs()

SCIP_Longint SCIPconflictGetNResLargeCoefs ( SCIP_CONFLICT * conflict)

gets number of calls to generalized resolution conflict analysis terminating because of large coefficients

Parameters
conflictconflict analysis data

Definition at line 254 of file conflict_resolution.c.

References assert(), SCIP_Conflict::nreslargecoefs, NULL, and SCIP_Longint.

Referenced by SCIPprintConflictStatistics().

◆ SCIPconflictGetNResLongConflicts()

SCIP_Longint SCIPconflictGetNResLongConflicts ( SCIP_CONFLICT * conflict)

gets number of calls to generalized resolution conflict analysis terminating because of long conflicts

Parameters
conflictconflict analysis data

Definition at line 264 of file conflict_resolution.c.

References assert(), SCIP_Conflict::nreslongconfs, NULL, and SCIP_Longint.

Referenced by SCIPprintConflictStatistics().

◆ SCIPconflictGetNResCalls()

SCIP_Longint SCIPconflictGetNResCalls ( SCIP_CONFLICT * conflict)

gets number of calls to generalized resolution conflict analysis

Parameters
conflictconflict analysis data

Definition at line 274 of file conflict_resolution.c.

References assert(), SCIP_Conflict::nrescalls, NULL, and SCIP_Longint.

Referenced by SCIPprintConflictStatistics().

◆ SCIPconflictAddConflictCon()

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

Parameters
conflictconflict analysis data
blkmemblock memory
setglobal SCIP settings
statdynamic problem statistics
transprobtransformed problem
origproboriginal problem
treebranch and bound tree
reoptreoptimization data structure
lpcurrent LP data
branchcandbranching candidate storage
eventqueueevent queue
eventfilterglobal event filter
cliquetableclique table data structure
conflictrowconflict row to add to the tree
successtrue 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().

◆ SCIPconflictInitRows()

SCIP_RETCODE SCIPconflictInitRows ( SCIP_CONFLICT * conflict,
BMS_BLKMEM * blkmem )

creates and clears the conflict rows

creates conflict and reason rows

Parameters
conflictconflict analysis data
blkmemblock 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().

◆ SCIPconflictRowFree()

void SCIPconflictRowFree ( SCIP_CONFLICTROW ** row,
BMS_BLKMEM * blkmem )

frees a conflict row

frees a generalized resolution row

Parameters
rowconflict row
blkmemblock memory

Definition at line 1220 of file conflict_resolution.c.

References assert(), BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

Referenced by freeConflictResources(), SCIPconflictAnalyzeResolution(), and SCIPconflictFree().