Scippy

SCIP

Solving Constraint Integer Programs

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, 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 SCIP_Conflict::nresconfconss, and NULL.

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 SCIP_Conflict::nressuccess, and NULL.

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 SCIP_Conflict::nreslargecoefs, and NULL.

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 SCIP_Conflict::nreslongconfs, and NULL.

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 SCIP_Conflict::nrescalls, and NULL.

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 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_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, and SCIP_ConflictRow::vals.

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 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 BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

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