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