Scippy

    SCIP

    Solving Constraint Integer Programs

    Detailed Description

    methods and datastructures for conflict analysis

    Author
    Tobias Achterberg
    Timo Berthold
    Stefan Heinz
    Marc Pfetsch
    Michael Winkler
    Jakob Witzig

    This file implements a conflict analysis method like the one used in modern SAT solvers like zchaff. The algorithm works as follows:

    Given is a set of bound changes that are not allowed being applied simultaneously, because they render the current node infeasible (e.g. because a single constraint is infeasible in the these bounds, or because the LP relaxation is infeasible). The goal is to deduce a clause on variables – a conflict clause – representing the "reason" for this conflict, i.e., the branching decisions or the deductions (applied e.g. in domain propagation) that lead to the conflict. This clause can then be added to the constraint set to help cutting off similar parts of the branch and bound tree, that would lead to the same conflict. A conflict clause can also be generated, if the conflict was detected by a locally valid constraint. In this case, the resulting conflict clause is also locally valid in the same depth as the conflict detecting constraint. If all involved variables are binary, a linear (set covering) constraint can be generated, otherwise a bound disjunction constraint is generated. Details are given in

    Tobias Achterberg, Conflict Analysis in Mixed Integer Programming
    Discrete Optimization, 4, 4-20 (2007)

    See also How to use conflict analysis. Here is an outline of the algorithm:

    1. Put all the given bound changes to a priority queue, which is ordered, such that the bound change that was applied last due to branching or deduction is at the top of the queue. The variables in the queue are always active problem variables. Because binary variables are preferred over general integer variables, integer variables are put on the priority queue prior to the binary variables. Create an empty conflict set.
    2. Remove the top bound change b from the priority queue.
    3. Perform the following case distinction:
      1. If the remaining queue is non-empty, and bound change b' (the one that is now on the top of the queue) was applied at the same depth level as b, and if b was a deduction with known inference reason, and if the inference constraint's valid depth is smaller or equal to the conflict detecting constraint's valid depth:
        • Resolve bound change b by asking the constraint that inferred the bound change to put all the bound changes on the priority queue, that lead to the deduction of b. Note that these bound changes have at most the same inference depth level as b, and were deduced earlier than b.
      2. Otherwise, the bound change b was a branching decision or a deduction with missing inference reason, or the inference constraint's validity is more local than the one of the conflict detecting constraint.
        • If a the bound changed corresponds to a binary variable, add it or its negation to the conflict set, depending on which of them is currently fixed to FALSE (i.e., the conflict set consists of literals that cannot be FALSE altogether at the same time).
        • Otherwise put the bound change into the conflict set. Note that if the bound change was a branching, all deduced bound changes remaining in the priority queue have smaller inference depth level than b, since deductions are always applied after the branching decisions. However, there is the possibility, that b was a deduction, where the inference reason was not given or the inference constraint was too local. With this lack of information, we must treat the deduced bound change like a branching, and there may exist other deduced bound changes of the same inference depth level in the priority queue.
    4. If priority queue is non-empty, goto step 2.
    5. The conflict set represents the conflict clause saying that at least one of the conflict variables must take a different value. The conflict set is then passed to the conflict handlers, that may create a corresponding constraint (e.g. a logicor constraint or bound disjunction constraint) out of these conflict variables and add it to the problem.

    If all deduced bound changes come with (global) inference information, depending on the conflict analyzing strategy, the resulting conflict set has the following property:

    • 1-FirstUIP: In the depth level where the conflict was found, at most one variable assigned at that level is member of the conflict set. This conflict variable is the first unique implication point of its depth level (FUIP).
    • All-FirstUIP: For each depth level, at most one variable assigned at that level is member of the conflict set. This conflict variable is the first unique implication point of its depth level (FUIP).

    The user has to do the following to get the conflict analysis running in its current implementation:

    • A constraint handler or propagator supporting the conflict analysis must implement the CONSRESPROP/PROPRESPROP call, that processes a bound change inference b and puts all the reason bounds leading to the application of b with calls to SCIPaddConflictBound() on the conflict queue (algorithm step 3.(a)).
    • If the current bounds lead to a deduction of a bound change (e.g. in domain propagation), a constraint handler should call SCIPinferVarLbCons() or SCIPinferVarUbCons(), thus providing the constraint that inferred the bound change. A propagator should call SCIPinferVarLbProp() or SCIPinferVarUbProp() instead, thus providing a pointer to itself.
    • If (in the current bounds) an infeasibility is detected, the constraint handler or propagator should
      1. call SCIPinitConflictAnalysis() to initialize the conflict queue,
      2. call SCIPaddConflictBound() for each bound that lead to the conflict,
      3. call SCIPanalyzeConflictCons() or SCIPanalyzeConflict() to analyze the conflict and add an appropriate conflict constraint.

    Definition in file conflict_graphanalysis.c.

    #include "lpi/lpi.h"
    #include "scip/conflict_graphanalysis.h"
    #include "scip/conflict_dualproofanalysis.h"
    #include "scip/clock.h"
    #include "scip/conflict.h"
    #include "scip/cons.h"
    #include "scip/cons_linear.h"
    #include "scip/cuts.h"
    #include "scip/history.h"
    #include "scip/lp.h"
    #include "scip/presolve.h"
    #include "scip/prob.h"
    #include "scip/prop.h"
    #include "scip/pub_conflict.h"
    #include "scip/pub_cons.h"
    #include "scip/pub_lp.h"
    #include "scip/pub_message.h"
    #include "scip/pub_misc.h"
    #include "scip/pub_misc_sort.h"
    #include "scip/pub_paramset.h"
    #include "scip/pub_prop.h"
    #include "scip/pub_tree.h"
    #include "scip/pub_var.h"
    #include "scip/scip_conflict.h"
    #include "scip/scip_cons.h"
    #include "scip/scip_mem.h"
    #include "scip/scip_sol.h"
    #include "scip/scip_var.h"
    #include "scip/scip_message.h"
    #include "scip/set.h"
    #include "scip/sol.h"
    #include "scip/struct_conflict.h"
    #include "scip/struct_lp.h"
    #include "scip/struct_prob.h"
    #include "scip/struct_set.h"
    #include "scip/struct_stat.h"
    #include "scip/struct_tree.h"
    #include "scip/struct_var.h"
    #include "scip/tree.h"
    #include "scip/var.h"
    #include "scip/visual.h"
    #include <string.h>
    #include <strings.h>

    Go to the source code of this file.

    Functions

    static SCIP_RETCODE conflictsetEnsureBdchginfosMem (SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
     
    static SCIP_RETCODE conflictsetAddBound (SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd)
     
    static void conflictsetCalcConflictDepth (SCIP_CONFLICTSET *conflictset)
     
    static SCIP_RETCODE conflictsetCalcInsertDepth (SCIP_CONFLICTSET *conflictset, SCIP_SET *set, SCIP_TREE *tree)
     
    static SCIP_Bool conflictsetIsRedundant (SCIP_CONFLICTSET *conflictset1, SCIP_CONFLICTSET *conflictset2)
     
    static SCIP_Bool checkRedundancy (SCIP_SET *set, SCIP_CONFLICTSET *conflictset)
     
    static SCIP_RETCODE detectImpliedBounds (SCIP_SET *set, SCIP_PROB *prob, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_PROB *origprob, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_CONFLICTSET *conflictset, int *nbdchgs, int *nredvars, SCIP_Bool *redundant)
     
    static void conflictsetClear (SCIP_CONFLICTSET *conflictset)
     
    SCIP_RETCODE SCIPconflictsetCreate (SCIP_CONFLICTSET **conflictset, BMS_BLKMEM *blkmem)
     
    static SCIP_RETCODE conflictsetCopy (SCIP_CONFLICTSET **targetconflictset, BMS_BLKMEM *blkmem, SCIP_CONFLICTSET *sourceconflictset, int nadditionalelems)
     
    void SCIPconflictsetFree (SCIP_CONFLICTSET **conflictset, BMS_BLKMEM *blkmem)
     
    static SCIP_Real conflictsetCalcScore (SCIP_CONFLICTSET *conflictset, SCIP_SET *set)
     
     SCIP_DECL_SORTPTRCOMP (SCIPconflicthdlrComp)
     
     SCIP_DECL_SORTPTRCOMP (SCIPconflicthdlrCompName)
     
    static SCIP_DECL_PARAMCHGD (paramChgdConflicthdlrPriority)
     
    SCIP_RETCODE SCIPconflicthdlrCopyInclude (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
     
    static SCIP_RETCODE doConflicthdlrCreate (SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTCOPY((*conflictcopy)), SCIP_DECL_CONFLICTFREE((*conflictfree)), SCIP_DECL_CONFLICTINIT((*conflictinit)), SCIP_DECL_CONFLICTEXIT((*conflictexit)), SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)), SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)), SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
     
    SCIP_RETCODE SCIPconflicthdlrCreate (SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTCOPY((*conflictcopy)), SCIP_DECL_CONFLICTFREE((*conflictfree)), SCIP_DECL_CONFLICTINIT((*conflictinit)), SCIP_DECL_CONFLICTEXIT((*conflictexit)), SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)), SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)), SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
     
    SCIP_RETCODE SCIPconflicthdlrFree (SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set)
     
    SCIP_RETCODE SCIPconflicthdlrInit (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
     
    SCIP_RETCODE SCIPconflicthdlrExit (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
     
    SCIP_RETCODE SCIPconflicthdlrInitsol (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
     
    SCIP_RETCODE SCIPconflicthdlrExitsol (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
     
    SCIP_RETCODE SCIPconflicthdlrExec (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, SCIP_NODE *node, SCIP_NODE *validnode, SCIP_BDCHGINFO **bdchginfos, SCIP_Real *relaxedbds, int nbdchginfos, SCIP_CONFTYPE conftype, SCIP_Bool usescutoffbound, SCIP_Bool resolved, SCIP_RESULT *result)
     
    SCIP_CONFLICTHDLRDATASCIPconflicthdlrGetData (SCIP_CONFLICTHDLR *conflicthdlr)
     
    void SCIPconflicthdlrSetData (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
     
    void SCIPconflicthdlrSetCopy (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTCOPY((*conflictcopy)))
     
    void SCIPconflicthdlrSetFree (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTFREE((*conflictfree)))
     
    void SCIPconflicthdlrSetInit (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINIT((*conflictinit)))
     
    void SCIPconflicthdlrSetExit (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXIT((*conflictexit)))
     
    void SCIPconflicthdlrSetInitsol (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)))
     
    void SCIPconflicthdlrSetExitsol (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)))
     
    const char * SCIPconflicthdlrGetName (SCIP_CONFLICTHDLR *conflicthdlr)
     
    const char * SCIPconflicthdlrGetDesc (SCIP_CONFLICTHDLR *conflicthdlr)
     
    int SCIPconflicthdlrGetPriority (SCIP_CONFLICTHDLR *conflicthdlr)
     
    void SCIPconflicthdlrSetPriority (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, int priority)
     
    SCIP_Bool SCIPconflicthdlrIsInitialized (SCIP_CONFLICTHDLR *conflicthdlr)
     
    void SCIPconflicthdlrEnableOrDisableClocks (SCIP_CONFLICTHDLR *conflicthdlr, SCIP_Bool enable)
     
    SCIP_Real SCIPconflicthdlrGetSetupTime (SCIP_CONFLICTHDLR *conflicthdlr)
     
    SCIP_Real SCIPconflicthdlrGetTime (SCIP_CONFLICTHDLR *conflicthdlr)
     
    SCIP_Bool SCIPconflictGraphApplicable (SCIP_SET *set)
     
    static SCIP_RETCODE conflictEnsureTmpbdchginfosMem (SCIP_CONFLICT *conflict, SCIP_SET *set, int num)
     
    SCIP_RETCODE conflictCreateTmpBdchginfo (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_Real oldbound, SCIP_Real newbound, SCIP_BDCHGINFO **bdchginfo)
     
    static void conflictFreeTmpBdchginfos (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem)
     
    static SCIP_RETCODE incVSIDS (SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BOUNDTYPE boundtype, SCIP_Real value, SCIP_Real weight)
     
    static SCIP_RETCODE updateStatistics (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONFLICTSET *conflictset, int insertdepth)
     
    static SCIP_RETCODE conflictAddConflictCons (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_CONFLICTSET *conflictset, int insertdepth, SCIP_Bool *success)
     
    int conflictCalcMaxsize (SCIP_SET *set, SCIP_PROB *prob)
     
    SCIP_RETCODE SCIPconflictFlushConss (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)
     
    static SCIP_RETCODE conflictEnsureConflictsetsMem (SCIP_CONFLICT *conflict, SCIP_SET *set, int num)
     
    static SCIP_RETCODE conflictInsertConflictset (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_CONFLICTSET **conflictset)
     
    static SCIP_Bool conflictMarkBoundCheckPresence (SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd)
     
    static SCIP_Bool betterBoundInResolutionQueue (SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo)
     
    static SCIP_RETCODE conflictAddConflictBound (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd)
     
    static SCIP_Bool isBoundchgUseless (SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo)
     
    static SCIP_RETCODE conflictQueueBound (SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd, SCIP_Bool *success)
     
    static SCIP_RETCODE conflictAddBound (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd)
     
    SCIP_RETCODE SCIPconflictAnalyzeRemainingBdchgs (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int *lbchginfoposs, int *ubchginfoposs, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals)
     
    SCIP_Bool bdchginfoIsInvalid (SCIP_CONFLICT *conflict, SCIP_BDCHGINFO *bdchginfo)
     
    static SCIP_RETCODE conflictsetAddBounds (SCIP_CONFLICT *conflict, SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO **bdchginfos, int nbdchginfos)
     
    static SCIP_BDCHGINFOconflictRemoveCand (SCIP_CONFLICT *conflict)
     
    static SCIP_BDCHGINFOconflictFirstCand (SCIP_CONFLICT *conflict)
     
    static SCIP_RETCODE conflictAddConflictset (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, int validdepth, SCIP_Bool diving, SCIP_Bool repropagate, SCIP_Bool *success, int *nliterals)
     
    static SCIP_RETCODE conflictResolveBound (SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd, int validdepth, SCIP_Bool *resolved)
     
    static void conflictClear (SCIP_CONFLICT *conflict)
     
    static void conflictClearResolution (SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_PROB *prob)
     
    SCIP_RETCODE SCIPconflictInit (SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_CONFTYPE conftype, SCIP_Bool usescutoffbound)
     
    static SCIP_RETCODE convertToActiveVar (SCIP_VAR **var, SCIP_SET *set, SCIP_BOUNDTYPE *boundtype, SCIP_Real *bound)
     
    static SCIP_Bool bdchginfoIsResolvable (SCIP_BDCHGINFO *bdchginfo)
     
    static SCIP_RETCODE conflictCreateReconvergenceConss (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int validdepth, SCIP_BDCHGINFO *firstuip, int *nreconvconss, int *nreconvliterals)
     
    SCIP_RETCODE conflictAnalyze (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int validdepth, SCIP_Bool mustresolve, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals)
     
    static SCIP_Real calcBdchgScore (SCIP_Real prooflhs, SCIP_Real proofact, SCIP_Real proofactdelta, SCIP_Real proofcoef, int depth, int currentdepth, SCIP_VAR *var, SCIP_SET *set)
     
    static SCIP_RETCODE ensureCandsSize (SCIP_SET *set, SCIP_VAR ***cands, SCIP_Real **candscores, SCIP_Real **newbounds, SCIP_Real **proofactdeltas, int *candssize, int num)
     
    static void skipRedundantBdchginfos (SCIP_VAR *var, int *lbchginfopos, int *ubchginfopos)
     
    SCIP_RETCODE SCIPconflictAddBound (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx)
     
    SCIP_RETCODE SCIPconflictAddRelaxedBound (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedbd)
     
    SCIP_RETCODE SCIPconflictIsVarUsed (SCIP_CONFLICT *conflict, SCIP_VAR *var, SCIP_SET *set, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool *used)
     
    static SCIP_RETCODE addBdchg (SCIP_SET *set, SCIP_VAR *var, SCIP_Real newlb, SCIP_Real newub, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_LPI *lpi)
     
    static SCIP_RETCODE addCand (SCIP_SET *set, int currentdepth, SCIP_VAR *var, int lbchginfopos, int ubchginfopos, SCIP_Real proofcoef, SCIP_Real prooflhs, SCIP_Real proofact, SCIP_VAR ***cands, SCIP_Real **candscores, SCIP_Real **newbounds, SCIP_Real **proofactdeltas, int *candssize, int *ncands, int firstcand)
     
    SCIP_RETCODE SCIPundoBdchgsProof (SCIP_SET *set, SCIP_PROB *prob, int currentdepth, SCIP_Real *proofcoefs, SCIP_Real prooflhs, SCIP_Real *proofact, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_Bool *resolve, SCIP_LPI *lpi)
     
    static SCIP_RETCODE undoBdchgsDualfarkas (SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, int currentdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_Bool *valid, SCIP_Bool *resolve, SCIP_Real *farkascoefs, SCIP_Real farkaslhs, SCIP_Real *farkasactivity)
     
    static SCIP_RETCODE lpbdchgsCreate (SCIP_LPBDCHGS **lpbdchgs, SCIP_SET *set, int ncols)
     
    static SCIP_RETCODE ensureSidechgsSize (SCIP_SET *set, int **sidechginds, SCIP_Real **sidechgoldlhss, SCIP_Real **sidechgoldrhss, SCIP_Real **sidechgnewlhss, SCIP_Real **sidechgnewrhss, int *sidechgssize, int num)
     
    static SCIP_RETCODE addSideRemoval (SCIP_SET *set, SCIP_ROW *row, SCIP_Real lpiinfinity, int **sidechginds, SCIP_Real **sidechgoldlhss, SCIP_Real **sidechgoldrhss, SCIP_Real **sidechgnewlhss, SCIP_Real **sidechgnewrhss, int *sidechgssize, int *nsidechgs)
     
    static void lpbdchgsReset (SCIP_LPBDCHGS *lpbdchgs, int ncols)
     
    static void lpbdchgsFree (SCIP_LPBDCHGS **lpbdchgs, SCIP_SET *set)
     
    static SCIP_RETCODE undoBdchgsDualsol (SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, int currentdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_Bool *valid, SCIP_Bool *resolve, SCIP_Real *dualcoefs, SCIP_Real duallhs, SCIP_Real *dualactivity)
     
    SCIP_RETCODE SCIPrunBoundHeuristic (SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_LPI *lpi, SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_Real *proofcoefs, SCIP_Real *prooflhs, SCIP_Real *proofactivity, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, int *iterations, SCIP_Bool marklpunsolved, SCIP_Bool *dualproofsuccess, SCIP_Bool *valid)
     
    SCIP_RETCODE SCIPconflictAnalyze (SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, int validdepth, SCIP_Bool *success)
     

    Function Documentation

    ◆ conflictsetEnsureBdchginfosMem()

    static SCIP_RETCODE conflictsetEnsureBdchginfosMem ( SCIP_CONFLICTSET conflictset,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    int  num 
    )
    static

    Conflict sets resizes the arrays of the conflict set to be able to store at least num bound change entries

    Parameters
    conflictsetconflict set
    blkmemblock memory of transformed problem
    setglobal SCIP settings
    numminimal number of slots in arrays

    Definition at line 378 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, SCIP_ConflictSet::bdchginfossize, BMSreallocBlockMemoryArray, NULL, SCIP_ConflictSet::relaxedbds, SCIP_ALLOC, SCIP_OKAY, SCIPsetCalcMemGrowSize(), and SCIP_ConflictSet::sortvals.

    Referenced by conflictsetAddBound(), and conflictsetAddBounds().

    ◆ conflictsetAddBound()

    static SCIP_RETCODE conflictsetAddBound ( SCIP_CONFLICTSET conflictset,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_BDCHGINFO bdchginfo,
    SCIP_Real  relaxedbd 
    )
    static

    ◆ conflictsetCalcConflictDepth()

    static void conflictsetCalcConflictDepth ( SCIP_CONFLICTSET conflictset)
    static

    calculates the conflict and the repropagation depths of the conflict set

    Parameters
    conflictsetconflict set

    Definition at line 478 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, SCIP_ConflictSet::conflictdepth, SCIP_ConflictSet::insertdepth, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_ConflictSet::repropdepth, SCIPbdchginfoGetDepth(), and SCIP_ConflictSet::validdepth.

    Referenced by conflictInsertConflictset().

    ◆ conflictsetCalcInsertDepth()

    static SCIP_RETCODE conflictsetCalcInsertDepth ( SCIP_CONFLICTSET conflictset,
    SCIP_SET set,
    SCIP_TREE tree 
    )
    static

    identifies the depth, at which the conflict set should be added:

    • if the branching rule operates on variables only, and if all branching variables up to a certain depth level are member of the conflict, the conflict constraint can only be violated in the subtree of the node at that depth, because in all other nodes, at least one of these branching variables violates its conflicting bound, such that the conflict constraint is feasible
    • if there is at least one branching variable in a node, we assume, that this branching was performed on variables, and that the siblings of this node are disjunct w.r.t. the branching variables' fixings
    • we have to add the conflict set at least in the valid depth of the initial conflict set, so we start searching at the first branching after this depth level, i.e. validdepth+1
    Parameters
    conflictsetconflict set
    setglobal SCIP settings
    treebranch and bound tree

    Definition at line 522 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, BMSclearMemoryArray, SCIP_ConflictSet::insertdepth, MIN, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_Tree::pathlen, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPbdchginfoGetDepth(), SCIPsetAllocBufferArray, SCIPsetFreeBufferArray, SCIPtreeGetCurrentDepth(), TRUE, and SCIP_ConflictSet::validdepth.

    Referenced by conflictAddConflictset().

    ◆ conflictsetIsRedundant()

    static SCIP_Bool conflictsetIsRedundant ( SCIP_CONFLICTSET conflictset1,
    SCIP_CONFLICTSET conflictset2 
    )
    static

    checks whether the first conflict set is redundant to the second one

    Parameters
    conflictset1first conflict conflict set
    conflictset2second conflict conflict set

    Definition at line 569 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, FALSE, SCIP_ConflictSet::nbdchginfos, NULL, SCIPbdchginfoIsTighter(), SCIP_ConflictSet::sortvals, and SCIP_ConflictSet::validdepth.

    Referenced by conflictInsertConflictset().

    ◆ checkRedundancy()

    static SCIP_Bool checkRedundancy ( SCIP_SET set,
    SCIP_CONFLICTSET conflictset 
    )
    static

    check conflict set for redundancy, other conflicts in the same conflict analysis could have led to global reductions an made this conflict set redundant

    Parameters
    setglobal SCIP settings
    conflictsetconflict set

    Definition at line 633 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, bound, FALSE, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_ConflictSet::relaxedbds, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_Real, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPsetIsFeasGE(), SCIPsetIsFeasLE(), SCIPsetIsGE(), SCIPsetIsIntegral(), SCIPsetIsLE(), SCIPvarGetLbGlobal(), SCIPvarGetProbindex(), SCIPvarGetUbGlobal(), SCIPvarIsIntegral(), and TRUE.

    Referenced by detectImpliedBounds().

    ◆ detectImpliedBounds()

    static SCIP_RETCODE detectImpliedBounds ( SCIP_SET set,
    SCIP_PROB prob,
    SCIP_STAT stat,
    SCIP_TREE tree,
    SCIP_EVENTFILTER eventfilter,
    BMS_BLKMEM blkmem,
    SCIP_PROB origprob,
    SCIP_REOPT reopt,
    SCIP_LP lp,
    SCIP_CONFLICTSET conflictset,
    int *  nbdchgs,
    int *  nredvars,
    SCIP_Bool redundant 
    )
    static

    find global fixings which can be derived from the new conflict set

    Parameters
    setglobal SCIP settings
    probtransformed problem after presolve
    statdynamic SCIP statistics
    treetree data
    eventfilterglobal event filter
    blkmemblock memory
    origproboriginal problem
    reoptreoptimization data
    lpLP data
    conflictsetconflict set to add to the tree
    nbdchgsnumber of global deducted bound changes due to the conflict set
    nredvarsnumber of redundant and removed variables from conflict set
    redundantdid we found a global reduction on a conflict set variable, which makes this conflict redundant

    Definition at line 698 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, BMSclearMemoryArray, bound, checkRedundancy(), FALSE, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_ConflictSet::relaxedbds, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPboundtypeOpposite(), SCIPnodeCutoff(), SCIPprobGetName(), SCIPprobIsTransformed(), SCIPsetAllocBufferArray, SCIPsetAllocCleanBufferArray, SCIPsetDebugMsg, SCIPsetDebugMsgPrint, SCIPsetFreeBufferArray, SCIPsetFreeCleanBufferArray, SCIPsetIsEQ(), SCIPsetIsFeasEQ(), SCIPsetIsFeasGT(), SCIPsetIsFeasLT(), SCIPsetIsGE(), SCIPsetIsIntegral(), SCIPsetIsLE(), SCIPsetIsZero(), SCIPshrinkDisjunctiveVarSet(), SCIPsortLongPtrRealRealBool(), SCIPtreeGetRootNode(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetNCliques(), SCIPvarGetNVlbs(), SCIPvarGetNVubs(), SCIPvarGetProbindex(), SCIPvarGetUbGlobal(), SCIPvarIsBinary(), SCIPvarIsIntegral(), SCIP_ConflictSet::sortvals, and TRUE.

    Referenced by conflictAddConflictCons().

    ◆ conflictsetClear()

    ◆ SCIPconflictsetCreate()

    SCIP_RETCODE SCIPconflictsetCreate ( SCIP_CONFLICTSET **  conflictset,
    BMS_BLKMEM blkmem 
    )

    creates an empty conflict set

    Parameters
    conflictsetpointer to store the conflict set
    blkmemblock memory of transformed problem

    Definition at line 990 of file conflict_graphanalysis.c.

    References BMSallocBlockMemory, conflictsetClear(), NULL, SCIP_ALLOC, and SCIP_OKAY.

    Referenced by SCIPconflictCreate().

    ◆ conflictsetCopy()

    static SCIP_RETCODE conflictsetCopy ( SCIP_CONFLICTSET **  targetconflictset,
    BMS_BLKMEM blkmem,
    SCIP_CONFLICTSET sourceconflictset,
    int  nadditionalelems 
    )
    static

    creates a copy of the given conflict set, allocating an additional amount of memory

    Parameters
    targetconflictsetpointer to store the conflict set
    blkmemblock memory of transformed problem
    sourceconflictsetsource conflict set
    nadditionalelemsnumber of additional elements to allocate memory for

    Definition at line 1010 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, BMSallocBlockMemory, BMSallocBlockMemoryArray, BMScopyMemoryArray, SCIP_ConflictSet::conflictdepth, SCIP_ConflictSet::conflicttype, SCIP_ConflictSet::hasrelaxonlyvar, SCIP_ConflictSet::insertdepth, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_ConflictSet::relaxedbds, SCIP_ConflictSet::repropdepth, SCIP_ALLOC, SCIP_OKAY, SCIP_ConflictSet::sortvals, SCIP_ConflictSet::usescutoffbound, and SCIP_ConflictSet::validdepth.

    Referenced by conflictAddConflictset().

    ◆ SCIPconflictsetFree()

    void SCIPconflictsetFree ( SCIP_CONFLICTSET **  conflictset,
    BMS_BLKMEM blkmem 
    )

    frees a conflict set

    Parameters
    conflictsetpointer to the conflict set
    blkmemblock memory of transformed problem

    Definition at line 1046 of file conflict_graphanalysis.c.

    References BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

    Referenced by conflictAddConflictset(), conflictInsertConflictset(), SCIPconflictFlushConss(), and SCIPconflictFree().

    ◆ conflictsetCalcScore()

    static SCIP_Real conflictsetCalcScore ( SCIP_CONFLICTSET conflictset,
    SCIP_SET set 
    )
    static

    calculates the score of the conflict set

    the score is weighted sum of number of bound changes, repropagation depth, and valid depth

    Parameters
    conflictsetconflict set
    setglobal SCIP settings

    Definition at line 1065 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::nbdchginfos, NULL, SCIP_ConflictSet::repropdepth, and SCIP_ConflictSet::validdepth.

    Referenced by conflictInsertConflictset().

    ◆ SCIP_DECL_PARAMCHGD()

    static SCIP_DECL_PARAMCHGD ( paramChgdConflicthdlrPriority  )
    static

    method to call, when the priority of a conflict handler was changed

    Definition at line 1096 of file conflict_graphanalysis.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPparamGetData(), SCIPparamGetInt(), and SCIPsetConflicthdlrPriority().

    ◆ SCIPconflicthdlrCopyInclude()

    SCIP_RETCODE SCIPconflicthdlrCopyInclude ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_SET set 
    )

    copies the given conflict handler to a new scip

    Parameters
    conflicthdlrconflict handler
    setSCIP_SET of SCIP to copy to

    Definition at line 1110 of file conflict_graphanalysis.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPconflicthdlrGetName(), and SCIPsetDebugMsg.

    Referenced by SCIPsetCopyPlugins().

    ◆ doConflicthdlrCreate()

    static SCIP_RETCODE doConflicthdlrCreate ( SCIP_CONFLICTHDLR **  conflicthdlr,
    SCIP_SET set,
    SCIP_MESSAGEHDLR messagehdlr,
    BMS_BLKMEM blkmem,
    const char *  name,
    const char *  desc,
    int  priority,
    SCIP_DECL_CONFLICTCOPY((*conflictcopy))  ,
    SCIP_DECL_CONFLICTFREE((*conflictfree))  ,
    SCIP_DECL_CONFLICTINIT((*conflictinit))  ,
    SCIP_DECL_CONFLICTEXIT((*conflictexit))  ,
    SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))  ,
    SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))  ,
    SCIP_DECL_CONFLICTEXEC((*conflictexec))  ,
    SCIP_CONFLICTHDLRDATA conflicthdlrdata 
    )
    static

    internal method for creating a conflict handler

    Parameters
    conflicthdlrpointer to conflict handler data structure
    setglobal SCIP settings
    messagehdlrmessage handler
    blkmemblock memory for parameter settings
    namename of conflict handler
    descdescription of conflict handler
    prioritypriority of the conflict handler
    conflicthdlrdataconflict handler data

    Definition at line 1130 of file conflict_graphanalysis.c.

    References BMSallocMemory, BMSclearMemory, BMSduplicateMemoryArray, FALSE, NULL, paramname, SCIP_ALLOC, SCIP_CALL, SCIP_CLOCKTYPE_DEFAULT, SCIP_MAXSTRLEN, SCIP_OKAY, SCIPclockCreate(), SCIPsetAddIntParam(), SCIPsnprintf(), and TRUE.

    Referenced by SCIPconflicthdlrCreate().

    ◆ SCIPconflicthdlrCreate()

    SCIP_RETCODE SCIPconflicthdlrCreate ( SCIP_CONFLICTHDLR **  conflicthdlr,
    SCIP_SET set,
    SCIP_MESSAGEHDLR messagehdlr,
    BMS_BLKMEM blkmem,
    const char *  name,
    const char *  desc,
    int  priority,
    SCIP_DECL_CONFLICTCOPY((*conflictcopy))  ,
    SCIP_DECL_CONFLICTFREE((*conflictfree))  ,
    SCIP_DECL_CONFLICTINIT((*conflictinit))  ,
    SCIP_DECL_CONFLICTEXIT((*conflictexit))  ,
    SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))  ,
    SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))  ,
    SCIP_DECL_CONFLICTEXEC((*conflictexec))  ,
    SCIP_CONFLICTHDLRDATA conflicthdlrdata 
    )

    creates a conflict handler

    Parameters
    conflicthdlrpointer to conflict handler data structure
    setglobal SCIP settings
    messagehdlrmessage handler
    blkmemblock memory for parameter settings
    namename of conflict handler
    descdescription of conflict handler
    prioritypriority of the conflict handler
    conflicthdlrdataconflict handler data

    Definition at line 1184 of file conflict_graphanalysis.c.

    References doConflicthdlrCreate(), NULL, SCIP_CALL_FINALLY, SCIP_OKAY, and SCIPconflicthdlrFree().

    Referenced by SCIPincludeConflicthdlr(), and SCIPincludeConflicthdlrBasic().

    ◆ SCIPconflicthdlrFree()

    SCIP_RETCODE SCIPconflicthdlrFree ( SCIP_CONFLICTHDLR **  conflicthdlr,
    SCIP_SET set 
    )

    calls destructor and frees memory of conflict handler

    Parameters
    conflicthdlrpointer to conflict handler data structure
    setglobal SCIP settings

    Definition at line 1215 of file conflict_graphanalysis.c.

    References BMSfreeMemory, BMSfreeMemoryArrayNull, NULL, SCIP_CALL, SCIP_OKAY, and SCIPclockFree().

    Referenced by SCIPconflicthdlrCreate().

    ◆ SCIPconflicthdlrInit()

    SCIP_RETCODE SCIPconflicthdlrInit ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_SET set 
    )

    calls initialization method of conflict handler

    Parameters
    conflicthdlrconflict handler
    setglobal SCIP settings

    Definition at line 1243 of file conflict_graphanalysis.c.

    References SCIP_Conflicthdlr::conflicttime, SCIP_Conflicthdlr::initialized, SCIP_Conflicthdlr::name, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPclockReset(), SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, SCIP_Conflicthdlr::setuptime, and TRUE.

    ◆ SCIPconflicthdlrExit()

    SCIP_RETCODE SCIPconflicthdlrExit ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_SET set 
    )

    calls exit method of conflict handler

    Parameters
    conflicthdlrconflict handler
    setglobal SCIP settings

    Definition at line 1280 of file conflict_graphanalysis.c.

    References FALSE, SCIP_Conflicthdlr::initialized, SCIP_Conflicthdlr::name, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, and SCIP_Conflicthdlr::setuptime.

    ◆ SCIPconflicthdlrInitsol()

    SCIP_RETCODE SCIPconflicthdlrInitsol ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_SET set 
    )

    informs conflict handler that the branch and bound process is being started

    Parameters
    conflicthdlrconflict handler
    setglobal SCIP settings

    Definition at line 1311 of file conflict_graphanalysis.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), and SCIP_Conflicthdlr::setuptime.

    ◆ SCIPconflicthdlrExitsol()

    SCIP_RETCODE SCIPconflicthdlrExitsol ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_SET set 
    )

    informs conflict handler that the branch and bound process data is being freed

    Parameters
    conflicthdlrconflict handler
    setglobal SCIP settings

    Definition at line 1335 of file conflict_graphanalysis.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), and SCIP_Conflicthdlr::setuptime.

    ◆ SCIPconflicthdlrExec()

    SCIP_RETCODE SCIPconflicthdlrExec ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_SET set,
    SCIP_NODE node,
    SCIP_NODE validnode,
    SCIP_BDCHGINFO **  bdchginfos,
    SCIP_Real relaxedbds,
    int  nbdchginfos,
    SCIP_CONFTYPE  conftype,
    SCIP_Bool  usescutoffbound,
    SCIP_Bool  resolved,
    SCIP_RESULT result 
    )

    calls execution method of conflict handler

    Parameters
    conflicthdlrconflict handler
    setglobal SCIP settings
    nodenode to add conflict constraint to
    validnodenode at which the constraint is valid
    bdchginfosbound change resembling the conflict set
    relaxedbdsarray with relaxed bounds which are efficient to create a valid conflict
    nbdchginfosnumber of bound changes in the conflict set
    conftypetype of the conflict
    usescutoffbounddepends the conflict on the cutoff bound?
    resolvedwas the conflict set already used to create a constraint?
    resultpointer to store the result of the callback method

    Definition at line 1359 of file conflict_graphanalysis.c.

    References SCIP_Conflicthdlr::conflicttime, SCIP_Conflicthdlr::name, NULL, SCIP_CALL, SCIP_CONSADDED, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_INVALIDRESULT, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, and SCIPnodeGetDepth().

    Referenced by conflictAddConflictCons().

    ◆ SCIPconflicthdlrSetCopy()

    void SCIPconflicthdlrSetCopy ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_DECL_CONFLICTCOPY((*conflictcopy))   
    )

    set copy method of conflict handler

    Parameters
    conflicthdlrconflict handler

    Definition at line 1427 of file conflict_graphanalysis.c.

    References NULL.

    Referenced by SCIPsetConflicthdlrCopy().

    ◆ SCIPconflicthdlrSetFree()

    void SCIPconflicthdlrSetFree ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_DECL_CONFLICTFREE((*conflictfree))   
    )

    set destructor of conflict handler

    Parameters
    conflicthdlrconflict handler

    Definition at line 1438 of file conflict_graphanalysis.c.

    References NULL.

    Referenced by SCIPsetConflicthdlrFree().

    ◆ SCIPconflicthdlrSetInit()

    void SCIPconflicthdlrSetInit ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_DECL_CONFLICTINIT((*conflictinit))   
    )

    set initialization method of conflict handler

    Parameters
    conflicthdlrconflict handler

    Definition at line 1450 of file conflict_graphanalysis.c.

    References NULL.

    Referenced by SCIPsetConflicthdlrInit().

    ◆ SCIPconflicthdlrSetExit()

    void SCIPconflicthdlrSetExit ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_DECL_CONFLICTEXIT((*conflictexit))   
    )

    set deinitialization method of conflict handler

    Parameters
    conflicthdlrconflict handler

    Definition at line 1461 of file conflict_graphanalysis.c.

    References NULL.

    Referenced by SCIPsetConflicthdlrExit().

    ◆ SCIPconflicthdlrSetInitsol()

    void SCIPconflicthdlrSetInitsol ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))   
    )

    set solving process initialization method of conflict handler

    Parameters
    conflicthdlrconflict handler

    Definition at line 1472 of file conflict_graphanalysis.c.

    References NULL.

    Referenced by SCIPsetConflicthdlrInitsol().

    ◆ SCIPconflicthdlrSetExitsol()

    void SCIPconflicthdlrSetExitsol ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))   
    )

    set solving process deinitialization method of conflict handler

    Parameters
    conflicthdlrconflict handler

    Definition at line 1483 of file conflict_graphanalysis.c.

    References NULL.

    Referenced by SCIPsetConflicthdlrExitsol().

    ◆ SCIPconflicthdlrSetPriority()

    void SCIPconflicthdlrSetPriority ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_SET set,
    int  priority 
    )

    sets priority of conflict handler

    Parameters
    conflicthdlrconflict handler
    setglobal SCIP settings
    prioritynew priority of the conflict handler

    Definition at line 1524 of file conflict_graphanalysis.c.

    References FALSE, NULL, and SCIP_Conflicthdlr::priority.

    Referenced by SCIPsetConflicthdlrPriority().

    ◆ SCIPconflicthdlrEnableOrDisableClocks()

    void SCIPconflicthdlrEnableOrDisableClocks ( SCIP_CONFLICTHDLR conflicthdlr,
    SCIP_Bool  enable 
    )

    enables or disables all clocks of conflicthdlr, depending on the value of the flag

    Parameters
    conflicthdlrthe conflict handler for which all clocks should be enabled or disabled
    enableshould the clocks of the conflict handler be enabled?

    Definition at line 1548 of file conflict_graphanalysis.c.

    References SCIP_Conflicthdlr::conflicttime, NULL, SCIPclockEnableOrDisable(), and SCIP_Conflicthdlr::setuptime.

    ◆ SCIPconflictGraphApplicable()

    SCIP_Bool SCIPconflictGraphApplicable ( SCIP_SET set)

    return TRUE if conflict graph analysis is applicable

    Parameters
    setglobal SCIP settings

    Definition at line 1580 of file conflict_graphanalysis.c.

    References FALSE, and TRUE.

    Referenced by SCIPconflictAnalyze(), and SCIPconflictAnalyzeRemainingBdchgs().

    ◆ conflictEnsureTmpbdchginfosMem()

    static SCIP_RETCODE conflictEnsureTmpbdchginfosMem ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    int  num 
    )
    static

    resizes the array of the temporary bound change informations to be able to store at least num bound change entries

    Parameters
    conflictconflict analysis data
    setglobal SCIP settings
    numminimal number of slots in arrays

    Definition at line 1597 of file conflict_graphanalysis.c.

    References BMSreallocMemoryArray, NULL, SCIP_ALLOC, SCIP_OKAY, SCIPsetCalcMemGrowSize(), SCIP_Conflict::tmpbdchginfos, and SCIP_Conflict::tmpbdchginfossize.

    Referenced by conflictCreateTmpBdchginfo().

    ◆ conflictCreateTmpBdchginfo()

    SCIP_RETCODE conflictCreateTmpBdchginfo ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_VAR var,
    SCIP_BOUNDTYPE  boundtype,
    SCIP_Real  oldbound,
    SCIP_Real  newbound,
    SCIP_BDCHGINFO **  bdchginfo 
    )

    creates a temporary bound change information object that is destroyed after the conflict sets are flushed

    Parameters
    conflictconflict analysis data
    blkmemblock memory
    setglobal SCIP settings
    varactive variable that changed the bounds
    boundtypetype of bound for var: lower or upper bound
    oldboundold value for bound
    newboundnew value for bound
    bdchginfopointer to store bound change information

    Definition at line 1620 of file conflict_graphanalysis.c.

    References conflictEnsureTmpbdchginfosMem(), SCIP_Conflict::ntmpbdchginfos, NULL, SCIP_CALL, SCIP_OKAY, SCIPbdchginfoCreate(), and SCIP_Conflict::tmpbdchginfos.

    Referenced by conflictCreateReconvergenceConss(), and SCIPconflictAnalyzeRemainingBdchgs().

    ◆ conflictFreeTmpBdchginfos()

    static void conflictFreeTmpBdchginfos ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem 
    )
    static

    frees all temporarily created bound change information data

    Parameters
    conflictconflict analysis data
    blkmemblock memory

    Definition at line 1644 of file conflict_graphanalysis.c.

    References SCIP_Conflict::ntmpbdchginfos, NULL, SCIPbdchginfoFree(), and SCIP_Conflict::tmpbdchginfos.

    Referenced by SCIPconflictFlushConss().

    ◆ incVSIDS()

    static SCIP_RETCODE incVSIDS ( SCIP_VAR var,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_BOUNDTYPE  boundtype,
    SCIP_Real  value,
    SCIP_Real  weight 
    )
    static

    increases the conflict score of the variable in the given direction

    Parameters
    varproblem variable
    blkmemblock memory
    setglobal SCIP settings
    statdynamic problem statistics
    boundtypetype of bound for which the score should be increased
    valuevalue of the bound
    weightweight of this VSIDS updates

    Definition at line 1660 of file conflict_graphanalysis.c.

    References SCIP_Stat::glbhistory, SCIP_Stat::glbhistorycrun, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BRANCHDIR_DOWNWARDS, SCIP_BRANCHDIR_UPWARDS, SCIP_CALL, SCIP_OKAY, SCIPhistoryIncVSIDS(), SCIPsetIsZero(), SCIPvarIncVSIDS(), and SCIP_Stat::vsidsweight.

    Referenced by conflictAddBound(), SCIPconflictAnalyzeRemainingBdchgs(), and updateStatistics().

    ◆ updateStatistics()

    static SCIP_RETCODE updateStatistics ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_CONFLICTSET conflictset,
    int  insertdepth 
    )
    static

    update conflict statistics

    Parameters
    conflictconflict analysis data
    blkmemblock memory
    setglobal SCIP settings
    statdynamic problem statistics
    conflictsetconflict set to add to the tree
    insertdepthdepth level at which the conflict set should be added

    Definition at line 1691 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, bound, SCIP_Stat::glbhistory, SCIP_Stat::glbhistorycrun, incVSIDS(), SCIP_Conflict::nappliedglbconss, SCIP_Conflict::nappliedglbliterals, SCIP_Conflict::nappliedlocconss, SCIP_Conflict::nappliedlocliterals, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_ConflictSet::relaxedbds, SCIP_BOUNDTYPE_LOWER, SCIP_BRANCHDIR_DOWNWARDS, SCIP_BRANCHDIR_UPWARDS, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbdchginfoGetBoundtype(), SCIPhistoryIncNActiveConflicts(), SCIPvarIncNActiveConflicts(), and SCIP_BdChgInfo::var.

    Referenced by conflictAddConflictCons().

    ◆ conflictAddConflictCons()

    static SCIP_RETCODE conflictAddConflictCons ( 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_CONFLICTSET conflictset,
    int  insertdepth,
    SCIP_Bool success 
    )
    static

    adds the given conflict set as conflict constraint to the problem

    Parameters
    conflictconflict analysis data
    blkmemblock memory
    setglobal SCIP settings
    statdynamic problem statistics
    transprobtransformed problem after presolve
    origproboriginal problem
    treebranch and bound tree
    reoptreoptimization data structure
    lpcurrent LP data
    branchcandbranching candidate storage
    eventqueueevent queue
    eventfilterglobal event filter
    cliquetableclique table data structure
    conflictsetconflict set to add to the tree
    insertdepthdepth level at which the conflict set should be added
    successpointer to store whether the addition was successful

    Definition at line 1742 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, bound, SCIP_BdChgInfo::boundtype, SCIP_ConflictSet::conflictdepth, conflictsetPrint(), SCIP_ConflictSet::conflicttype, detectImpliedBounds(), SCIP_Conflict::dIBclock, SCIP_Lp::diving, FALSE, h, SCIP_ConflictSet::hasrelaxonlyvar, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_Tree::path, SCIP_ConflictSet::relaxedbds, SCIP_Tree::root, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_CONFTYPE_UNKNOWN, SCIP_CONSADDED, SCIP_OKAY, SCIP_Real, SCIPboundtypeOpposite(), SCIPclockStart(), SCIPclockStop(), SCIPconflicthdlrExec(), SCIPconflicthdlrGetName(), SCIPconflicthdlrGetPriority(), SCIPdebugCheckConflict, SCIPnodeAddBoundchg(), SCIPsetDebugMsg, SCIPsetIsIntegral(), SCIPsetSortConflicthdlrs(), SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), SCIPvarGetName(), SCIPvarIsIntegral(), SCIP_Lp::strongbranching, TRUE, updateStatistics(), SCIP_ConflictSet::usescutoffbound, SCIP_ConflictSet::validdepth, and SCIP_BdChgInfo::var.

    Referenced by SCIPconflictFlushConss().

    ◆ conflictCalcMaxsize()

    int conflictCalcMaxsize ( SCIP_SET set,
    SCIP_PROB prob 
    )

    calculates the maximal size of conflict sets to be used

    Parameters
    setglobal SCIP settings
    probproblem data

    Definition at line 1896 of file conflict_graphanalysis.c.

    References MAX, SCIP_Prob::ncontvars, NULL, and SCIP_Prob::nvars.

    Referenced by SCIPconflictAnalyze(), SCIPconflictAnalyzeRemainingBdchgs(), and SCIPconflictFlushConss().

    ◆ SCIPconflictFlushConss()

    SCIP_RETCODE SCIPconflictFlushConss ( 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 
    )

    adds the collected conflict constraints to the corresponding nodes; the best set->conf_maxconss conflict constraints are added to the node of their validdepth; additionally (if not yet added, and if repropagation is activated), the conflict constraint that triggers the earliest repropagation is added to the node of its validdepth

    Parameters
    conflictconflict analysis data
    blkmemblock memory of transformed problem
    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

    Definition at line 1916 of file conflict_graphanalysis.c.

    References conflictAddConflictCons(), conflictCalcMaxsize(), SCIP_ConflictSet::conflictdepth, conflictFreeTmpBdchginfos(), conflictsetPrint(), SCIP_Conflict::conflictsets, SCIP_Node::depth, SCIP_ConflictSet::insertdepth, SCIP_ConflictSet::nbdchginfos, SCIP_Conflict::nconflictsets, NULL, SCIP_Tree::path, SCIP_Tree::pathlen, SCIP_ConflictSet::repropagate, SCIP_ConflictSet::repropdepth, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconflictsetFree(), SCIPdebug, SCIPdebugPrintf, SCIPnodeCutoff(), SCIPnodePropagateAgain(), SCIPsetDebugMsg, SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), SCIPvisualFoundConflict(), SCIP_ConflictSet::validdepth, and SCIP_Stat::visual.

    Referenced by conflictAnalyzeLP(), SCIPconflictAnalyzePseudo(), SCIPpropagateDomains(), and solveNode().

    ◆ conflictEnsureConflictsetsMem()

    static SCIP_RETCODE conflictEnsureConflictsetsMem ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    int  num 
    )
    static

    resizes conflictsets array to be able to store at least num entries

    Parameters
    conflictconflict analysis data
    setglobal SCIP settings
    numminimal number of slots in array

    Definition at line 2127 of file conflict_graphanalysis.c.

    References BMSreallocMemoryArray, SCIP_Conflict::conflictsets, SCIP_Conflict::conflictsetscores, SCIP_Conflict::conflictsetssize, NULL, SCIP_ALLOC, SCIP_OKAY, and SCIPsetCalcMemGrowSize().

    Referenced by conflictInsertConflictset().

    ◆ conflictInsertConflictset()

    static SCIP_RETCODE conflictInsertConflictset ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_CONFLICTSET **  conflictset 
    )
    static

    inserts conflict set into sorted conflictsets array and deletes the conflict set pointer

    Parameters
    conflictconflict analysis data
    blkmemblock memory of transformed problem
    setglobal SCIP settings
    conflictsetpointer to conflict set to insert

    Definition at line 2152 of file conflict_graphanalysis.c.

    References conflictEnsureConflictsetsMem(), conflictsetCalcConflictDepth(), conflictsetCalcScore(), conflictsetIsRedundant(), conflictsetPrint(), SCIP_Conflict::conflictsets, SCIP_Conflict::conflictsetscores, MIN, SCIP_Conflict::nconflictsets, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPconflictsetFree(), SCIPdebug, and SCIPsetDebugMsg.

    Referenced by conflictAddConflictset().

    ◆ conflictMarkBoundCheckPresence()

    static SCIP_Bool conflictMarkBoundCheckPresence ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    SCIP_BDCHGINFO bdchginfo,
    SCIP_Real  relaxedbd 
    )
    static

    marks bound to be present in the current conflict and returns whether a bound which is at least as tight was already member of the current conflict (i.e., the given bound change does not need to be added)

    Parameters
    conflictconflict analysis data
    setglobal SCIP settings
    bdchginfobound change to add to the conflict set
    relaxedbdrelaxed bound

    Definition at line 2248 of file conflict_graphanalysis.c.

    References SCIP_Var::conflictlb, SCIP_Var::conflictlbcount, SCIP_Var::conflictrelaxedlb, SCIP_Var::conflictrelaxedub, SCIP_Var::conflictub, SCIP_Var::conflictubcount, SCIP_Conflict::count, FALSE, MAX, MIN, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_Real, SCIPABORT, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPerrorMessage, SCIPsetDebugMsg, SCIPvarGetName(), and TRUE.

    Referenced by conflictAddConflictBound(), and conflictQueueBound().

    ◆ betterBoundInResolutionQueue()

    static SCIP_Bool betterBoundInResolutionQueue ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    SCIP_BDCHGINFO bdchginfo 
    )
    static

    marks bound to be present in the current conflict and returns whether a bound which is at least as tight was already member of the current conflict (i.e., the given bound change does not need to be added)

    Parameters
    conflictconflict analysis data
    setglobal SCIP settings
    bdchginfobound change to add to the conflict set

    Definition at line 2338 of file conflict_graphanalysis.c.

    References SCIP_Conflict::conflictvarslbs, SCIP_Conflict::conflictvarsubs, FALSE, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_Real, SCIPABORT, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPerrorMessage, SCIPsetDebugMsg, SCIPvarGetName(), SCIPvarGetProbindex(), and TRUE.

    Referenced by conflictQueueBound().

    ◆ conflictAddConflictBound()

    static SCIP_RETCODE conflictAddConflictBound ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_BDCHGINFO bdchginfo,
    SCIP_Real  relaxedbd 
    )
    static

    puts bound change into the current conflict set

    Parameters
    conflictconflict analysis data
    blkmemblock memory of transformed problem
    setglobal SCIP settings
    bdchginfobound change to add to the conflict set
    relaxedbdrelaxed bound

    Definition at line 2387 of file conflict_graphanalysis.c.

    References conflictMarkBoundCheckPresence(), SCIP_Conflict::conflictset, conflictsetAddBound(), NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetDepth(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPbdchginfoIsRedundant(), SCIPsetDebugMsg, SCIPsetIsGE(), SCIPsetIsLE(), and SCIPvarGetName().

    Referenced by conflictAnalyze(), conflictCreateReconvergenceConss(), and SCIPconflictAnalyzeRemainingBdchgs().

    ◆ isBoundchgUseless()

    static SCIP_Bool isBoundchgUseless ( SCIP_SET set,
    SCIP_BDCHGINFO bdchginfo 
    )
    static

    returns whether the negation of the given bound change would lead to a globally valid literal

    Parameters
    setglobal SCIP settings
    bdchginfobound change information

    Definition at line 2430 of file conflict_graphanalysis.c.

    References bound, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_Real, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPsetIsFeasGE(), SCIPsetIsFeasLE(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), and SCIPvarIsIntegral().

    Referenced by conflictQueueBound().

    ◆ conflictQueueBound()

    static SCIP_RETCODE conflictQueueBound ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    SCIP_BDCHGINFO bdchginfo,
    SCIP_Real  relaxedbd,
    SCIP_Bool success 
    )
    static

    adds given bound change information to the conflict candidate queue

    Parameters
    conflictconflict analysis data
    setglobal SCIP settings
    bdchginfobound change information
    relaxedbdrelaxed bound
    successwas the bound change successfully added to the queue?

    Definition at line 2450 of file conflict_graphanalysis.c.

    References SCIP_Conflict::bdchgonlyconfqueue, SCIP_Conflict::bdchgonlyresqueue, SCIP_Conflict::bdchgqueue, betterBoundInResolutionQueue(), conflictMarkBoundCheckPresence(), FALSE, SCIP_Conflict::forcedbdchgqueue, isBoundchgUseless(), NULL, SCIP_Conflict::resbdchgqueue, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPbdchginfoIsRedundant(), SCIPpqueueInsert(), SCIPsetIsGE(), SCIPsetIsLE(), SCIPvarIsBinary(), and TRUE.

    Referenced by conflictAddBound(), and conflictCreateReconvergenceConss().

    ◆ conflictAddBound()

    static SCIP_RETCODE conflictAddBound ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_VAR var,
    SCIP_BOUNDTYPE  boundtype,
    SCIP_BDCHGINFO bdchginfo,
    SCIP_Real  relaxedbd 
    )
    static

    ◆ SCIPconflictAnalyzeRemainingBdchgs()

    SCIP_RETCODE SCIPconflictAnalyzeRemainingBdchgs ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_PROB prob,
    SCIP_TREE tree,
    SCIP_Bool  diving,
    int *  lbchginfoposs,
    int *  ubchginfoposs,
    int *  nconss,
    int *  nliterals,
    int *  nreconvconss,
    int *  nreconvliterals 
    )

    applies conflict analysis starting with given bound changes, that could not be undone during previous infeasibility analysis

    Parameters
    conflictconflict analysis data
    blkmemblock memory of transformed problem
    setglobal SCIP settings
    statproblem statistics
    probproblem data
    treebranch and bound tree
    divingare we in strong branching or diving mode?
    lbchginfoposspositions of currently active lower bound change information in variables' arrays
    ubchginfoposspositions of currently active upper bound change information in variables' arrays
    nconsspointer to store the number of generated conflict constraints
    nliteralspointer to store the number of literals in generated conflict constraints
    nreconvconsspointer to store the number of generated reconvergence constraints
    nreconvliteralspointer to store the number of literals generated reconvergence constraints

    Definition at line 2575 of file conflict_graphanalysis.c.

    References conflictAddBound(), conflictAddConflictBound(), conflictAnalyze(), conflictCalcMaxsize(), conflictCreateTmpBdchginfo(), SCIP_Conflict::conflictset, SCIP_ConflictSet::conflicttype, FALSE, incVSIDS(), SCIP_Var::lbchginfos, SCIP_Var::nlbchginfos, SCIP_Var::nubchginfos, NULL, SCIP_Prob::nvars, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoIsRedundant(), SCIPconflictGraphApplicable(), SCIPconflictInit(), SCIPsetDebugMsg, SCIPvarGetLbLocal(), SCIPvarGetLbLP(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetType(), SCIPvarGetUbLocal(), SCIPvarGetUbLP(), SCIP_Var::ubchginfos, SCIP_ConflictSet::usescutoffbound, and SCIP_Prob::vars.

    Referenced by conflictAnalyzeLP(), and SCIPconflictAnalyzePseudo().

    ◆ bdchginfoIsInvalid()

    SCIP_Bool bdchginfoIsInvalid ( SCIP_CONFLICT conflict,
    SCIP_BDCHGINFO bdchginfo 
    )

    check if the bound change info (which is the potential next candidate which is queued) is valid for the current conflict analysis; a bound change info can get invalid if after this one was added to the queue, a weaker bound change was added to the queue (due the bound widening idea) which immediately makes this bound change redundant; due to the priority we did not removed that bound change info since that cost O(log(n)); hence we have to skip/ignore it now

    The following situations can occur before for example the bound change info (x >= 3) is potentially popped from the queue.

    Postcondition: the reason why (x >= 3) was queued is that at this time point no lower bound of x was involved yet in the current conflict or the lower bound which was involved until then was stronger, e.g., (x >= 2).

    1) during the time until (x >= 3) gets potentially popped no weaker lower bound was added to the queue, in that case the conflictlbcount is valid and conflictlb is 3; that is (var->conflictlbcount == conflict->count && var->conflictlb == 3)

    2) a weaker bound change info gets queued (e.g., x >= 4); this bound change is popped before (x >= 3) since it has higher priority (which is the time stamp of the bound change info and (x >= 4) has to be done after (x >= 3) during propagation or branching)

    a) if (x >= 4) is popped and added to the conflict set the conflictlbcount is still valid and conflictlb is at most 4; that is (var->conflictlbcount == conflict->count && var->conflictlb >= 4); it follows that any bound change info which is stronger than (x >= 4) gets ignored (for example x >= 2)

    b) if (x >= 4) is popped and resolved without introducing a new lower bound on x until (x >= 3) is a potentially candidate the conflictlbcount indicates that bound change is currently not present; that is (var->conflictlbcount != conflict->count)

    c) if (x >= 4) is popped and resolved and a new lower bound on x (e.g., x >= 2) is introduced until (x >= 3) is pooped, the conflictlbcount indicates that bound change is currently present; that is (var->conflictlbcount == conflict->count); however the (x >= 3) only has be explained if conflictlb matches that one; that is (var->conflictlb == bdchginfo->newbound); otherwise it redundant/invalid.

    Parameters
    conflictconflict analysis data
    bdchginfobound change information

    Definition at line 2749 of file conflict_graphanalysis.c.

    References SCIP_Var::conflictlb, SCIP_Var::conflictlbcount, SCIP_Var::conflictub, SCIP_Var::conflictubcount, SCIP_Conflict::count, FALSE, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPvarIsBinary(), and TRUE.

    Referenced by conflictFirstCand(), conflictRemoveCand(), conflictResolveBound(), and conflictsetAddBounds().

    ◆ conflictsetAddBounds()

    static SCIP_RETCODE conflictsetAddBounds ( SCIP_CONFLICT conflict,
    SCIP_CONFLICTSET conflictset,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_BDCHGINFO **  bdchginfos,
    int  nbdchginfos 
    )
    static

    ◆ conflictRemoveCand()

    ◆ conflictFirstCand()

    ◆ conflictAddConflictset()

    static SCIP_RETCODE conflictAddConflictset ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_TREE tree,
    int  validdepth,
    SCIP_Bool  diving,
    SCIP_Bool  repropagate,
    SCIP_Bool success,
    int *  nliterals 
    )
    static

    adds the current conflict set (extended by all remaining bound changes in the queue) to the pool of conflict sets

    Parameters
    conflictconflict analysis data
    blkmemblock memory of transformed problem
    setglobal SCIP settings
    statdynamic problem statistics
    treebranch and bound tree
    validdepthminimal depth level at which the conflict set is valid
    divingare we in strong branching or diving mode?
    repropagateshould the constraint trigger a repropagation?
    successpointer to store whether the conflict set is valid
    nliteralspointer to store the number of literals in the generated conflictset

    Definition at line 3059 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, SCIP_Conflict::bdchgqueue, conflictInsertConflictset(), SCIP_Conflict::conflictset, conflictsetAddBounds(), conflictsetCalcInsertDepth(), conflictsetCopy(), FALSE, SCIP_Conflict::forcedbdchgqueue, SCIP_ConflictSet::insertdepth, MAX, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_Tree::path, SCIP_Tree::pathlen, SCIP_ConflictSet::relaxedbds, SCIP_ConflictSet::repropagate, SCIP_CALL, SCIP_OKAY, SCIPconflictsetFree(), SCIPdebugCheckConflict, SCIPpqueueElems(), SCIPpqueueNElems(), SCIPsetDebugMsg, SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), TRUE, and SCIP_ConflictSet::validdepth.

    Referenced by conflictAnalyze(), and conflictCreateReconvergenceConss().

    ◆ conflictResolveBound()

    static SCIP_RETCODE conflictResolveBound ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    SCIP_BDCHGINFO bdchginfo,
    SCIP_Real  relaxedbd,
    int  validdepth,
    SCIP_Bool resolved 
    )
    static

    tries to resolve given bound change

    • resolutions on local constraints are only applied, if the constraint is valid at the current minimal valid depth level, because this depth level is the topmost level to add the conflict constraint to anyways
    Note
    it is sufficient to explain the relaxed bound change
    Parameters
    conflictconflict analysis data
    setglobal SCIP settings
    bdchginfobound change to resolve
    relaxedbdthe relaxed bound
    validdepthminimal depth level at which the conflict is valid
    resolvedpointer to store whether the bound change was resolved

    Definition at line 3158 of file conflict_graphanalysis.c.

    References bdchginfoIsInvalid(), SCIP_ConflictSet::bdchginfos, SCIP_Conflict::bdchgqueue, SCIP_Conflict::conflictset, FALSE, SCIP_Conflict::forcedbdchgqueue, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_ConflictSet::relaxedbds, SCIP_BOUNDCHGTYPE_BRANCHING, SCIP_BOUNDCHGTYPE_CONSINFER, SCIP_BOUNDCHGTYPE_PROPINFER, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIP_SUCCESS, SCIP_VARSTATUS_AGGREGATED, SCIP_VARSTATUS_MULTAGGR, SCIP_VARSTATUS_NEGATED, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetChgtype(), SCIPbdchginfoGetDepth(), SCIPbdchginfoGetIdx(), SCIPbdchginfoGetInferBoundtype(), SCIPbdchginfoGetInferCons(), SCIPbdchginfoGetInferInfo(), SCIPbdchginfoGetInferProp(), SCIPbdchginfoGetInferVar(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetPos(), SCIPbdchginfoGetRelaxedBound(), SCIPbdchginfoGetVar(), SCIPbdchginfoIsRedundant(), SCIPconsGetName(), SCIPconsGetValidDepth(), SCIPconsIsGlobal(), SCIPconsResolvePropagation(), SCIPerrorMessage, SCIPgetVarBdAtIndex(), SCIPpqueueElems(), SCIPpqueueNElems(), SCIPpropGetName(), SCIPpropResolvePropagation(), SCIPsetDebugMsg, SCIPsetDebugMsgPrint, SCIPvarGetMultaggrNVars(), SCIPvarGetName(), SCIPvarGetProbvarSum(), SCIPvarGetStatus(), SCIPvarGetType(), SCIPvarIsActive(), and TRUE.

    Referenced by conflictAnalyze(), and conflictCreateReconvergenceConss().

    ◆ conflictClear()

    static void conflictClear ( SCIP_CONFLICT conflict)
    static

    clears the conflict queue and the current conflict set

    Parameters
    conflictconflict analysis data

    Definition at line 3368 of file conflict_graphanalysis.c.

    References SCIP_Conflict::bdchgqueue, SCIP_Conflict::conflictset, conflictsetClear(), SCIP_Conflict::forcedbdchgqueue, NULL, and SCIPpqueueClear().

    Referenced by conflictAnalyze(), conflictCreateReconvergenceConss(), and SCIPconflictInit().

    ◆ conflictClearResolution()

    static void conflictClearResolution ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    SCIP_PROB prob 
    )
    static

    clears the resolution conflict analysis queues and the bounds leading to conflict

    Parameters
    conflictconflict analysis data
    setglobal SCIP settings
    probproblem data

    Definition at line 3382 of file conflict_graphanalysis.c.

    References BMSreallocMemoryArray, SCIP_Conflict::conflictprobnvars, SCIP_Conflict::conflictvarslbs, SCIP_Conflict::conflictvarsubs, NULL, SCIP_Conflict::resbdchgqueue, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIPpqueueClear(), and SCIPprobGetNVars().

    Referenced by SCIPconflictInit().

    ◆ SCIPconflictInit()

    SCIP_RETCODE SCIPconflictInit ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_PROB prob,
    SCIP_CONFTYPE  conftype,
    SCIP_Bool  usescutoffbound 
    )

    ◆ convertToActiveVar()

    static SCIP_RETCODE convertToActiveVar ( SCIP_VAR **  var,
    SCIP_SET set,
    SCIP_BOUNDTYPE boundtype,
    SCIP_Real bound 
    )
    static

    convert variable and bound change to active variable

    Parameters
    varpointer to variable
    setglobal SCIP settings
    boundtypepointer to type of bound that was changed: lower or upper bound
    boundpointer to bound to convert, or NULL

    Definition at line 3491 of file conflict_graphanalysis.c.

    References bound, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_FIXED, SCIPboundtypeOpposite(), SCIPvarGetProbvarSum(), and SCIPvarGetStatus().

    Referenced by SCIPconflictAddBound(), SCIPconflictAddRelaxedBound(), and SCIPconflictIsVarUsed().

    ◆ bdchginfoIsResolvable()

    static SCIP_Bool bdchginfoIsResolvable ( SCIP_BDCHGINFO bdchginfo)
    static

    returns whether bound change has a valid reason that can be resolved in conflict analysis

    Parameters
    bdchginfobound change information

    Definition at line 3526 of file conflict_graphanalysis.c.

    References NULL, SCIP_BOUNDCHGTYPE_CONSINFER, SCIP_BOUNDCHGTYPE_PROPINFER, SCIPbdchginfoGetChgtype(), SCIPbdchginfoGetInferProp(), and SCIPbdchginfoIsRedundant().

    Referenced by addCand(), and conflictCreateReconvergenceConss().

    ◆ conflictCreateReconvergenceConss()

    static SCIP_RETCODE conflictCreateReconvergenceConss ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_PROB prob,
    SCIP_TREE tree,
    SCIP_Bool  diving,
    int  validdepth,
    SCIP_BDCHGINFO firstuip,
    int *  nreconvconss,
    int *  nreconvliterals 
    )
    static

    if only one conflicting bound change of the last depth level was used, and if this can be resolved, creates GRASP-like reconvergence conflict constraints in the conflict graph up to the branching variable of this depth level

    Parameters
    conflictconflict analysis data
    blkmemblock memory of transformed problem
    setglobal SCIP settings
    statproblem statistics
    probproblem data
    treebranch and bound tree
    divingare we in strong branching or diving mode?
    validdepthminimal depth level at which the initial conflict set is valid
    firstuipfirst UIP of conflict graph
    nreconvconsspointer to store the number of generated reconvergence constraints
    nreconvliteralspointer to store the number of literals generated reconvergence constraints

    Definition at line 3544 of file conflict_graphanalysis.c.

    References bdchginfoIsResolvable(), SCIP_ConflictSet::bdchginfos, SCIP_Conflict::bdchgqueue, conflictAddConflictBound(), conflictAddConflictset(), conflictClear(), conflictCreateTmpBdchginfo(), conflictFirstCand(), conflictQueueBound(), conflictRemoveCand(), conflictResolveBound(), SCIP_Conflict::conflictset, SCIP_ConflictSet::conflicttype, FALSE, SCIP_Conflict::forcedbdchgqueue, MIN, SCIP_ConflictSet::nbdchginfos, NULL, SCIP_Tree::path, SCIP_Tree::pathlen, SCIP_ConflictSet::relaxedbds, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetDepth(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetPos(), SCIPbdchginfoGetRelaxedBound(), SCIPbdchginfoGetVar(), SCIPbdchginfoIsRedundant(), SCIPboundtypeOpposite(), SCIPconflictInit(), SCIPdebugCheckConflictFrontier, SCIPpqueueNElems(), SCIPsetDebugMsg, SCIPsetIsIntegral(), SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), SCIPvarGetName(), SCIPvarIsActive(), SCIPvarIsIntegral(), and SCIP_ConflictSet::usescutoffbound.

    Referenced by conflictAnalyze().

    ◆ conflictAnalyze()

    SCIP_RETCODE conflictAnalyze ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_PROB prob,
    SCIP_TREE tree,
    SCIP_Bool  diving,
    int  validdepth,
    SCIP_Bool  mustresolve,
    int *  nconss,
    int *  nliterals,
    int *  nreconvconss,
    int *  nreconvliterals 
    )

    analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of the resulting conflict set; afterwards the conflict queue and the conflict set is cleared

    Parameters
    conflictconflict analysis data
    blkmemblock memory of transformed problem
    setglobal SCIP settings
    statproblem statistics
    probproblem data
    treebranch and bound tree
    divingare we in strong branching or diving mode?
    validdepthminimal depth level at which the initial conflict set is valid
    mustresolveshould the conflict set only be used, if a resolution was applied?
    nconsspointer to store the number of generated conflict constraints
    nliteralspointer to store the number of literals in generated conflict constraints
    nreconvconsspointer to store the number of generated reconvergence constraints
    nreconvliteralspointer to store the number of literals generated reconvergence constraints

    Definition at line 3780 of file conflict_graphanalysis.c.

    References SCIP_ConflictSet::bdchginfos, SCIP_Conflict::bdchgqueue, SCIP_DomChgBound::boundchgs, conflictAddConflictBound(), conflictAddConflictset(), conflictClear(), conflictCreateReconvergenceConss(), conflictFirstCand(), conflictRemoveCand(), conflictResolveBound(), SCIP_Conflict::conflictset, SCIP_ConflictSet::conflicttype, SCIP_Node::domchg, SCIP_DomChg::domchgbound, FALSE, SCIP_Conflict::forcedbdchgqueue, MIN, SCIP_ConflictSet::nbdchginfos, SCIP_DomChgBound::nboundchgs, NULL, SCIP_Tree::path, SCIP_Tree::pathlen, SCIP_ConflictSet::relaxedbds, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetDepth(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetPos(), SCIPbdchginfoGetRelaxedBound(), SCIPbdchginfoGetVar(), SCIPbdchginfoHasInferenceReason(), SCIPbdchginfoIsRedundant(), SCIPdebugCheckConflictFrontier, SCIPpqueueNElems(), SCIPsetAllocBufferArray, SCIPsetDebugMsg, SCIPsetFreeBufferArray, SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarIsActive(), and TRUE.

    Referenced by SCIPconflictAnalyze(), and SCIPconflictAnalyzeRemainingBdchgs().

    ◆ calcBdchgScore()

    static SCIP_Real calcBdchgScore ( SCIP_Real  prooflhs,
    SCIP_Real  proofact,
    SCIP_Real  proofactdelta,
    SCIP_Real  proofcoef,
    int  depth,
    int  currentdepth,
    SCIP_VAR var,
    SCIP_SET set 
    )
    static

    calculates the score of a bound change within a conflict

    Parameters
    prooflhslhs of proof constraint
    proofactactivity of the proof constraint
    proofactdeltaactivity change
    proofcoefcoefficient in proof constraint
    depthbound change depth
    currentdepthcurrent depth
    varvariable corresponding to bound change
    setglobal SCIP settings

    Definition at line 4065 of file conflict_graphanalysis.c.

    References MAX, NULL, SCIP_LOCKTYPE_MODEL, SCIP_Real, SCIP_VARSTATUS_COLUMN, SCIPcolGetNNonz(), SCIPvarGetCol(), SCIPvarGetNLocksDownType(), SCIPvarGetNLocksUpType(), and SCIPvarGetStatus().

    Referenced by addCand().

    ◆ ensureCandsSize()

    static SCIP_RETCODE ensureCandsSize ( SCIP_SET set,
    SCIP_VAR ***  cands,
    SCIP_Real **  candscores,
    SCIP_Real **  newbounds,
    SCIP_Real **  proofactdeltas,
    int *  candssize,
    int  num 
    )
    static

    ensures, that candidate array can store at least num entries

    Parameters
    setglobal SCIP settings
    candspointer to candidate array
    candscorespointer to candidate score array
    newboundspointer to candidate new bounds array
    proofactdeltaspointer to candidate proof delta array
    candssizepointer to size of array
    numminimal number of candidates to store in array

    Definition at line 4110 of file conflict_graphanalysis.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPsetCalcMemGrowSize(), and SCIPsetReallocBufferArray.

    Referenced by addCand().

    ◆ skipRedundantBdchginfos()

    static void skipRedundantBdchginfos ( SCIP_VAR var,
    int *  lbchginfopos,
    int *  ubchginfopos 
    )
    static

    after changing the global bound of a variable, the bdchginfos that are now redundant are replaced with oldbound = newbound = global bound; if the current bdchginfo is of such kind, the bound is equal to the global bound and we can ignore it by installing a -1 as the corresponding bound change info position

    Parameters
    varproblem variable
    lbchginfopospointer to lower bound change information position
    ubchginfopospointer to upper bound change information position

    Definition at line 4144 of file conflict_graphanalysis.c.

    References SCIP_Var::lbchginfos, SCIP_BdChgInfo::newbound, SCIP_Var::nlbchginfos, SCIP_Var::nubchginfos, NULL, SCIP_BdChgInfo::oldbound, SCIP_BdChgInfo::redundant, SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), and SCIP_Var::ubchginfos.

    Referenced by SCIPundoBdchgsProof().

    ◆ SCIPconflictAddBound()

    SCIP_RETCODE SCIPconflictAddBound ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_VAR var,
    SCIP_BOUNDTYPE  boundtype,
    SCIP_BDCHGIDX bdchgidx 
    )

    adds variable's bound to conflict candidate queue

    Parameters
    conflictconflict analysis data
    blkmemblock memory
    setglobal SCIP settings
    statdynamic problem statistics
    varproblem variable
    boundtypetype of bound that was changed: lower or upper bound
    bdchgidxbound change index (time stamp of bound change), or NULL for current time

    Definition at line 4175 of file conflict_graphanalysis.c.

    References conflictAddBound(), convertToActiveVar(), FALSE, NULL, scalars, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_FIXED, SCIP_VARSTATUS_MULTAGGR, SCIPbdchgidxIsEarlier(), SCIPbdchginfoGetIdx(), SCIPbdchginfoGetNewbound(), SCIPboundtypeOpposite(), SCIPconflictAddBound(), SCIPvarGetBdchgInfo(), SCIPvarGetMultaggrNVars(), SCIPvarGetMultaggrScalars(), SCIPvarGetMultaggrVars(), SCIPvarGetStatus(), and SCIPvarIsActive().

    Referenced by SCIPaddConflictBd(), SCIPaddConflictBinvar(), SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPconflictAddBound(), and SCIPconflictAddRelaxedBound().

    ◆ SCIPconflictAddRelaxedBound()

    SCIP_RETCODE SCIPconflictAddRelaxedBound ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_VAR var,
    SCIP_BOUNDTYPE  boundtype,
    SCIP_BDCHGIDX bdchgidx,
    SCIP_Real  relaxedbd 
    )

    ◆ SCIPconflictIsVarUsed()

    SCIP_RETCODE SCIPconflictIsVarUsed ( SCIP_CONFLICT conflict,
    SCIP_VAR var,
    SCIP_SET set,
    SCIP_BOUNDTYPE  boundtype,
    SCIP_BDCHGIDX bdchgidx,
    SCIP_Bool used 
    )

    checks if the given variable is already part of the current conflict set or queued for resolving with the same or even stronger bound

    Parameters
    conflictconflict analysis data
    varproblem variable
    setglobal SCIP settings
    boundtypetype of bound for which the score should be increased
    bdchgidxbound change index (time stamp of bound change), or NULL for current time
    usedpointer to store if the variable is already used

    Definition at line 4400 of file conflict_graphanalysis.c.

    References SCIP_Var::conflictlb, SCIP_Var::conflictlbcount, SCIP_Var::conflictub, SCIP_Var::conflictubcount, convertToActiveVar(), SCIP_Conflict::count, FALSE, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_FIXED, SCIP_VARSTATUS_MULTAGGR, SCIPABORT, SCIPerrorMessage, SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPsetDebugMsg, SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarIsActive(), and TRUE.

    Referenced by SCIPisConflictVarUsed().

    ◆ addBdchg()

    static SCIP_RETCODE addBdchg ( SCIP_SET set,
    SCIP_VAR var,
    SCIP_Real  newlb,
    SCIP_Real  newub,
    SCIP_LPBDCHGS oldlpbdchgs,
    SCIP_LPBDCHGS relaxedlpbdchgs,
    SCIP_LPI lpi 
    )
    static

    inserts variable's new bounds into bound change arrays

    Parameters
    setglobal SCIP settings
    varvariable to change the LP bounds for
    newlbnew lower bound
    newubnew upper bound
    oldlpbdchgsold LP bound changes used for reset the LP bound change
    relaxedlpbdchgsrelaxed LP bound changes used for reset the LP bound change
    lpipointer to LPi to access infinity of LP solver; necessary to set correct value

    Definition at line 4459 of file conflict_graphanalysis.c.

    References SCIP_LPBdChgs::bdchgcolinds, SCIP_LPBdChgs::bdchginds, SCIP_LPBdChgs::bdchglbs, SCIP_LPBdChgs::bdchgubs, SCIP_LPBdChgs::nbdchgs, NULL, SCIP_OKAY, SCIP_VARSTATUS_COLUMN, SCIPcolGetLPPos(), SCIPlpiInfinity(), SCIPlpiIsInfinity(), SCIPsetIsEQ(), SCIPsetIsInfinity(), SCIPvarGetCol(), SCIPvarGetLbLP(), SCIPvarGetStatus(), SCIPvarGetUbLP(), TRUE, and SCIP_LPBdChgs::usedcols.

    Referenced by SCIPundoBdchgsProof().

    ◆ addCand()

    static SCIP_RETCODE addCand ( SCIP_SET set,
    int  currentdepth,
    SCIP_VAR var,
    int  lbchginfopos,
    int  ubchginfopos,
    SCIP_Real  proofcoef,
    SCIP_Real  prooflhs,
    SCIP_Real  proofact,
    SCIP_VAR ***  cands,
    SCIP_Real **  candscores,
    SCIP_Real **  newbounds,
    SCIP_Real **  proofactdeltas,
    int *  candssize,
    int *  ncands,
    int  firstcand 
    )
    static

    adds variable to candidate list, if the current best bound corresponding to the proof coefficient is local; returns the array position in the candidate list, where the new candidate was inserted, or -1 if the variable can relaxed to global bounds immediately without increasing the proof's activity; the candidates are sorted with respect to the following two criteria:

    • prefer bound changes that have been applied deeper in the tree, to get a more global conflict
    • prefer variables with small Farkas coefficient to get rid of as many bound changes as possible
    Parameters
    setglobal SCIP settings
    currentdepthcurrent depth in the tree
    varvariable to add to candidate array
    lbchginfopospositions of currently active lower bound change information in variable's array
    ubchginfopospositions of currently active upper bound change information in variable's array
    proofcoefcoefficient of variable in infeasibility/bound proof
    prooflhsleft hand side of infeasibility/bound proof
    proofactactivity of infeasibility/bound proof row
    candspointer to candidate array for undoing bound changes
    candscorespointer to candidate score array for undoing bound changes
    newboundspointer to candidate new bounds array for undoing bound changes
    proofactdeltaspointer to proof activity increase array for undoing bound changes
    candssizepointer to size of cands arrays
    ncandspointer to count number of candidates in bound change list
    firstcandposition of first unprocessed bound change candidate

    Definition at line 4546 of file conflict_graphanalysis.c.

    References SCIP_BdChgInfo::bdchgidx, bdchginfoIsResolvable(), calcBdchgScore(), SCIP_BdChgIdx::depth, ensureCandsSize(), FALSE, SCIP_Var::lbchginfos, SCIP_BdChgInfo::newbound, SCIP_Var::nlbchginfos, SCIP_Var::nubchginfos, NULL, SCIP_BdChgInfo::oldbound, QUAD, QUAD_TO_DBL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPsetDebugMsg, SCIPsetIsGT(), SCIPsetIsZero(), SCIPvarGetLbLocal(), SCIPvarGetLbLP(), SCIPvarGetName(), SCIPvarGetUbLocal(), SCIPvarGetUbLP(), SCIPvarIsBinary(), and SCIP_Var::ubchginfos.

    Referenced by SCIPundoBdchgsProof().

    ◆ SCIPundoBdchgsProof()

    SCIP_RETCODE SCIPundoBdchgsProof ( SCIP_SET set,
    SCIP_PROB prob,
    int  currentdepth,
    SCIP_Real proofcoefs,
    SCIP_Real  prooflhs,
    SCIP_Real proofact,
    SCIP_Real curvarlbs,
    SCIP_Real curvarubs,
    int *  lbchginfoposs,
    int *  ubchginfoposs,
    SCIP_LPBDCHGS oldlpbdchgs,
    SCIP_LPBDCHGS relaxedlpbdchgs,
    SCIP_Bool resolve,
    SCIP_LPI lpi 
    )

    undoes bound changes on variables, still leaving the given infeasibility proof valid

    Parameters
    setglobal SCIP settings
    probproblem data
    currentdepthcurrent depth in the tree
    proofcoefscoefficients in infeasibility proof
    prooflhsleft hand side of proof
    proofactcurrent activity of proof
    curvarlbscurrent lower bounds of active problem variables
    curvarubscurrent upper bounds of active problem variables
    lbchginfoposspositions of currently active lower bound change information in variables' arrays
    ubchginfoposspositions of currently active upper bound change information in variables' arrays
    oldlpbdchgsold LP bound changes used for reset the LP bound change, or NULL
    relaxedlpbdchgsrelaxed LP bound changes used for reset the LP bound change, or NULL
    resolvepointer to store whether the changed LP should be resolved again, or NULL
    lpipointer to LPi to access infinity of LP solver; necessary to set correct values

    Definition at line 4678 of file conflict_graphanalysis.c.

    References addBdchg(), addCand(), FALSE, NULL, SCIP_Prob::nvars, QUAD, QUAD_TO_DBL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPsetAllocBufferArray, SCIPsetDebugMsg, SCIPsetFreeBufferArray, SCIPsetIsEQ(), SCIPsetIsFeasGT(), SCIPsetIsGT(), SCIPsetIsLT(), SCIPsetIsNegative(), SCIPsetIsPositive(), SCIPsetIsZero(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetProbindex(), SCIPvarGetUbGlobal(), SCIPvarIsInLP(), skipRedundantBdchginfos(), TRUE, and SCIP_Prob::vars.

    Referenced by SCIPconflictAnalyzePseudo(), undoBdchgsDualfarkas(), and undoBdchgsDualsol().

    ◆ undoBdchgsDualfarkas()

    static SCIP_RETCODE undoBdchgsDualfarkas ( SCIP_SET set,
    SCIP_PROB prob,
    SCIP_LP lp,
    int  currentdepth,
    SCIP_Real curvarlbs,
    SCIP_Real curvarubs,
    int *  lbchginfoposs,
    int *  ubchginfoposs,
    SCIP_LPBDCHGS oldlpbdchgs,
    SCIP_LPBDCHGS relaxedlpbdchgs,
    SCIP_Bool valid,
    SCIP_Bool resolve,
    SCIP_Real farkascoefs,
    SCIP_Real  farkaslhs,
    SCIP_Real farkasactivity 
    )
    static

    analyzes an infeasible LP and undoes additional bound changes while staying infeasible

    Parameters
    setglobal SCIP settings
    probproblem data
    lpLP data
    currentdepthcurrent depth in the tree
    curvarlbscurrent lower bounds of active problem variables
    curvarubscurrent upper bounds of active problem variables
    lbchginfoposspositions of currently active lower bound change information in variables' arrays
    ubchginfoposspositions of currently active upper bound change information in variables' arrays
    oldlpbdchgsold LP bound changes used for reset the LP bound change, or NULL
    relaxedlpbdchgsrelaxed LP bound changes used for reset the LP bound change, or NULL
    validpointer to store whether the unfixings are valid
    resolvepointer to store whether the changed LP should be resolved again
    farkascoefscoefficients in the proof constraint
    farkaslhslhs of the proof constraint
    farkasactivitymaximal activity of the proof constraint

    Definition at line 4890 of file conflict_graphanalysis.c.

    References SCIP_Lp::cutoffbound, FALSE, SCIP_Lp::flushed, NULL, SCIP_CALL, SCIP_OKAY, SCIPlpGetLPI(), SCIPsetDebugMsg, SCIPsetIsFeasGT(), SCIPundoBdchgsProof(), SCIP_Lp::solved, and TRUE.

    Referenced by SCIPrunBoundHeuristic().

    ◆ lpbdchgsCreate()

    static SCIP_RETCODE lpbdchgsCreate ( SCIP_LPBDCHGS **  lpbdchgs,
    SCIP_SET set,
    int  ncols 
    )
    static

    create conflict LP bound change data structure

    Parameters
    lpbdchgspointer to store the conflict LP bound change data structure
    setglobal SCIP settings
    ncolsnumber of columns

    Definition at line 4951 of file conflict_graphanalysis.c.

    References BMSclearMemoryArray, SCIP_CALL, SCIP_OKAY, SCIPsetAllocBuffer, and SCIPsetAllocBufferArray.

    Referenced by SCIPrunBoundHeuristic().

    ◆ ensureSidechgsSize()

    static SCIP_RETCODE ensureSidechgsSize ( SCIP_SET set,
    int **  sidechginds,
    SCIP_Real **  sidechgoldlhss,
    SCIP_Real **  sidechgoldrhss,
    SCIP_Real **  sidechgnewlhss,
    SCIP_Real **  sidechgnewrhss,
    int *  sidechgssize,
    int  num 
    )
    static

    ensures, that side change arrays can store at least num entries

    Parameters
    setglobal SCIP settings
    sidechgindspointer to side change index array
    sidechgoldlhsspointer to side change old left hand sides array
    sidechgoldrhsspointer to side change old right hand sides array
    sidechgnewlhsspointer to side change new left hand sides array
    sidechgnewrhsspointer to side change new right hand sides array
    sidechgssizepointer to size of side change arrays
    numminimal number of entries to be able to store in side change arrays

    Definition at line 4978 of file conflict_graphanalysis.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPsetCalcMemGrowSize(), and SCIPsetReallocBufferArray.

    Referenced by addSideRemoval().

    ◆ addSideRemoval()

    static SCIP_RETCODE addSideRemoval ( SCIP_SET set,
    SCIP_ROW row,
    SCIP_Real  lpiinfinity,
    int **  sidechginds,
    SCIP_Real **  sidechgoldlhss,
    SCIP_Real **  sidechgoldrhss,
    SCIP_Real **  sidechgnewlhss,
    SCIP_Real **  sidechgnewrhss,
    int *  sidechgssize,
    int *  nsidechgs 
    )
    static

    adds removal of row's side to side change arrays; finite sides are only replaced by near infinite sides, such that the row's sense in the LP solver is not changed

    Parameters
    setglobal SCIP settings
    rowLP row to change the sides for
    lpiinfinityvalue treated as infinity in LP solver
    sidechgindspointer to side change index array
    sidechgoldlhsspointer to side change old left hand sides array
    sidechgoldrhsspointer to side change old right hand sides array
    sidechgnewlhsspointer to side change new left hand sides array
    sidechgnewrhsspointer to side change new right hand sides array
    sidechgssizepointer to size of side change arrays
    nsidechgspointer to number of used slots in side change arrays

    Definition at line 5017 of file conflict_graphanalysis.c.

    References ensureSidechgsSize(), NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIProwGetConstant(), SCIProwGetLhs(), SCIProwGetLPPos(), SCIProwGetRhs(), and SCIPsetIsInfinity().

    Referenced by SCIPrunBoundHeuristic().

    ◆ lpbdchgsReset()

    static void lpbdchgsReset ( SCIP_LPBDCHGS lpbdchgs,
    int  ncols 
    )
    static

    reset conflict LP bound change data structure

    Parameters
    lpbdchgsconflict LP bound change data structure
    ncolsnumber of columns

    Definition at line 5091 of file conflict_graphanalysis.c.

    References BMSclearMemoryArray, SCIP_LPBdChgs::nbdchgs, NULL, and SCIP_LPBdChgs::usedcols.

    Referenced by SCIPrunBoundHeuristic().

    ◆ lpbdchgsFree()

    static void lpbdchgsFree ( SCIP_LPBDCHGS **  lpbdchgs,
    SCIP_SET set 
    )
    static

    free conflict LP bound change data structure

    Parameters
    lpbdchgspointer to store the conflict LP bound change data structure
    setglobal SCIP settings

    Definition at line 5104 of file conflict_graphanalysis.c.

    References SCIPsetFreeBuffer, and SCIPsetFreeBufferArray.

    Referenced by SCIPrunBoundHeuristic().

    ◆ undoBdchgsDualsol()

    static SCIP_RETCODE undoBdchgsDualsol ( SCIP_SET set,
    SCIP_PROB prob,
    SCIP_LP lp,
    int  currentdepth,
    SCIP_Real curvarlbs,
    SCIP_Real curvarubs,
    int *  lbchginfoposs,
    int *  ubchginfoposs,
    SCIP_LPBDCHGS oldlpbdchgs,
    SCIP_LPBDCHGS relaxedlpbdchgs,
    SCIP_Bool valid,
    SCIP_Bool resolve,
    SCIP_Real dualcoefs,
    SCIP_Real  duallhs,
    SCIP_Real dualactivity 
    )
    static

    analyzes an LP exceeding the objective limit and undoes additional bound changes while staying beyond the objective limit

    Parameters
    setglobal SCIP settings
    probproblem data
    lpLP data
    currentdepthcurrent depth in the tree
    curvarlbscurrent lower bounds of active problem variables
    curvarubscurrent upper bounds of active problem variables
    lbchginfoposspositions of currently active lower bound change information in variables' arrays
    ubchginfoposspositions of currently active upper bound change information in variables' arrays
    oldlpbdchgsold LP bound changes used for reset the LP bound change, or NULL
    relaxedlpbdchgsrelaxed LP bound changes used for reset the LP bound change, or NULL
    validpointer to store whether the unfixings are valid
    resolvepointer to store whether the changed LP should be resolved again
    dualcoefscoefficients in the proof constraint
    duallhslhs of the proof constraint
    dualactivitymaximal activity of the proof constraint

    Definition at line 5122 of file conflict_graphanalysis.c.

    References SCIP_Lp::cutoffbound, FALSE, SCIP_Lp::flushed, NULL, SCIP_CALL, SCIP_OKAY, SCIPlpGetLPI(), SCIPsetDebugMsg, SCIPsetIsFeasGT(), SCIPundoBdchgsProof(), SCIP_Lp::solved, and TRUE.

    Referenced by SCIPrunBoundHeuristic().

    ◆ SCIPrunBoundHeuristic()

    SCIP_RETCODE SCIPrunBoundHeuristic ( SCIP_CONFLICT conflict,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_PROB origprob,
    SCIP_PROB transprob,
    SCIP_TREE tree,
    SCIP_REOPT reopt,
    SCIP_LP lp,
    SCIP_LPI lpi,
    SCIP_EVENTFILTER eventfilter,
    BMS_BLKMEM blkmem,
    SCIP_Real proofcoefs,
    SCIP_Real prooflhs,
    SCIP_Real proofactivity,
    SCIP_Real curvarlbs,
    SCIP_Real curvarubs,
    int *  lbchginfoposs,
    int *  ubchginfoposs,
    int *  iterations,
    SCIP_Bool  marklpunsolved,
    SCIP_Bool dualproofsuccess,
    SCIP_Bool valid 
    )

    try to find a subset of changed bounds leading to an infeasible LP

    1. call undoBdchgsDualfarkas() or undoBdchgsDualsol() -> update lb/ubchginfoposs arrays -> store additional changes in bdchg and curvarlbs/ubs arrays -> apply additional changes to the LPI
    2. (optional) if additional bound changes were undone: -> resolve LP -> goto 1.
    3. redo all bound changes in the LPI to restore the LPI to its original state
    4. analyze conflict -> put remaining changed bounds (see lb/ubchginfoposs arrays) into starting conflict set
    Parameters
    conflictconflict data
    setglobal SCIP settings
    statproblem statistics
    origproboriginal problem
    transprobtransformed problem
    treebranch and bound tree
    reoptreoptimization data
    lpLP data
    lpiLPI data
    eventfilterglobal event filter
    blkmemblock memory
    proofcoefscoefficients in the proof constraint
    prooflhslhs of the proof constraint
    proofactivitymaximal activity of the proof constraint
    curvarlbscurrent lower bounds of active problem variables
    curvarubscurrent upper bounds of active problem variables
    lbchginfoposspositions of currently active lower bound change information in variables' arrays
    ubchginfoposspositions of currently active upper bound change information in variables' arrays
    iterationspointer to store the total number of LP iterations used
    marklpunsolvedwhether LP should be marked unsolved after analysis (needed for strong branching)
    dualproofsuccesspointer to store success result of dual proof analysis
    validpointer to store whether the result is still a valid proof

    Definition at line 5188 of file conflict_graphanalysis.c.

    References addSideRemoval(), SCIP_LPBdChgs::bdchginds, SCIP_LPBdChgs::bdchglbs, SCIP_LPBdChgs::bdchgubs, BMSclearMemoryArray, SCIP_Stat::conflictlptime, SCIP_Conflict::conflictset, SCIP_ConflictSet::conflicttype, SCIP_Lp::dualchecked, SCIP_Lp::dualfeasible, FALSE, lpbdchgsCreate(), lpbdchgsFree(), lpbdchgsReset(), SCIP_Lp::lpiitlim, SCIP_Lp::lpiobjlim, SCIP_Lp::lpobjval, SCIP_Lp::lpsolstat, SCIP_LPBdChgs::nbdchgs, SCIP_Stat::nconflictlpiterations, SCIP_Stat::nconflictlps, NULL, SCIP_Lp::primalchecked, SCIP_Lp::primalfeasible, r, SCIP_Bool, SCIP_CALL, SCIP_CONFTYPE_INFEASLP, SCIP_INVALID, SCIP_LONGINT_FORMAT, SCIP_LPERROR, SCIP_LPPAR_LPITLIM, SCIP_LPPAR_OBJLIM, SCIP_LPSOLSTAT_NOTSOLVED, SCIP_OKAY, SCIP_Real, SCIPaggrRowCreate(), SCIPaggrRowFree(), SCIPaggrRowGetInds(), SCIPaggrRowGetNNz(), SCIPaggrRowGetProbvarValue(), SCIPaggrRowGetRhs(), SCIPclockStart(), SCIPclockStop(), SCIPconflictAnalyzeDualProof(), SCIPgetDualProof(), SCIPgetFarkasProof(), SCIPlpDivingObjChanged(), SCIPlpGetNCols(), SCIPlpGetNRows(), SCIPlpGetRows(), SCIPlpiChgBounds(), SCIPlpiChgSides(), SCIPlpiGetIterations(), SCIPlpiGetObjval(), SCIPlpiInfinity(), SCIPlpiIsDualFeasible(), SCIPlpiIsObjlimExc(), SCIPlpiIsPrimalInfeasible(), SCIPlpiSetIntpar(), SCIPlpiSetRealpar(), SCIPlpiSolveDual(), SCIPprobAllColsInLP(), SCIPprobGetNVars(), SCIPprobGetVars(), SCIProwGetLhs(), SCIProwGetLPPos(), SCIProwGetName(), SCIProwGetRhs(), SCIProwIsLocal(), SCIPsetAllocBufferArray, SCIPsetDebugMsg, SCIPsetFreeBufferArray, SCIPtreeGetCurrentDepth(), SCIPtreeGetEffectiveRootDepth(), SCIPvarGetProbindex(), SCIP_Lp::solved, undoBdchgsDualfarkas(), undoBdchgsDualsol(), and SCIP_ConflictSet::usescutoffbound.

    Referenced by conflictAnalyzeLP().

    ◆ SCIPconflictAnalyze()

    SCIP_RETCODE SCIPconflictAnalyze ( SCIP_CONFLICT conflict,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_PROB prob,
    SCIP_TREE tree,
    int  validdepth,
    SCIP_Bool success 
    )

    analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound(), and on success, calls the conflict handlers to create a conflict constraint out of the resulting conflict set; updates statistics for propagation conflict analysis

    Parameters
    conflictconflict analysis data
    blkmemblock memory of transformed problem
    setglobal SCIP settings
    statproblem statistics
    probproblem data
    treebranch and bound tree
    validdepthminimal depth level at which the initial conflict set is valid
    successpointer to store whether a conflict constraint was created, or NULL

    Definition at line 5571 of file conflict_graphanalysis.c.

    References SCIP_Conflict::bdchgonlyconfqueue, SCIP_Conflict::bdchgqueue, conflictAnalyze(), conflictCalcMaxsize(), SCIP_Conflict::conflictset, FALSE, SCIP_Conflict::forcedbdchgqueue, SCIP_ConflictSet::nbdchginfos, SCIP_Conflict::npropcalls, SCIP_Conflict::npropconfconss, SCIP_Conflict::npropconfliterals, SCIP_Conflict::npropreconvconss, SCIP_Conflict::npropreconvliterals, SCIP_Conflict::npropsuccess, NULL, SCIP_Conflict::propanalyzetime, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), SCIPconflictGraphApplicable(), SCIPpqueueNElems(), SCIPsetDebugMsg, SCIPtreeGetCurrentDepth(), and TRUE.

    Referenced by SCIPanalyzeConflict(), and SCIPanalyzeConflictCons().