Scippy

    SCIP

    Solving Constraint Integer Programs

    Detailed Description

    methods for implications, variable bounds, and clique tables

    Author
    Tobias Achterberg

    Definition in file implics.c.

    #include "scip/event.h"
    #include "scip/implics.h"
    #include "scip/misc.h"
    #include "scip/pub_implics.h"
    #include "scip/pub_message.h"
    #include "scip/pub_misc.h"
    #include "scip/pub_misc_sort.h"
    #include "scip/pub_var.h"
    #include "scip/set.h"
    #include "scip/struct_implics.h"
    #include "scip/struct_set.h"
    #include "scip/struct_stat.h"
    #include "scip/var.h"

    Go to the source code of this file.

    Macros

    #define cliqueCheck(clique)
     
    #define HASHTABLE_CLIQUETABLE_SIZE   100
     
    #define checkNEntries(cliquetable)   TRUE
     

    Functions

    static SCIP_RETCODE vboundsCreate (SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem)
     
    void SCIPvboundsFree (SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem)
     
    static SCIP_RETCODE vboundsEnsureSize (SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
     
    static SCIP_RETCODE vboundsSearchPos (SCIP_VBOUNDS *vbounds, SCIP_VAR *var, SCIP_Bool negativecoef, int *insertpos, SCIP_Bool *found)
     
    SCIP_RETCODE SCIPvboundsAdd (SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BOUNDTYPE vboundtype, SCIP_VAR *var, SCIP_Real coef, SCIP_Real constant, SCIP_Bool *added)
     
    SCIP_RETCODE SCIPvboundsDel (SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, SCIP_VAR *vbdvar, SCIP_Bool negativecoef)
     
    void SCIPvboundsShrink (SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, int newnvbds)
     
    static SCIP_DECL_SORTPTRCOMP (compVars)
     
    static void checkImplics (SCIP_IMPLICS *implics)
     
    static SCIP_RETCODE implicsCreate (SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem)
     
    void SCIPimplicsFree (SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem)
     
    static SCIP_RETCODE implicsEnsureSize (SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool varfixing, int num)
     
    static void implicsSearchVar (SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, int *poslower, int *posupper, int *posadd)
     
    static SCIP_Bool implicsSearchImplic (SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, int *poslower, int *posupper, int *posadd)
     
    SCIP_RETCODE SCIPimplicsAdd (SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool isshortcut, SCIP_Bool *conflict, SCIP_Bool *added)
     
    SCIP_RETCODE SCIPimplicsDel (SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype)
     
    void SCIPimplicsGetVarImplics (SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_Bool *haslowerimplic, SCIP_Bool *hasupperimplic)
     
    void SCIPimplicsGetVarImplicPoss (SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, int *lowerimplicpos, int *upperimplicpos)
     
    SCIP_Bool SCIPimplicsContainsImpl (SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype)
     
    static void cliquetableSwapCliques (SCIP_CLIQUETABLE *cliquetable, int first, int second)
     
    static void cliquetableMarkCliqueForCleanup (SCIP_CLIQUETABLE *cliquetable, SCIP_CLIQUE *clique)
     
    static SCIP_RETCODE cliqueCreateWithData (SCIP_CLIQUE **clique, BMS_BLKMEM *blkmem, int size, SCIP_VAR **vars, SCIP_Bool *values, int nvars, int id, SCIP_Bool isequation)
     
    static void cliqueFree (SCIP_CLIQUE **clique, BMS_BLKMEM *blkmem)
     
    static SCIP_RETCODE cliqueEnsureSize (SCIP_CLIQUE *clique, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
     
    int SCIPcliqueSearchVar (SCIP_CLIQUE *clique, SCIP_VAR *var, SCIP_Bool value)
     
    SCIP_Bool SCIPcliqueHasVar (SCIP_CLIQUE *clique, SCIP_VAR *var, SCIP_Bool value)
     
    SCIP_RETCODE SCIPcliqueAddVar (SCIP_CLIQUE *clique, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_VAR *var, SCIP_Bool value, SCIP_Bool *doubleentry, SCIP_Bool *oppositeentry)
     
    void SCIPcliqueDelVar (SCIP_CLIQUE *clique, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Bool value)
     
    static int cliquesSearchClique (SCIP_CLIQUE **cliques, int ncliques, SCIP_CLIQUE *clique)
     
    static SCIP_RETCODE cliquelistCreate (SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem)
     
    void SCIPcliquelistFree (SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem)
     
    static SCIP_RETCODE cliquelistEnsureSize (SCIP_CLIQUELIST *cliquelist, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool value, int num)
     
    SCIP_RETCODE SCIPcliquelistAdd (SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool value, SCIP_CLIQUE *clique)
     
    SCIP_RETCODE SCIPcliquelistDel (SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem, SCIP_Bool value, SCIP_CLIQUE *clique)
     
    SCIP_Bool SCIPcliquelistsHaveCommonClique (SCIP_CLIQUELIST *cliquelist1, SCIP_Bool value1, SCIP_CLIQUELIST *cliquelist2, SCIP_Bool value2)
     
    void SCIPcliquelistRemoveFromCliques (SCIP_CLIQUELIST *cliquelist, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Bool irrelevantvar)
     
    static SCIP_DECL_HASHGETKEY (hashgetkeyClique)
     
    static SCIP_DECL_HASHKEYEQ (hashkeyeqClique)
     
    static SCIP_DECL_HASHKEYVAL (hashkeyvalClique)
     
    SCIP_RETCODE SCIPcliquetableCreate (SCIP_CLIQUETABLE **cliquetable, SCIP_SET *set, BMS_BLKMEM *blkmem)
     
    SCIP_RETCODE SCIPcliquetableFree (SCIP_CLIQUETABLE **cliquetable, BMS_BLKMEM *blkmem)
     
    static SCIP_RETCODE cliquetableEnsureSize (SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, int num)
     
    static SCIP_RETCODE sortAndMergeClique (SCIP_VAR **clqvars, SCIP_Bool *clqvalues, int *nclqvars, SCIP_Bool *isequation, SCIP_CLIQUE *clique, 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, int *nbdchgs, SCIP_Bool *infeasible)
     
    static int cliquetableGetNodeIndexBinvar (SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *binvar)
     
    static void cliquetableUpdateConnectednessClique (SCIP_CLIQUETABLE *cliquetable, SCIP_CLIQUE *clique)
     
    int SCIPcliquetableGetVarComponentIdx (SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var)
     
    SCIP_RETCODE SCIPcliquetableAdd (SCIP_CLIQUETABLE *cliquetable, 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_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool isequation, SCIP_Bool *infeasible, int *nbdchgs)
     
    static SCIP_RETCODE cliqueCleanup (SCIP_CLIQUE *clique, 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, int *nchgbds, SCIP_Bool *infeasible)
     
    SCIP_RETCODE SCIPcliquetableCleanup (SCIP_CLIQUETABLE *cliquetable, 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, int *nchgbds, SCIP_Bool *infeasible)
     
    SCIP_RETCODE SCIPcliquetableComputeCliqueComponents (SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_VAR **vars, int nbinvars, int nintvars, int nimplvars)
     
    int SCIPvboundsGetNVbds (SCIP_VBOUNDS *vbounds)
     
    SCIP_VAR ** SCIPvboundsGetVars (SCIP_VBOUNDS *vbounds)
     
    SCIP_RealSCIPvboundsGetCoefs (SCIP_VBOUNDS *vbounds)
     
    SCIP_RealSCIPvboundsGetConstants (SCIP_VBOUNDS *vbounds)
     
    int SCIPimplicsGetNImpls (SCIP_IMPLICS *implics, SCIP_Bool varfixing)
     
    SCIP_VAR ** SCIPimplicsGetVars (SCIP_IMPLICS *implics, SCIP_Bool varfixing)
     
    SCIP_BOUNDTYPESCIPimplicsGetTypes (SCIP_IMPLICS *implics, SCIP_Bool varfixing)
     
    SCIP_RealSCIPimplicsGetBounds (SCIP_IMPLICS *implics, SCIP_Bool varfixing)
     
    int * SCIPimplicsGetIds (SCIP_IMPLICS *implics, SCIP_Bool varfixing)
     
    int SCIPcliqueGetNVars (SCIP_CLIQUE *clique)
     
    SCIP_VAR ** SCIPcliqueGetVars (SCIP_CLIQUE *clique)
     
    SCIP_BoolSCIPcliqueGetValues (SCIP_CLIQUE *clique)
     
    unsigned int SCIPcliqueGetId (SCIP_CLIQUE *clique)
     
    int SCIPcliqueGetIndex (SCIP_CLIQUE *clique)
     
    SCIP_Bool SCIPcliqueIsCleanedUp (SCIP_CLIQUE *clique)
     
    SCIP_Bool SCIPcliqueIsEquation (SCIP_CLIQUE *clique)
     
    int SCIPcliquelistGetNCliques (SCIP_CLIQUELIST *cliquelist, SCIP_Bool value)
     
    SCIP_CLIQUE ** SCIPcliquelistGetCliques (SCIP_CLIQUELIST *cliquelist, SCIP_Bool value)
     
    void SCIPcliquelistCheck (SCIP_CLIQUELIST *cliquelist, SCIP_VAR *var)
     
    int SCIPcliquetableGetNCliques (SCIP_CLIQUETABLE *cliquetable)
     
    int SCIPcliquetableGetNCliquesCreated (SCIP_CLIQUETABLE *cliquetable)
     
    SCIP_CLIQUE ** SCIPcliquetableGetCliques (SCIP_CLIQUETABLE *cliquetable)
     
    SCIP_Longint SCIPcliquetableGetNEntries (SCIP_CLIQUETABLE *cliquetable)
     
    int SCIPcliquetableGetNCliqueComponents (SCIP_CLIQUETABLE *cliquetable)
     
    SCIP_Bool SCIPcliquetableNeedsComponentUpdate (SCIP_CLIQUETABLE *cliquetable)
     

    Macro Definition Documentation

    ◆ cliqueCheck

    #define cliqueCheck (   clique)

    Definition at line 1417 of file implics.c.

    ◆ HASHTABLE_CLIQUETABLE_SIZE

    #define HASHTABLE_CLIQUETABLE_SIZE   100

    Definition at line 1783 of file implics.c.

    ◆ checkNEntries

    #define checkNEntries (   cliquetable)    TRUE

    Definition at line 2914 of file implics.c.

    Function Documentation

    ◆ vboundsCreate()

    static SCIP_RETCODE vboundsCreate ( SCIP_VBOUNDS **  vbounds,
    BMS_BLKMEM blkmem 
    )
    static

    creates a variable bounds data structure

    Parameters
    vboundspointer to store variable bounds data structure
    blkmemblock memory

    Definition at line 55 of file implics.c.

    References BMSallocBlockMemory, NULL, SCIP_ALLOC, and SCIP_OKAY.

    Referenced by vboundsEnsureSize().

    ◆ SCIPvboundsFree()

    void SCIPvboundsFree ( SCIP_VBOUNDS **  vbounds,
    BMS_BLKMEM blkmem 
    )

    frees a variable bounds data structure

    Parameters
    vboundspointer to store variable bounds data structure
    blkmemblock memory

    Definition at line 73 of file implics.c.

    References BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

    Referenced by SCIPvarAggregate(), SCIPvarRemove(), SCIPvboundsDel(), SCIPvboundsShrink(), and varFree().

    ◆ vboundsEnsureSize()

    static SCIP_RETCODE vboundsEnsureSize ( SCIP_VBOUNDS **  vbounds,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    int  num 
    )
    static

    ensures, that variable bounds arrays can store at least num entries

    Parameters
    vboundspointer to variable bounds data structure
    blkmemblock memory
    setglobal SCIP settings
    numminimum number of entries to store

    Definition at line 91 of file implics.c.

    References BMSreallocBlockMemoryArray, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_OKAY, SCIPsetCalcMemGrowSize(), and vboundsCreate().

    Referenced by SCIPvboundsAdd().

    ◆ vboundsSearchPos()

    static SCIP_RETCODE vboundsSearchPos ( SCIP_VBOUNDS vbounds,
    SCIP_VAR var,
    SCIP_Bool  negativecoef,
    int *  insertpos,
    SCIP_Bool found 
    )
    static

    binary searches the insertion position of the given variable in the vbounds data structure

    Parameters
    vboundsvariable bounds data structure, or NULL
    varvariable to search in vbounds data structure
    negativecoefis coefficient b negative?
    insertpospointer to store position where to insert new entry
    foundpointer to store whether the same variable was found at the returned pos

    Definition at line 125 of file implics.c.

    References SCIP_VBounds::coefs, FALSE, SCIP_VBounds::len, NULL, SCIP_Bool, SCIP_OKAY, SCIPsortedvecFindPtr(), TRUE, and SCIP_VBounds::vars.

    Referenced by SCIPvboundsAdd(), and SCIPvboundsDel().

    ◆ SCIPvboundsAdd()

    SCIP_RETCODE SCIPvboundsAdd ( SCIP_VBOUNDS **  vbounds,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_BOUNDTYPE  vboundtype,
    SCIP_VAR var,
    SCIP_Real  coef,
    SCIP_Real  constant,
    SCIP_Bool added 
    )

    adds a variable bound to the variable bounds data structure

    Parameters
    vboundspointer to variable bounds data structure
    blkmemblock memory
    setglobal SCIP settings
    vboundtypetype of variable bound (LOWER or UPPER)
    varvariable z in x <= b*z + d or x >= b*z + d
    coefcoefficient b in x <= b*z + d or x >= b*z + d
    constantconstant d in x <= b*z + d or x >= b*z + d
    addedpointer to store whether the variable bound was added

    Definition at line 206 of file implics.c.

    References FALSE, MAX, MIN, NULL, SCIP_Bool, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_COLUMN, SCIP_VARSTATUS_LOOSE, SCIPsetIsZero(), SCIPvarGetStatus(), SCIPvarIsIntegral(), TRUE, vboundsEnsureSize(), and vboundsSearchPos().

    Referenced by varAddVbound().

    ◆ SCIPvboundsDel()

    SCIP_RETCODE SCIPvboundsDel ( SCIP_VBOUNDS **  vbounds,
    BMS_BLKMEM blkmem,
    SCIP_VAR vbdvar,
    SCIP_Bool  negativecoef 
    )

    removes from variable x a variable bound x >=/<= b*z + d with binary or integer z

    Parameters
    vboundspointer to variable bounds data structure
    blkmemblock memory
    vbdvarvariable z in x >=/<= b*z + d
    negativecoefis coefficient b negative?

    Definition at line 288 of file implics.c.

    References NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPvboundsFree(), and vboundsSearchPos().

    Referenced by SCIPvarRemoveCliquesImplicsVbs().

    ◆ SCIPvboundsShrink()

    void SCIPvboundsShrink ( SCIP_VBOUNDS **  vbounds,
    BMS_BLKMEM blkmem,
    int  newnvbds 
    )

    reduces the number of variable bounds stored in the given variable bounds data structure

    Parameters
    vboundspointer to variable bounds data structure
    blkmemblock memory
    newnvbdsnew number of variable bounds

    Definition at line 333 of file implics.c.

    References NULL, and SCIPvboundsFree().

    Referenced by SCIPvarRemoveCliquesImplicsVbs().

    ◆ SCIP_DECL_SORTPTRCOMP()

    static SCIP_DECL_SORTPTRCOMP ( compVars  )
    static

    comparator function for implication variables in the implication data structure

    Definition at line 359 of file implics.c.

    References NULL, and SCIPvarGetIndex().

    ◆ checkImplics()

    static void checkImplics ( SCIP_IMPLICS implics)
    static

    performs integrity check on implications data structure

    Parameters
    implicsimplications data structure

    Definition at line 383 of file implics.c.

    References FALSE, SCIP_Implics::nimpls, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, TRUE, SCIP_Implics::types, and SCIP_Implics::vars.

    Referenced by SCIPimplicsAdd(), and SCIPimplicsDel().

    ◆ implicsCreate()

    static SCIP_RETCODE implicsCreate ( SCIP_IMPLICS **  implics,
    BMS_BLKMEM blkmem 
    )
    static

    creates an implications data structure

    Parameters
    implicspointer to store implications data structure
    blkmemblock memory

    Definition at line 425 of file implics.c.

    References BMSallocBlockMemory, NULL, SCIP_ALLOC, and SCIP_OKAY.

    Referenced by implicsEnsureSize().

    ◆ SCIPimplicsFree()

    void SCIPimplicsFree ( SCIP_IMPLICS **  implics,
    BMS_BLKMEM blkmem 
    )

    frees an implications data structure

    Parameters
    implicspointer of implications data structure to free
    blkmemblock memory

    Definition at line 451 of file implics.c.

    References BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

    Referenced by SCIPimplicsDel(), SCIPvarAggregate(), SCIPvarRemove(), SCIPvarRemoveCliquesImplicsVbs(), and varFree().

    ◆ implicsEnsureSize()

    static SCIP_RETCODE implicsEnsureSize ( SCIP_IMPLICS **  implics,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_Bool  varfixing,
    int  num 
    )
    static

    ensures, that arrays for x == 0 or x == 1 in implications data structure can store at least num entries

    Parameters
    implicspointer to implications data structure
    blkmemblock memory
    setglobal SCIP settings
    varfixingFALSE if size of arrays for x == 0 has to be ensured, TRUE for x == 1
    numminimum number of entries to store

    Definition at line 474 of file implics.c.

    References BMSreallocBlockMemoryArray, implicsCreate(), NULL, SCIP_ALLOC, SCIP_CALL, SCIP_OKAY, and SCIPsetCalcMemGrowSize().

    Referenced by SCIPimplicsAdd().

    ◆ implicsSearchVar()

    static void implicsSearchVar ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing,
    SCIP_VAR implvar,
    int *  poslower,
    int *  posupper,
    int *  posadd 
    )
    static

    gets the positions of the implications y >= l and y <= u in the implications data structure; if no lower or upper bound implication for y was found, -1 is returned

    Parameters
    implicsimplications data structure
    varfixingFALSE if y is searched in implications for x == 0, TRUE for x == 1
    implvarvariable y to search for
    poslowerpointer to store position of y_lower (-1 if not found)
    posupperpointer to store position of y_upper (-1 if not found)
    posaddpointer to store position of first y entry, or where a new y entry should be placed

    Definition at line 512 of file implics.c.

    References SCIP_Implics::nimpls, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIPsortedvecFindPtr(), SCIP_Implics::types, and SCIP_Implics::vars.

    Referenced by implicsSearchImplic(), SCIPimplicsGetVarImplicPoss(), and SCIPimplicsGetVarImplics().

    ◆ implicsSearchImplic()

    static SCIP_Bool implicsSearchImplic ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing,
    SCIP_VAR implvar,
    SCIP_BOUNDTYPE  impltype,
    int *  poslower,
    int *  posupper,
    int *  posadd 
    )
    static

    returns whether variable y is already contained in implications for x == 0 or x == 1 with the given impltype y can be contained in structure with y >= b (y_lower) and y <= b (y_upper)

    Parameters
    implicsimplications data structure
    varfixingFALSE if y is searched in implications for x == 0, TRUE for x == 1
    implvarvariable y to search for
    impltypetype of implication y <=/>= b to search for
    poslowerpointer to store position of y_lower (inf if not found)
    posupperpointer to store position of y_upper (inf if not found)
    posaddpointer to store correct position (with respect to impltype) to add y

    Definition at line 596 of file implics.c.

    References implicsSearchVar(), NULL, and SCIP_BOUNDTYPE_LOWER.

    Referenced by SCIPimplicsAdd(), SCIPimplicsContainsImpl(), and SCIPimplicsDel().

    ◆ SCIPimplicsAdd()

    SCIP_RETCODE SCIPimplicsAdd ( SCIP_IMPLICS **  implics,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_STAT stat,
    SCIP_Bool  varfixing,
    SCIP_VAR implvar,
    SCIP_BOUNDTYPE  impltype,
    SCIP_Real  implbound,
    SCIP_Bool  isshortcut,
    SCIP_Bool conflict,
    SCIP_Bool added 
    )

    adds an implication x == 0/1 -> y <= b or y >= b to the implications data structure; the implication must be non-redundant

    Parameters
    implicspointer to implications data structure
    blkmemblock memory
    setglobal SCIP settings
    statproblem statistics
    varfixingFALSE if implication for x == 0 has to be added, TRUE for x == 1
    implvarvariable y in implication y <= b or y >= b
    impltypetype of implication y <= b (SCIP_BOUNDTYPE_UPPER) or y >= b (SCIP_BOUNDTYPE_LOWER)
    implboundbound b in implication y <= b or y >= b
    isshortcutis the implication a shortcut, i.e., added as part of the transitive closure of another implication?
    conflictpointer to store whether implication causes a conflict for variable x
    addedpointer to store whether the implication was added

    Definition at line 633 of file implics.c.

    References BMSmoveMemoryArray, checkImplics(), FALSE, implicsEnsureSize(), implicsSearchImplic(), SCIP_Stat::nimplications, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_COLUMN, SCIP_VARSTATUS_LOOSE, SCIPsetDebugMsg, SCIPsetIsFeasGE(), SCIPsetIsFeasGT(), SCIPsetIsFeasLE(), SCIPsetIsFeasLT(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetUbGlobal(), SCIPvarIsActive(), and TRUE.

    Referenced by varAddImplic().

    ◆ SCIPimplicsDel()

    SCIP_RETCODE SCIPimplicsDel ( SCIP_IMPLICS **  implics,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_Bool  varfixing,
    SCIP_VAR implvar,
    SCIP_BOUNDTYPE  impltype 
    )

    removes the implication x <= 0 or x >= 1 ==> y <= b or y >= b from the implications data structure

    Parameters
    implicspointer to implications data structure
    blkmemblock memory
    setglobal SCIP settings
    varfixingFALSE if y should be removed from implications for x <= 0, TRUE for x >= 1
    implvarvariable y in implication y <= b or y >= b
    impltypetype of implication y <= b (SCIP_BOUNDTYPE_UPPER) or y >= b (SCIP_BOUNDTYPE_LOWER)

    Definition at line 836 of file implics.c.

    References BMSmoveMemoryArray, checkImplics(), implicsSearchImplic(), NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_OKAY, SCIPimplicsFree(), SCIPsetDebugMsg, and SCIPvarGetName().

    Referenced by SCIPvarRemoveCliquesImplicsVbs().

    ◆ SCIPimplicsGetVarImplics()

    void SCIPimplicsGetVarImplics ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing,
    SCIP_VAR implvar,
    SCIP_Bool haslowerimplic,
    SCIP_Bool hasupperimplic 
    )

    returns which implications on given variable y are contained in implications for x == 0 or x == 1

    Parameters
    implicsimplications data structure
    varfixingFALSE if y should be searched in implications for x == 0, TRUE for x == 1
    implvarvariable y to search for
    haslowerimplicpointer to store whether there exists an implication y >= l
    hasupperimplicpointer to store whether there exists an implication y <= u

    Definition at line 894 of file implics.c.

    References implicsSearchVar(), and NULL.

    ◆ SCIPimplicsGetVarImplicPoss()

    void SCIPimplicsGetVarImplicPoss ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing,
    SCIP_VAR implvar,
    int *  lowerimplicpos,
    int *  upperimplicpos 
    )

    returns which implications on given variable y are contained in implications for x == 0 or x == 1

    Parameters
    implicsimplications data structure
    varfixingFALSE if y should be searched in implications for x == 0, TRUE for x == 1
    implvarvariable y to search for
    lowerimplicpospointer to store the position of an implication y >= l
    upperimplicpospointer to store the position of an implication y <= u

    Definition at line 916 of file implics.c.

    References implicsSearchVar(), and NULL.

    Referenced by SCIPvarGetImplicVarBounds().

    ◆ SCIPimplicsContainsImpl()

    SCIP_Bool SCIPimplicsContainsImpl ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing,
    SCIP_VAR implvar,
    SCIP_BOUNDTYPE  impltype 
    )

    returns whether an implication y <= b or y >= b is contained in implications for x == 0 or x == 1

    Parameters
    implicsimplications data structure
    varfixingFALSE if y should be searched in implications for x == 0, TRUE for x == 1
    implvarvariable y to search for
    impltypetype of implication y <=/>= b to search for

    Definition at line 933 of file implics.c.

    References implicsSearchImplic().

    Referenced by SCIPvarHasImplic().

    ◆ cliquetableSwapCliques()

    static void cliquetableSwapCliques ( SCIP_CLIQUETABLE cliquetable,
    int  first,
    int  second 
    )
    static
    Parameters
    cliquetableclique table data structure
    firstfirst index
    secondsecond index

    Definition at line 956 of file implics.c.

    References SCIP_CliqueTable::cliques, and SCIP_Clique::index.

    Referenced by cliquetableMarkCliqueForCleanup(), and SCIPcliquetableCleanup().

    ◆ cliquetableMarkCliqueForCleanup()

    static void cliquetableMarkCliqueForCleanup ( SCIP_CLIQUETABLE cliquetable,
    SCIP_CLIQUE clique 
    )
    static
    Parameters
    cliquetableclique table data structure
    cliqueclique data structure

    Definition at line 982 of file implics.c.

    References SCIP_CliqueTable::cliques, cliquetableSwapCliques(), SCIP_Clique::index, SCIP_CliqueTable::ncliques, SCIP_CliqueTable::ndirtycliques, and SCIPcliqueIsCleanedUp().

    Referenced by SCIPcliqueDelVar().

    ◆ cliqueCreateWithData()

    static SCIP_RETCODE cliqueCreateWithData ( SCIP_CLIQUE **  clique,
    BMS_BLKMEM blkmem,
    int  size,
    SCIP_VAR **  vars,
    SCIP_Bool values,
    int  nvars,
    int  id,
    SCIP_Bool  isequation 
    )
    static

    creates a clique data structure with already created variables and values arrays in the size of 'size'

    Parameters
    cliquepointer to store clique data structure
    blkmemblock memory
    sizeinitial size of clique
    varsbinary variables in the clique: at most one can be set to the given value
    valuesvalues of the variables in the clique
    nvarsnumber of variables in the clique
    idunique identifier of the clique
    isequationis the clique an equation or an inequality?

    Definition at line 1004 of file implics.c.

    References BMSallocBlockMemory, BMSduplicateBlockMemoryArray, FALSE, NULL, SCIP_ALLOC, and SCIP_OKAY.

    Referenced by SCIPcliquetableAdd().

    ◆ cliqueFree()

    static void cliqueFree ( SCIP_CLIQUE **  clique,
    BMS_BLKMEM blkmem 
    )
    static

    frees a clique data structure

    Parameters
    cliquepointer to store clique data structure
    blkmemblock memory

    Definition at line 1038 of file implics.c.

    References BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

    Referenced by SCIPcliquetableAdd(), SCIPcliquetableCleanup(), and SCIPcliquetableFree().

    ◆ cliqueEnsureSize()

    static SCIP_RETCODE cliqueEnsureSize ( SCIP_CLIQUE clique,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    int  num 
    )
    static

    ensures, that clique arrays can store at least num entries

    Parameters
    cliqueclique data structure
    blkmemblock memory
    setglobal SCIP settings
    numminimum number of entries to store

    Definition at line 1055 of file implics.c.

    References BMSreallocBlockMemoryArray, NULL, SCIP_ALLOC, SCIP_OKAY, SCIPsetCalcMemGrowSize(), SCIP_Clique::size, SCIP_Clique::values, and SCIP_Clique::vars.

    Referenced by SCIPcliqueAddVar().

    ◆ SCIPcliqueSearchVar()

    int SCIPcliqueSearchVar ( SCIP_CLIQUE clique,
    SCIP_VAR var,
    SCIP_Bool  value 
    )

    returns the position of the given variable/value pair in the clique; returns -1 if variable/value pair is not member of the clique

    Parameters
    cliqueclique data structure
    varvariable to search for
    valuevalue of the variable in the clique

    Definition at line 1081 of file implics.c.

    References NULL, SCIP_Clique::nvars, SCIPvarGetIndex(), SCIP_Clique::values, and SCIP_Clique::vars.

    Referenced by SCIPcliqueDelVar(), SCIPcliqueHasVar(), and SCIPcliquelistCheck().

    ◆ SCIPcliqueHasVar()

    SCIP_Bool SCIPcliqueHasVar ( SCIP_CLIQUE clique,
    SCIP_VAR var,
    SCIP_Bool  value 
    )

    returns whether the given variable/value pair is member of the given clique

    Parameters
    cliqueclique data structure
    varvariable to remove from the clique
    valuevalue of the variable in the clique

    Definition at line 1141 of file implics.c.

    References SCIPcliqueSearchVar().

    Referenced by addRltTerm(), and getBinaryProductExpr().

    ◆ SCIPcliqueAddVar()

    SCIP_RETCODE SCIPcliqueAddVar ( SCIP_CLIQUE clique,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_VAR var,
    SCIP_Bool  value,
    SCIP_Bool doubleentry,
    SCIP_Bool oppositeentry 
    )

    adds a single variable to the given clique

    Parameters
    cliqueclique data structure
    blkmemblock memory
    setglobal SCIP settings
    varvariable to add to the clique
    valuevalue of the variable in the clique
    doubleentrypointer to store whether the variable and value occurs twice in the clique
    oppositeentrypointer to store whether the variable with opposite value is in the clique

    Definition at line 1151 of file implics.c.

    References BMSmoveMemoryArray, cliqueEnsureSize(), SCIP_Clique::eventsissued, FALSE, SCIP_Clique::id, NULL, SCIP_Clique::nvars, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_COLUMN, SCIP_VARSTATUS_LOOSE, SCIPsetDebugMsg, SCIPsortedvecFindPtr(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarIsBinary(), TRUE, SCIP_Clique::values, and SCIP_Clique::vars.

    Referenced by SCIPvarAddClique().

    ◆ SCIPcliqueDelVar()

    void SCIPcliqueDelVar ( SCIP_CLIQUE clique,
    SCIP_CLIQUETABLE cliquetable,
    SCIP_VAR var,
    SCIP_Bool  value 
    )

    removes a single variable from the given clique

    Parameters
    cliqueclique data structure
    cliquetableclique table data structure
    varvariable to remove from the clique
    valuevalue of the variable in the clique

    Definition at line 1285 of file implics.c.

    References cliquetableMarkCliqueForCleanup(), SCIP_Clique::id, SCIP_CliqueTable::incleanup, SCIP_Clique::index, NULL, SCIPcliqueSearchVar(), SCIPdebugMessage, SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarIsBinary(), SCIP_Clique::startcleanup, SCIP_Clique::values, and SCIP_Clique::vars.

    Referenced by SCIPcliquelistRemoveFromCliques(), and SCIPvarDelClique().

    ◆ cliquesSearchClique()

    static int cliquesSearchClique ( SCIP_CLIQUE **  cliques,
    int  ncliques,
    SCIP_CLIQUE clique 
    )
    static

    gets the position of the given clique in the cliques array; returns -1 if clique is not member of cliques array

    Parameters
    cliquesarray of cliques
    ncliquesnumber of cliques in the cliques array
    cliqueclique to search for

    Definition at line 1333 of file implics.c.

    References SCIP_Clique::id, and NULL.

    Referenced by SCIPcliquelistDel().

    ◆ cliquelistCreate()

    static SCIP_RETCODE cliquelistCreate ( SCIP_CLIQUELIST **  cliquelist,
    BMS_BLKMEM blkmem 
    )
    static

    creates a clique list data structure

    Parameters
    cliquelistpointer to store clique list data structure
    blkmemblock memory

    Definition at line 1422 of file implics.c.

    References BMSallocBlockMemory, NULL, SCIP_ALLOC, and SCIP_OKAY.

    Referenced by SCIPcliquelistAdd().

    ◆ SCIPcliquelistFree()

    void SCIPcliquelistFree ( SCIP_CLIQUELIST **  cliquelist,
    BMS_BLKMEM blkmem 
    )

    frees a clique list data structure

    Parameters
    cliquelistpointer to the clique list data structure
    blkmemblock memory

    Definition at line 1441 of file implics.c.

    References BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.

    Referenced by SCIPcliquelistDel(), and varFree().

    ◆ cliquelistEnsureSize()

    static SCIP_RETCODE cliquelistEnsureSize ( SCIP_CLIQUELIST cliquelist,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_Bool  value,
    int  num 
    )
    static

    ensures, that clique list arrays can store at least num entries

    Parameters
    cliquelistclique list data structure
    blkmemblock memory
    setglobal SCIP settings
    valuevalue of the variable for which the clique list should be extended
    numminimum number of entries to store

    Definition at line 1458 of file implics.c.

    References BMSreallocBlockMemoryArray, SCIP_CliqueList::cliques, NULL, SCIP_ALLOC, SCIP_OKAY, SCIPsetCalcMemGrowSize(), and SCIP_CliqueList::size.

    Referenced by SCIPcliquelistAdd().

    ◆ SCIPcliquelistAdd()

    SCIP_RETCODE SCIPcliquelistAdd ( SCIP_CLIQUELIST **  cliquelist,
    BMS_BLKMEM blkmem,
    SCIP_SET set,
    SCIP_Bool  value,
    SCIP_CLIQUE clique 
    )

    adds a clique to the clique list

    Parameters
    cliquelistpointer to the clique list data structure
    blkmemblock memory
    setglobal SCIP settings
    valuevalue of the variable for which the clique list should be extended
    cliqueclique that should be added to the clique list

    Definition at line 1482 of file implics.c.

    References BMSmoveMemoryArray, cliquelistCreate(), cliquelistEnsureSize(), SCIP_Clique::id, SCIP_CliqueList::ncliques, NULL, SCIP_CALL, SCIP_OKAY, and SCIPsetDebugMsg.

    Referenced by SCIPvarAddClique(), SCIPvarAddCliqueToList(), and SCIPvarsAddClique().

    ◆ SCIPcliquelistDel()

    SCIP_RETCODE SCIPcliquelistDel ( SCIP_CLIQUELIST **  cliquelist,
    BMS_BLKMEM blkmem,
    SCIP_Bool  value,
    SCIP_CLIQUE clique 
    )

    removes a clique from the clique list

    Parameters
    cliquelistpointer to the clique list data structure
    blkmemblock memory
    valuevalue of the variable for which the clique list should be reduced
    cliqueclique that should be deleted from the clique list

    Definition at line 1527 of file implics.c.

    References BMSduplicateBlockMemoryArray, BMSfreeBlockMemoryArray, BMSmoveMemoryArray, cliquesSearchClique(), SCIP_Clique::id, SCIP_CliqueList::ncliques, NULL, SCIP_ALLOC, SCIP_Bool, SCIP_OKAY, SCIPcliqueGetNVars(), SCIPcliqueGetValues(), SCIPcliqueGetVars(), SCIPcliquelistFree(), SCIPdebugMessage, and SCIPsortPtrBool().

    Referenced by SCIPvarDelClique(), and SCIPvarDelCliqueFromList().

    ◆ SCIPcliquelistsHaveCommonClique()

    SCIP_Bool SCIPcliquelistsHaveCommonClique ( SCIP_CLIQUELIST cliquelist1,
    SCIP_Bool  value1,
    SCIP_CLIQUELIST cliquelist2,
    SCIP_Bool  value2 
    )

    returns whether the given clique lists have a non-empty intersection, i.e. whether there is a clique that appears in both lists

    Parameters
    cliquelist1first clique list data structure
    value1value of first variable
    cliquelist2second clique list data structure
    value2value of second variable

    Definition at line 1605 of file implics.c.

    References SCIP_CliqueList::cliques, FALSE, SCIP_CliqueList::ncliques, NULL, SCIPcliqueGetId(), and TRUE.

    Referenced by SCIPvarsHaveCommonClique().

    ◆ SCIPcliquelistRemoveFromCliques()

    void SCIPcliquelistRemoveFromCliques ( SCIP_CLIQUELIST cliquelist,
    SCIP_CLIQUETABLE cliquetable,
    SCIP_VAR var,
    SCIP_Bool  irrelevantvar 
    )

    removes all listed entries from the cliques

    Parameters
    cliquelistclique list data structure
    cliquetableclique table data structure
    varactive problem variable the clique list belongs to
    irrelevantvarhas the variable become irrelevant, meaning that equality cliques need to be relaxed?

    Definition at line 1683 of file implics.c.

    References cliqueCheck, SCIP_CliqueList::cliques, SCIP_Clique::equation, FALSE, SCIP_Clique::id, SCIP_CliqueTable::incleanup, SCIP_Clique::index, SCIP_CliqueList::ncliques, NULL, SCIP_Clique::nvars, SCIP_Bool, SCIPcliqueDelVar(), SCIPdebugMessage, SCIPvarGetCliques(), SCIPvarGetName(), SCIPvarGetNCliques(), and SCIPvarIsBinary().

    Referenced by SCIPvarRemoveCliquesImplicsVbs().

    ◆ SCIP_DECL_HASHGETKEY()

    static SCIP_DECL_HASHGETKEY ( hashgetkeyClique  )
    static

    gets the key of the given element

    Definition at line 1739 of file implics.c.

    ◆ SCIP_DECL_HASHKEYEQ()

    static SCIP_DECL_HASHKEYEQ ( hashkeyeqClique  )
    static

    returns TRUE iff both keys are equal

    Definition at line 1746 of file implics.c.

    References FALSE, NULL, SCIP_Clique::nvars, TRUE, SCIP_Clique::values, and SCIP_Clique::vars.

    ◆ SCIP_DECL_HASHKEYVAL()

    static SCIP_DECL_HASHKEYVAL ( hashkeyvalClique  )
    static

    returns the hash value of the key

    Definition at line 1772 of file implics.c.

    References SCIP_Clique::nvars, SCIPhashFour, SCIPvarGetIndex(), SCIP_Clique::values, and SCIP_Clique::vars.

    ◆ SCIPcliquetableCreate()

    SCIP_RETCODE SCIPcliquetableCreate ( SCIP_CLIQUETABLE **  cliquetable,
    SCIP_SET set,
    BMS_BLKMEM blkmem 
    )

    creates a clique table data structure

    Parameters
    cliquetablepointer to store clique table data structure
    setglobal SCIP settings
    blkmemblock memory

    Definition at line 1786 of file implics.c.

    References BMSallocMemory, FALSE, HASHTABLE_CLIQUETABLE_SIZE, MAX, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_HASHSIZE_CLIQUES, SCIP_HASHSIZE_CLIQUES_SMALL, SCIP_OKAY, and SCIPhashtableCreate().

    Referenced by SCIPtransformProb().

    ◆ SCIPcliquetableFree()

    SCIP_RETCODE SCIPcliquetableFree ( SCIP_CLIQUETABLE **  cliquetable,
    BMS_BLKMEM blkmem 
    )

    frees a clique table data structure

    Parameters
    cliquetablepointer to store clique table data structure
    blkmemblock memory

    Definition at line 1822 of file implics.c.

    References BMSfreeMemory, BMSfreeMemoryArrayNull, cliqueFree(), NULL, SCIP_OKAY, SCIPdisjointsetFree(), SCIPhashmapFree(), and SCIPhashtableFree().

    Referenced by freeTransform(), and freeTransforming().

    ◆ cliquetableEnsureSize()

    static SCIP_RETCODE cliquetableEnsureSize ( SCIP_CLIQUETABLE cliquetable,
    SCIP_SET set,
    int  num 
    )
    static

    ensures, that clique table arrays can store at least num entries

    Parameters
    cliquetableclique table data structure
    setglobal SCIP settings
    numminimum number of entries to store

    Definition at line 1859 of file implics.c.

    References BMSreallocMemoryArray, SCIP_CliqueTable::cliques, NULL, SCIP_ALLOC, SCIP_OKAY, SCIPsetCalcMemGrowSize(), and SCIP_CliqueTable::size.

    Referenced by SCIPcliquetableAdd().

    ◆ sortAndMergeClique()

    static SCIP_RETCODE sortAndMergeClique ( SCIP_VAR **  clqvars,
    SCIP_Bool clqvalues,
    int *  nclqvars,
    SCIP_Bool isequation,
    SCIP_CLIQUE clique,
    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,
    int *  nbdchgs,
    SCIP_Bool infeasible 
    )
    static

    sort variables regarding their index and remove multiple entries of the same variable

    Parameters
    clqvarsvariables of a clique
    clqvaluesclique values, active or negated, for the variables in a clique
    nclqvarsnumber of clique variables
    isequationdo we have an equation clique at hand?
    cliqueclique data structure or NULL
    blkmemblock memory
    setglobal SCIP settings
    statproblem statistics
    transprobtransformed problem
    origproboriginal problem
    treebranch and bound tree if in solving stage
    reoptreoptimization data structure
    lpcurrent LP data
    branchcandbranching candidate storage
    eventqueueevent queue
    eventfilterglobal event filter
    cliquetableclique table data structure
    nbdchgspointer to store number of fixed variables
    infeasiblepointer to store whether an infeasibility was detected

    Definition at line 1882 of file implics.c.

    References FALSE, SCIP_Clique::id, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_COLUMN, SCIP_VARSTATUS_LOOSE, SCIPsetDebugMsg, SCIPsortPtrBool(), SCIPvarDelCliqueFromList(), SCIPvarFixBinary(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetUbGlobal(), SCIPvarIsBinary(), TRUE, and w.

    Referenced by cliqueCleanup(), and SCIPcliquetableAdd().

    ◆ cliquetableGetNodeIndexBinvar()

    static int cliquetableGetNodeIndexBinvar ( SCIP_CLIQUETABLE cliquetable,
    SCIP_VAR binvar 
    )
    static

    helper function that returns the graph node index for a variable during connected component detection

    Parameters
    cliquetableclique table data structure
    binvarbinary (or binary integer or implicit binary) variable

    Definition at line 2262 of file implics.c.

    References SCIP_CliqueTable::compsfromscratch, NULL, SCIPhashmapExists(), SCIPhashmapGetImageInt(), SCIPvarGetProbvar(), SCIPvarIsActive(), SCIPvarIsBinary(), TRUE, and SCIP_CliqueTable::varidxtable.

    Referenced by cliquetableUpdateConnectednessClique(), and SCIPcliquetableGetVarComponentIdx().

    ◆ cliquetableUpdateConnectednessClique()

    static void cliquetableUpdateConnectednessClique ( SCIP_CLIQUETABLE cliquetable,
    SCIP_CLIQUE clique 
    )
    static

    updates connectedness information for the clique

    Parameters
    cliquetableclique table data structure
    cliqueclique that should be added

    Definition at line 2305 of file implics.c.

    References cliquetableGetNodeIndexBinvar(), SCIP_CliqueTable::compsfromscratch, SCIP_CliqueTable::djset, FALSE, NULL, SCIP_Clique::nvars, SCIPdisjointsetUnion(), TRUE, and SCIP_Clique::vars.

    Referenced by SCIPcliquetableAdd(), and SCIPcliquetableComputeCliqueComponents().

    ◆ SCIPcliquetableGetVarComponentIdx()

    int SCIPcliquetableGetVarComponentIdx ( SCIP_CLIQUETABLE cliquetable,
    SCIP_VAR var 
    )

    returns the index of the connected component of the clique graph that the variable belongs to, or -1

    Parameters
    cliquetableclique table data structure
    varproblem variable

    Definition at line 2349 of file implics.c.

    References cliquetableGetNodeIndexBinvar(), SCIP_CliqueTable::djset, NULL, SCIPdisjointsetFind(), SCIPdisjointsetGetSize(), and SCIPvarIsBinary().

    ◆ SCIPcliquetableAdd()

    SCIP_RETCODE SCIPcliquetableAdd ( SCIP_CLIQUETABLE cliquetable,
    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_VAR **  vars,
    SCIP_Bool values,
    int  nvars,
    SCIP_Bool  isequation,
    SCIP_Bool infeasible,
    int *  nbdchgs 
    )

    adds a clique to the clique table, using the given values for the given variables; performs implications if the clique contains the same variable twice

    Parameters
    cliquetableclique table data structure
    blkmemblock memory
    setglobal SCIP settings
    statproblem statistics
    transprobtransformed problem
    origproboriginal problem
    treebranch and bound tree if in solving stage
    reoptreoptimization data structure
    lpcurrent LP data
    branchcandbranching candidate storage
    eventqueueevent queue
    eventfilterglobal event filter
    varsbinary variables in the clique: at most one can be set to the given value
    valuesvalues of the variables in the clique; NULL to use TRUE for all vars
    nvarsnumber of variables in the clique
    isequationis the clique an equation or an inequality?
    infeasiblepointer to store whether an infeasibility was detected
    nbdchgspointer to count the number of performed bound changes, or NULL

    Definition at line 2377 of file implics.c.

    References cliqueCheck, cliqueCreateWithData(), cliqueFree(), SCIP_CliqueTable::cliques, cliquetableEnsureSize(), cliquetableUpdateConnectednessClique(), SCIP_Clique::equation, FALSE, SCIP_CliqueTable::hashtable, SCIP_Clique::id, SCIP_Clique::index, SCIP_CliqueTable::ncliques, SCIP_CliqueTable::ncreatedcliques, SCIP_CliqueTable::nentries, SCIP_Stat::nnz, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_COLUMN, SCIP_VARSTATUS_FIXED, SCIP_VARSTATUS_LOOSE, SCIP_VARSTATUS_MULTAGGR, SCIPcliquetableGetNEntries(), SCIPdebugCheckClique, SCIPhashtableInsert(), SCIPhashtableRetrieve(), SCIPsetAllocBufferArray, SCIPsetDebugMsg, SCIPsetDuplicateBufferArray, SCIPsetFreeBufferArray, SCIPsetIsInfinity(), SCIPvarFixBinary(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetUbGlobal(), SCIPvarIsBinary(), SCIPvarIsMarkedDeleteGlobalStructures(), SCIPvarsAddClique(), SCIPvarsGetProbvarBinary(), sortAndMergeClique(), TRUE, and w.

    Referenced by SCIPaddClique(), and varAddImplic().

    ◆ cliqueCleanup()

    static SCIP_RETCODE cliqueCleanup ( SCIP_CLIQUE clique,
    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,
    int *  nchgbds,
    SCIP_Bool infeasible 
    )
    static

    clean up given clique by removing fixed variables

    Parameters
    cliqueclique data structure
    blkmemblock memory
    setglobal SCIP settings
    statproblem statistics
    transprobtransformed problem
    origproboriginal problem
    treebranch and bound tree if in solving stage
    reoptreoptimization data structure
    lpcurrent LP data
    branchcandbranching candidate storage
    eventqueueevent queue
    eventfilterglobal event filter
    cliquetableclique table data structure
    nchgbdspointer to store number of fixed variables
    infeasiblepointer to store whether an infeasibility was detected

    Definition at line 2648 of file implics.c.

    References SCIP_Clique::equation, FALSE, SCIP_Clique::id, NULL, SCIP_Clique::nvars, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_AGGREGATED, SCIP_VARSTATUS_COLUMN, SCIP_VARSTATUS_FIXED, SCIP_VARSTATUS_LOOSE, SCIP_VARSTATUS_MULTAGGR, SCIP_VARSTATUS_NEGATED, SCIPcliqueIsCleanedUp(), SCIPsetDebugMsg, SCIPvarAddCliqueToList(), SCIPvarDelCliqueFromList(), SCIPvarFixBinary(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetNegationVar(), SCIPvarGetProbvarBinary(), SCIPvarGetStatus(), SCIPvarGetUbGlobal(), SCIPvarIsMarkedDeleteGlobalStructures(), sortAndMergeClique(), SCIP_Clique::startcleanup, TRUE, SCIP_Clique::values, SCIP_Clique::vars, and w.

    Referenced by SCIPcliquetableCleanup().

    ◆ SCIPcliquetableCleanup()

    SCIP_RETCODE SCIPcliquetableCleanup ( SCIP_CLIQUETABLE cliquetable,
    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,
    int *  nchgbds,
    SCIP_Bool infeasible 
    )

    removes all empty and single variable cliques from the clique table; removes double entries from the clique table

    Note
    cliques can be processed several times by this method
    Parameters
    cliquetableclique table data structure
    blkmemblock memory
    setglobal SCIP settings
    statproblem statistics
    transprobtransformed problem
    origproboriginal problem
    treebranch and bound tree if in solving stage
    reoptreoptimization data structure
    lpcurrent LP data
    branchcandbranching candidate storage
    eventqueueevent queue
    eventfilterglobal event filter
    nchgbdspointer to store number of fixed variables
    infeasiblepointer to store whether an infeasibility was detected

    Definition at line 2923 of file implics.c.

    References checkNEntries, cliqueCheck, cliqueCleanup(), cliqueFree(), SCIP_CliqueTable::cliques, cliquetableSwapCliques(), SCIP_Clique::equation, FALSE, SCIP_CliqueTable::hashtable, SCIP_Clique::id, SCIP_CliqueTable::incleanup, SCIP_Clique::index, SCIP_CliqueTable::ncleanupaggrvars, SCIP_CliqueTable::ncleanupfixedvars, SCIP_CliqueTable::ncliques, SCIP_CliqueTable::ndirtycliques, SCIP_CliqueTable::nentries, SCIP_Stat::npresolaggrvars, SCIP_Stat::npresolfixedvars, NULL, SCIP_Clique::nvars, SCIP_Bool, SCIP_CALL, SCIP_LONGINT_FORMAT, SCIP_OKAY, SCIP_Real, SCIP_STAGE_PRESOLVING, SCIP_VARSTATUS_COLUMN, SCIP_VARSTATUS_LOOSE, SCIPcliqueIsCleanedUp(), SCIPeventCreateImplAdded(), SCIPeventqueueAdd(), SCIPeventqueueDelay(), SCIPeventqueueProcess(), SCIPhashtableInsert(), SCIPhashtableRemove(), SCIPhashtableRetrieve(), SCIPsetDebugMsg, SCIPsetGetStage(), SCIPvarDelCliqueFromList(), SCIPvarGetStatus(), SCIPvarGetType(), SCIPvarTryAggregateVars(), TRUE, SCIP_Clique::values, and SCIP_Clique::vars.

    Referenced by exitPresolve(), presolveRound(), and SCIPcleanupCliques().

    ◆ SCIPcliquetableComputeCliqueComponents()

    SCIP_RETCODE SCIPcliquetableComputeCliqueComponents ( SCIP_CLIQUETABLE cliquetable,
    SCIP_SET set,
    BMS_BLKMEM blkmem,
    SCIP_VAR **  vars,
    int  nbinvars,
    int  nintvars,
    int  nimplvars 
    )

    computes connected components of the clique table

    an update becomes necessary if a clique gets added with variables from different components

    Parameters
    cliquetableclique table data structure
    setglobal SCIP settings
    blkmemblock memory
    varsarray of problem variables, sorted by variable type
    nbinvarsnumber of binary variables
    nintvarsnumber of integer variables
    nimplvarsnumber of implicit integer variables

    Definition at line 3135 of file implics.c.

    References SCIP_CliqueTable::cliques, cliquetableUpdateConnectednessClique(), SCIP_CliqueTable::compsfromscratch, SCIP_CliqueTable::djset, FALSE, SCIP_CliqueTable::ncliquecomponents, SCIP_CliqueTable::ncliques, NULL, SCIP_CALL, SCIP_OKAY, SCIPdisjointsetCreate(), SCIPdisjointsetFree(), SCIPdisjointsetGetComponentCount(), SCIPhashmapCreate(), SCIPhashmapInsertInt(), SCIPhashmapRemoveAll(), SCIPsetDebugMsg, SCIPvarGetProbvar(), SCIPvarIsActive(), SCIPvarIsBinary(), and SCIP_CliqueTable::varidxtable.

    ◆ SCIPvboundsGetNVbds()

    int SCIPvboundsGetNVbds ( SCIP_VBOUNDS vbounds)

    gets number of variable bounds contained in given variable bounds data structure

    Parameters
    vboundsvariable bounds data structure

    Definition at line 3294 of file implics.c.

    References SCIP_VBounds::len, and NULL.

    Referenced by SCIPvarAggregate(), SCIPvarGetNVlbs(), SCIPvarGetNVubs(), SCIPvarRemoveCliquesImplicsVbs(), and varAddTransitiveImplic().

    ◆ SCIPvboundsGetVars()

    SCIP_VAR ** SCIPvboundsGetVars ( SCIP_VBOUNDS vbounds)

    gets array of variables contained in given variable bounds data structure

    Parameters
    vboundsvariable bounds data structure

    Definition at line 3302 of file implics.c.

    References NULL, and SCIP_VBounds::vars.

    Referenced by SCIPvarAggregate(), SCIPvarGetVlbVars(), SCIPvarGetVubVars(), SCIPvarRemoveCliquesImplicsVbs(), and varAddTransitiveImplic().

    ◆ SCIPvboundsGetCoefs()

    SCIP_Real * SCIPvboundsGetCoefs ( SCIP_VBOUNDS vbounds)

    gets array of coefficients contained in given variable bounds data structure

    Parameters
    vboundsvariable bounds data structure

    Definition at line 3310 of file implics.c.

    References SCIP_VBounds::coefs, and NULL.

    Referenced by SCIPvarAggregate(), SCIPvarGetVlbCoefs(), SCIPvarGetVubCoefs(), SCIPvarRemoveCliquesImplicsVbs(), and varAddTransitiveImplic().

    ◆ SCIPvboundsGetConstants()

    SCIP_Real * SCIPvboundsGetConstants ( SCIP_VBOUNDS vbounds)

    gets array of constants contained in given variable bounds data structure

    Parameters
    vboundsvariable bounds data structure

    Definition at line 3318 of file implics.c.

    References SCIP_VBounds::constants, and NULL.

    Referenced by SCIPvarAggregate(), SCIPvarGetVlbConstants(), SCIPvarGetVubConstants(), SCIPvarRemoveCliquesImplicsVbs(), and varAddTransitiveImplic().

    ◆ SCIPimplicsGetNImpls()

    int SCIPimplicsGetNImpls ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing 
    )

    gets number of implications for a given binary variable fixing

    Parameters
    implicsimplication data
    varfixingshould the implications on var == FALSE or var == TRUE be returned?

    Definition at line 3326 of file implics.c.

    References SCIP_Implics::nimpls, and NULL.

    Referenced by SCIPvarAggregate(), SCIPvarGetImplRedcost(), SCIPvarGetNImpls(), SCIPvarRemoveCliquesImplicsVbs(), and varAddTransitiveBinaryClosureImplic().

    ◆ SCIPimplicsGetVars()

    SCIP_VAR ** SCIPimplicsGetVars ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing 
    )

    gets array with implied variables for a given binary variable fixing

    Parameters
    implicsimplication data
    varfixingshould the implications on var == FALSE or var == TRUE be returned?

    Definition at line 3335 of file implics.c.

    References NULL, and SCIP_Implics::vars.

    Referenced by SCIPvarAggregate(), SCIPvarGetImplRedcost(), SCIPvarGetImplVars(), SCIPvarRemoveCliquesImplicsVbs(), and varAddTransitiveBinaryClosureImplic().

    ◆ SCIPimplicsGetTypes()

    SCIP_BOUNDTYPE * SCIPimplicsGetTypes ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing 
    )

    gets array with implication types for a given binary variable fixing

    Parameters
    implicsimplication data
    varfixingshould the implications on var == FALSE or var == TRUE be returned?

    Definition at line 3344 of file implics.c.

    References NULL, and SCIP_Implics::types.

    Referenced by SCIPvarAggregate(), SCIPvarGetImplRedcost(), SCIPvarGetImplTypes(), SCIPvarRemoveCliquesImplicsVbs(), and varAddTransitiveBinaryClosureImplic().

    ◆ SCIPimplicsGetBounds()

    SCIP_Real * SCIPimplicsGetBounds ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing 
    )

    gets array with implication bounds for a given binary variable fixing

    Parameters
    implicsimplication data
    varfixingshould the implications on var == FALSE or var == TRUE be returned?

    Definition at line 3353 of file implics.c.

    References SCIP_Implics::bounds, and NULL.

    Referenced by SCIPvarAggregate(), SCIPvarGetImplBounds(), SCIPvarGetImplRedcost(), SCIPvarRemoveCliquesImplicsVbs(), and varAddTransitiveBinaryClosureImplic().

    ◆ SCIPimplicsGetIds()

    int * SCIPimplicsGetIds ( SCIP_IMPLICS implics,
    SCIP_Bool  varfixing 
    )

    Gets array with unique implication identifiers for a given binary variable fixing. If an implication is a shortcut, i.e., it was added as part of the transitive closure of another implication, its id is negative, otherwise it is nonnegative.

    Parameters
    implicsimplication data
    varfixingshould the implications on var == FALSE or var == TRUE be returned?

    Definition at line 3365 of file implics.c.

    References SCIP_Implics::ids, and NULL.

    Referenced by SCIPvarGetImplIds().

    ◆ SCIPcliqueGetNVars()

    ◆ SCIPcliqueGetVars()

    ◆ SCIPcliqueGetValues()

    ◆ SCIPcliqueGetId()

    unsigned int SCIPcliqueGetId ( SCIP_CLIQUE clique)

    gets unique identifier of the clique

    Parameters
    cliqueclique data structure

    Definition at line 3406 of file implics.c.

    References SCIP_Clique::id, and NULL.

    Referenced by createConflictGraphSST(), SCIP_DECL_HASHKEYVAL(), SCIPcliquelistsHaveCommonClique(), and tcliquegraphAddNode().

    ◆ SCIPcliqueGetIndex()

    int SCIPcliqueGetIndex ( SCIP_CLIQUE clique)

    gets index of the clique in the clique table

    Parameters
    cliqueclique data structure

    Definition at line 3420 of file implics.c.

    References SCIP_Clique::index, and NULL.

    Referenced by createConflictGraphSST(), dfs(), and tarjan().

    ◆ SCIPcliqueIsCleanedUp()

    SCIP_Bool SCIPcliqueIsCleanedUp ( SCIP_CLIQUE clique)

    gets unique identifier of the clique

    Parameters
    cliqueclique data structure

    Definition at line 3430 of file implics.c.

    References NULL, and SCIP_Clique::startcleanup.

    Referenced by cliqueCleanup(), cliquetableMarkCliqueForCleanup(), SCIPcliquetableCleanup(), and SCIPvarGetImplRedcost().

    ◆ SCIPcliqueIsEquation()

    SCIP_Bool SCIPcliqueIsEquation ( SCIP_CLIQUE clique)

    return whether the given clique is an equation

    Parameters
    cliqueclique data structure

    Definition at line 3440 of file implics.c.

    References SCIP_Clique::equation, NULL, and SCIP_Bool.

    Referenced by extractCycle(), SCIPcopyImplicationsCliques(), and separateCuts().

    ◆ SCIPcliquelistGetNCliques()

    int SCIPcliquelistGetNCliques ( SCIP_CLIQUELIST cliquelist,
    SCIP_Bool  value 
    )

    returns the number of cliques stored in the clique list

    Parameters
    cliquelistclique list data structure
    valuevalue of the variable for which the cliques should be returned

    Definition at line 3450 of file implics.c.

    References SCIP_CliqueList::ncliques, and NULL.

    Referenced by SCIPcliquelistCheck(), and SCIPvarGetNCliques().

    ◆ SCIPcliquelistGetCliques()

    SCIP_CLIQUE ** SCIPcliquelistGetCliques ( SCIP_CLIQUELIST cliquelist,
    SCIP_Bool  value 
    )

    returns the cliques stored in the clique list, or NULL if the clique list is empty

    Parameters
    cliquelistclique list data structure
    valuevalue of the variable for which the cliques should be returned

    Definition at line 3459 of file implics.c.

    References SCIP_CliqueList::cliques, and NULL.

    Referenced by SCIPcliquelistCheck(), and SCIPvarGetCliques().

    ◆ SCIPcliquelistCheck()

    void SCIPcliquelistCheck ( SCIP_CLIQUELIST cliquelist,
    SCIP_VAR var 
    )

    checks whether variable is contained in all cliques of the cliquelist

    Parameters
    cliquelistclique list data structure
    varvariable, the clique list belongs to

    Definition at line 3468 of file implics.c.

    References FALSE, NULL, SCIP_Bool, SCIPcliquelistGetCliques(), SCIPcliquelistGetNCliques(), SCIPcliqueSearchVar(), SCIPvarGetCliques(), SCIPvarGetNCliques(), TRUE, SCIP_Clique::values, and SCIP_Clique::vars.

    Referenced by SCIPvarAddClique(), SCIPvarDelClique(), and SCIPvarsAddClique().

    ◆ SCIPcliquetableGetNCliques()

    int SCIPcliquetableGetNCliques ( SCIP_CLIQUETABLE cliquetable)

    gets the number of cliques stored in the clique table

    Parameters
    cliquetableclique table data structure

    Definition at line 3510 of file implics.c.

    References SCIP_CliqueTable::ncliques, and NULL.

    Referenced by presolve(), SCIPgetNCliques(), SCIPhaveVarsCommonClique(), and SCIPisPresolveFinished().

    ◆ SCIPcliquetableGetNCliquesCreated()

    int SCIPcliquetableGetNCliquesCreated ( SCIP_CLIQUETABLE cliquetable)

    gets the number of cliques created so far by the clique table

    Parameters
    cliquetableclique table data structure

    Definition at line 3520 of file implics.c.

    References SCIP_CliqueTable::ncreatedcliques, and NULL.

    Referenced by SCIPgetNCliquesCreated().

    ◆ SCIPcliquetableGetCliques()

    SCIP_CLIQUE ** SCIPcliquetableGetCliques ( SCIP_CLIQUETABLE cliquetable)

    gets the array of cliques stored in the clique table

    Parameters
    cliquetableclique table data structure

    Definition at line 3530 of file implics.c.

    References SCIP_CliqueTable::cliques, and NULL.

    Referenced by SCIPgetCliques().

    ◆ SCIPcliquetableGetNEntries()

    SCIP_Longint SCIPcliquetableGetNEntries ( SCIP_CLIQUETABLE cliquetable)

    gets the number of entries in the whole clique table

    Parameters
    cliquetableclique table data structure

    Definition at line 3540 of file implics.c.

    References SCIP_CliqueTable::nentries, and NULL.

    Referenced by SCIPcliquetableAdd(), SCIPcollectTransProblemStatistics(), and SCIPprintTransProblemStatistics().

    ◆ SCIPcliquetableGetNCliqueComponents()

    int SCIPcliquetableGetNCliqueComponents ( SCIP_CLIQUETABLE cliquetable)

    returns the number of clique components, or -1 if update is necessary first

    Parameters
    cliquetableclique table data structure

    Definition at line 3550 of file implics.c.

    References SCIP_CliqueTable::compsfromscratch, and SCIP_CliqueTable::ncliquecomponents.

    ◆ SCIPcliquetableNeedsComponentUpdate()

    SCIP_Bool SCIPcliquetableNeedsComponentUpdate ( SCIP_CLIQUETABLE cliquetable)

    returns TRUE iff the connected clique components need an update (because new cliques were added)

    Parameters
    cliquetableclique table data structure

    Definition at line 3558 of file implics.c.

    References SCIP_CliqueTable::compsfromscratch, SCIP_CliqueTable::djset, and NULL.