Scippy

    SCIP

    Solving Constraint Integer Programs

    Detailed Description

    constraint handler for disjunction constraints

    Author
    Stefan Heinz
    Michael Winkler

    Definition in file cons_disjunction.c.

    #include "blockmemshell/memory.h"
    #include "scip/cons_disjunction.h"
    #include "scip/pub_cons.h"
    #include "scip/pub_message.h"
    #include "scip/pub_tree.h"
    #include "scip/scip_branch.h"
    #include "scip/scip_cons.h"
    #include "scip/scip_copy.h"
    #include "scip/scip_general.h"
    #include "scip/scip_mem.h"
    #include "scip/scip_message.h"
    #include "scip/scip_param.h"
    #include "scip/scip_prob.h"
    #include "scip/scip_probing.h"
    #include "scip/scip_sol.h"
    #include "scip/scip_solvingstats.h"
    #include "scip/scip_tree.h"
    #include "scip/symmetry_graph.h"
    #include <string.h>

    Go to the source code of this file.

    Macros

    #define CONSHDLR_NAME   "disjunction"
     
    #define CONSHDLR_DESC   "disjunction of constraints (or(cons1, cons2, ..., consn))"
     
    #define CONSHDLR_ENFOPRIORITY   -950000
     
    #define CONSHDLR_CHECKPRIORITY   -900000
     
    #define CONSHDLR_PROPFREQ   -1
     
    #define CONSHDLR_EAGERFREQ   100
     
    #define CONSHDLR_MAXPREROUNDS   -1
     
    #define CONSHDLR_DELAYPROP   FALSE
     
    #define CONSHDLR_NEEDSCONS   TRUE
     
    #define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_FAST
     
    #define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_BEFORELP
     
    #define DEFAULT_ALWAYSBRANCH   TRUE
     

    Functions

    static SCIP_RETCODE consdataCreate (SCIP *scip, SCIP_CONSDATA **consdata, SCIP_CONS **conss, int nconss, SCIP_CONS *relaxcons)
     
    static SCIP_RETCODE consdataFree (SCIP *scip, SCIP_CONSDATA **consdata)
     
    static SCIP_RETCODE consdataAddCons (SCIP *scip, SCIP_CONSDATA *consdata, SCIP_CONS *cons)
     
    static SCIP_RETCODE branchCons (SCIP *scip, SCIP_CONS *cons, SCIP_RESULT *result)
     
    static SCIP_RETCODE checkCons (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool printreason, SCIP_RESULT *result)
     
    static SCIP_RETCODE propagateCons (SCIP *scip, SCIP_CONS *cons, int *ndelconss)
     
    static SCIP_RETCODE enforceConstraint (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_RESULT *result)
     
    static SCIP_RETCODE addSymmetryInformation (SCIP *scip, SYM_SYMTYPE symtype, SCIP_CONS *cons, SYM_GRAPH *graph, SCIP_Bool *success)
     
    static SCIP_DECL_CONSHDLRCOPY (conshdlrCopyDisjunction)
     
    static SCIP_DECL_CONSFREE (consFreeDisjunction)
     
    static SCIP_DECL_CONSDELETE (consDeleteDisjunction)
     
    static SCIP_DECL_CONSTRANS (consTransDisjunction)
     
    static SCIP_DECL_CONSINITLP (consInitlpDisjunction)
     
    static SCIP_DECL_CONSENFOLP (consEnfolpDisjunction)
     
    static SCIP_DECL_CONSENFORELAX (consEnforelaxDisjunction)
     
    static SCIP_DECL_CONSENFOPS (consEnfopsDisjunction)
     
    static SCIP_DECL_CONSCHECK (consCheckDisjunction)
     
    static SCIP_DECL_CONSPROP (consPropDisjunction)
     
    static SCIP_DECL_CONSPRESOL (consPresolDisjunction)
     
    static SCIP_DECL_CONSLOCK (consLockDisjunction)
     
    static SCIP_DECL_CONSPRINT (consPrintDisjunction)
     
    static SCIP_DECL_CONSPARSE (consParseDisjunction)
     
    static SCIP_DECL_CONSCOPY (consCopyDisjunction)
     
    static SCIP_DECL_CONSGETPERMSYMGRAPH (consGetPermsymGraphDisjunction)
     
    static SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH (consGetSignedPermsymGraphDisjunction)
     
    SCIP_RETCODE SCIPincludeConshdlrDisjunction (SCIP *scip)
     
    SCIP_RETCODE SCIPcreateConsDisjunction (SCIP *scip, SCIP_CONS **cons, const char *name, int nconss, SCIP_CONS **conss, SCIP_CONS *relaxcons, SCIP_Bool initial, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic)
     
    SCIP_RETCODE SCIPcreateConsBasicDisjunction (SCIP *scip, SCIP_CONS **cons, const char *name, int nconss, SCIP_CONS **conss, SCIP_CONS *relaxcons)
     
    SCIP_RETCODE SCIPaddConsElemDisjunction (SCIP *scip, SCIP_CONS *cons, SCIP_CONS *addcons)
     

    Macro Definition Documentation

    ◆ CONSHDLR_NAME

    #define CONSHDLR_NAME   "disjunction"

    Definition at line 56 of file cons_disjunction.c.

    ◆ CONSHDLR_DESC

    #define CONSHDLR_DESC   "disjunction of constraints (or(cons1, cons2, ..., consn))"

    Definition at line 57 of file cons_disjunction.c.

    ◆ CONSHDLR_ENFOPRIORITY

    #define CONSHDLR_ENFOPRIORITY   -950000

    priority of the constraint handler for constraint enforcing

    Definition at line 58 of file cons_disjunction.c.

    ◆ CONSHDLR_CHECKPRIORITY

    #define CONSHDLR_CHECKPRIORITY   -900000

    priority of the constraint handler for checking feasibility

    Definition at line 59 of file cons_disjunction.c.

    ◆ CONSHDLR_PROPFREQ

    #define CONSHDLR_PROPFREQ   -1

    frequency for propagating domains; zero means only preprocessing propagation

    Definition at line 60 of file cons_disjunction.c.

    ◆ CONSHDLR_EAGERFREQ

    #define CONSHDLR_EAGERFREQ   100

    frequency for using all instead of only the useful constraints in separation, propagation and enforcement, -1 for no eager evaluations, 0 for first only

    Definition at line 62 of file cons_disjunction.c.

    ◆ CONSHDLR_MAXPREROUNDS

    #define CONSHDLR_MAXPREROUNDS   -1

    maximal number of presolving rounds the constraint handler participates in (-1: no limit)

    Definition at line 64 of file cons_disjunction.c.

    ◆ CONSHDLR_DELAYPROP

    #define CONSHDLR_DELAYPROP   FALSE

    should propagation method be delayed, if other propagators found reductions?

    Definition at line 65 of file cons_disjunction.c.

    ◆ CONSHDLR_NEEDSCONS

    #define CONSHDLR_NEEDSCONS   TRUE

    should the constraint handler be skipped, if no constraints are available?

    Definition at line 66 of file cons_disjunction.c.

    ◆ CONSHDLR_PRESOLTIMING

    #define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_FAST

    Definition at line 68 of file cons_disjunction.c.

    ◆ CONSHDLR_PROP_TIMING

    #define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_BEFORELP

    Definition at line 69 of file cons_disjunction.c.

    ◆ DEFAULT_ALWAYSBRANCH

    #define DEFAULT_ALWAYSBRANCH   TRUE

    alawys perform branching if one of the constraints is violated, otherwise only if all integers are fixed

    Definition at line 72 of file cons_disjunction.c.

    Function Documentation

    ◆ consdataCreate()

    static SCIP_RETCODE consdataCreate ( SCIP scip,
    SCIP_CONSDATA **  consdata,
    SCIP_CONS **  conss,
    int  nconss,
    SCIP_CONS relaxcons 
    )
    static

    creates disjunction constraint data, captures initial constraints of disjunction

    Parameters
    scipSCIP data structure
    consdatapointer to constraint data
    conssinitial constraint in disjunction
    nconssnumber of initial constraints in disjunction
    relaxconsa conjunction constraint containing the liner relaxation of the disjunction constraint, or NULL

    Definition at line 101 of file cons_disjunction.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPcaptureCons(), SCIPduplicateBlockMemoryArray, SCIPisTransformed(), SCIPtransformCons(), and SCIPtransformConss().

    Referenced by SCIP_DECL_CONSTRANS(), and SCIPcreateConsDisjunction().

    ◆ consdataFree()

    static SCIP_RETCODE consdataFree ( SCIP scip,
    SCIP_CONSDATA **  consdata 
    )
    static

    frees constraint data and releases all constraints in disjunction

    Parameters
    scipSCIP data structure
    consdatapointer to constraint data

    Definition at line 164 of file cons_disjunction.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPfreeBlockMemory, SCIPfreeBlockMemoryArrayNull, and SCIPreleaseCons().

    Referenced by SCIP_DECL_CONSDELETE().

    ◆ consdataAddCons()

    static SCIP_RETCODE consdataAddCons ( SCIP scip,
    SCIP_CONSDATA consdata,
    SCIP_CONS cons 
    )
    static

    adds constraint to disjunction

    Parameters
    scipSCIP data structure
    consdataconstraint data
    consconstraint to add to the disjunction

    Definition at line 196 of file cons_disjunction.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPcaptureCons(), SCIPensureBlockMemoryArray, SCIPisTransformed(), and SCIPtransformCons().

    Referenced by SCIPaddConsElemDisjunction().

    ◆ branchCons()

    static SCIP_RETCODE branchCons ( SCIP scip,
    SCIP_CONS cons,
    SCIP_RESULT result 
    )
    static

    ◆ checkCons()

    static SCIP_RETCODE checkCons ( SCIP scip,
    SCIP_CONS cons,
    SCIP_SOL sol,
    SCIP_Bool  checkintegrality,
    SCIP_Bool  checklprows,
    SCIP_Bool  printreason,
    SCIP_RESULT result 
    )
    static

    checks disjunction constraints if at least one is feasible

    Parameters
    scipSCIP data structure
    consactive disjunction constraint
    solsolution to check
    checkintegralityHas integrality to be checked?
    checklprowsDo constraints represented by rows in the current LP have to be checked?
    printreasonShould the reason for the violation be printed?
    resultpointer to store the result

    Definition at line 298 of file cons_disjunction.c.

    References FALSE, NULL, SCIP_CALL, SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, SCIPactivateSolViolationUpdates(), SCIPcheckCons(), SCIPconsGetData(), SCIPconsGetName(), SCIPdeactivateSolViolationUpdates(), SCIPdebug, SCIPinfoMessage(), SCIPprintCons(), and SCIPupdateSolConsViolation().

    Referenced by enforceConstraint(), and SCIP_DECL_CONSCHECK().

    ◆ propagateCons()

    static SCIP_RETCODE propagateCons ( SCIP scip,
    SCIP_CONS cons,
    int *  ndelconss 
    )
    static

    propagation method for disjunction constraint

    Parameters
    scipSCIP data structure
    consdisjunctive constraint
    ndelconsspointer to count number of deleted constraints

    Definition at line 354 of file cons_disjunction.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIP_STAGE_PRESOLVING, SCIPconsGetData(), SCIPconsIsActive(), SCIPconsIsChecked(), SCIPconsIsDeleted(), SCIPdelCons(), SCIPdelConsLocal(), SCIPgetNNodes(), SCIPgetStage(), SCIPsetConsChecked(), and TRUE.

    Referenced by SCIP_DECL_CONSPRESOL(), and SCIP_DECL_CONSPROP().

    ◆ enforceConstraint()

    static SCIP_RETCODE enforceConstraint ( SCIP scip,
    SCIP_CONSHDLR conshdlr,
    SCIP_CONS **  conss,
    int  nconss,
    SCIP_SOL sol,
    SCIP_RESULT result 
    )
    static

    helper function to enforce constraints

    Parameters
    scipSCIP data structure
    conshdlrconstraint handler
    conssconstraints to process
    nconssnumber of constraints
    solsolution to enforce (NULL for LP solution)
    resultpointer to store the result of the enforcing call

    Definition at line 417 of file cons_disjunction.c.

    References branch(), branchCons(), checkCons(), FALSE, NULL, SCIP_Bool, SCIP_BRANCHED, SCIP_CALL, SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, SCIPconshdlrGetData(), and SCIPgetNPseudoBranchCands().

    Referenced by SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), and SCIP_DECL_CONSENFORELAX().

    ◆ addSymmetryInformation()

    static SCIP_RETCODE addSymmetryInformation ( SCIP scip,
    SYM_SYMTYPE  symtype,
    SCIP_CONS cons,
    SYM_GRAPH graph,
    SCIP_Bool success 
    )
    static

    adds symmetry information of constraint to a symmetry detection graph

    Parameters
    scipSCIP pointer
    symtypetype of symmetries that need to be added
    consconstraint
    graphsymmetry detection graph
    successpointer to store whether symmetry information could be added

    Definition at line 453 of file cons_disjunction.c.

    References SYM_Graph::conss, FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPaddSymgraphConsnode(), SCIPaddSymgraphEdge(), SCIPclearSymgraph(), SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrSupportsPermsymDetection(), SCIPconshdlrSupportsSignedPermsymDetection(), SCIPcopySymgraphAsSubgraph(), SCIPcreateSymgraph(), SCIPfreeSymgraph(), SCIPgetConsPermsymGraph(), SCIPgetConsSignedPermsymGraph(), SCIPgetNVars(), SCIPgetVars(), SYM_SYMTYPE_PERM, SYM_SYMTYPE_SIGNPERM, and TRUE.

    Referenced by SCIP_DECL_CONSGETPERMSYMGRAPH(), and SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH().

    ◆ SCIP_DECL_CONSHDLRCOPY()

    static SCIP_DECL_CONSHDLRCOPY ( conshdlrCopyDisjunction  )
    static

    copy method for constraint handler plugins (called when SCIP copies plugins)

    Definition at line 547 of file cons_disjunction.c.

    References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_OKAY, SCIPconshdlrGetName(), SCIPincludeConshdlrDisjunction(), and TRUE.

    ◆ SCIP_DECL_CONSFREE()

    static SCIP_DECL_CONSFREE ( consFreeDisjunction  )
    static

    destructor of constraint handler to free constraint handler data (called when SCIP is exiting)

    Definition at line 563 of file cons_disjunction.c.

    References CONSHDLR_NAME, NULL, SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconshdlrSetData(), and SCIPfreeBlockMemory.

    ◆ SCIP_DECL_CONSDELETE()

    static SCIP_DECL_CONSDELETE ( consDeleteDisjunction  )
    static

    frees specific constraint data

    Definition at line 584 of file cons_disjunction.c.

    References consdataFree(), SCIP_CALL, and SCIP_OKAY.

    ◆ SCIP_DECL_CONSTRANS()

    static SCIP_DECL_CONSTRANS ( consTransDisjunction  )
    static

    ◆ SCIP_DECL_CONSINITLP()

    static SCIP_DECL_CONSINITLP ( consInitlpDisjunction  )
    static

    LP initialization method of constraint handler

    Definition at line 617 of file cons_disjunction.c.

    References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPaddConsLocal(), SCIPconsGetData(), and SCIPconsIsActive().

    ◆ SCIP_DECL_CONSENFOLP()

    static SCIP_DECL_CONSENFOLP ( consEnfolpDisjunction  )
    static

    constraint enforcing method of constraint handler for LP solutions

    Definition at line 642 of file cons_disjunction.c.

    References enforceConstraint(), NULL, SCIP_CALL, and SCIP_OKAY.

    ◆ SCIP_DECL_CONSENFORELAX()

    static SCIP_DECL_CONSENFORELAX ( consEnforelaxDisjunction  )
    static

    constraint enforcing method of constraint handler for relaxation solutions

    Definition at line 652 of file cons_disjunction.c.

    References enforceConstraint(), SCIP_CALL, and SCIP_OKAY.

    ◆ SCIP_DECL_CONSENFOPS()

    static SCIP_DECL_CONSENFOPS ( consEnfopsDisjunction  )
    static

    constraint enforcing method of constraint handler for pseudo solutions

    Definition at line 662 of file cons_disjunction.c.

    References enforceConstraint(), NULL, SCIP_CALL, and SCIP_OKAY.

    ◆ SCIP_DECL_CONSCHECK()

    static SCIP_DECL_CONSCHECK ( consCheckDisjunction  )
    static

    feasibility check method of constraint handler for integral solutions

    Definition at line 672 of file cons_disjunction.c.

    References checkCons(), SCIP_CALL, SCIP_FEASIBLE, SCIP_INFEASIBLE, and SCIP_OKAY.

    ◆ SCIP_DECL_CONSPROP()

    static SCIP_DECL_CONSPROP ( consPropDisjunction  )
    static

    domain propagation method of constraint handler

    Definition at line 696 of file cons_disjunction.c.

    References propagateCons(), SCIP_CALL, SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_REDUCEDDOM, and SCIPinProbing().

    ◆ SCIP_DECL_CONSPRESOL()

    static SCIP_DECL_CONSPRESOL ( consPresolDisjunction  )
    static

    ◆ SCIP_DECL_CONSLOCK()

    static SCIP_DECL_CONSLOCK ( consLockDisjunction  )
    static

    variable rounding lock method of constraint handler

    Definition at line 779 of file cons_disjunction.c.

    References NULL, SCIP_CALL, SCIP_LOCKTYPE_MODEL, SCIP_OKAY, SCIPaddConsLocksType(), and SCIPconsGetData().

    ◆ SCIP_DECL_CONSPRINT()

    static SCIP_DECL_CONSPRINT ( consPrintDisjunction  )
    static

    constraint display method of constraint handler

    Definition at line 801 of file cons_disjunction.c.

    References NULL, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPinfoMessage(), and SCIPprintCons().

    ◆ SCIP_DECL_CONSPARSE()

    static SCIP_DECL_CONSPARSE ( consParseDisjunction  )
    static

    ◆ SCIP_DECL_CONSCOPY()

    ◆ SCIP_DECL_CONSGETPERMSYMGRAPH()

    static SCIP_DECL_CONSGETPERMSYMGRAPH ( consGetPermsymGraphDisjunction  )
    static

    constraint handler method which returns the permutation symmetry detection graph of a constraint

    Definition at line 1131 of file cons_disjunction.c.

    References addSymmetryInformation(), SCIP_CALL, SCIP_OKAY, and SYM_SYMTYPE_PERM.

    ◆ SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH()

    static SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH ( consGetSignedPermsymGraphDisjunction  )
    static

    constraint handler method which returns the signed permutation symmetry detection graph of a constraint

    Definition at line 1141 of file cons_disjunction.c.

    References addSymmetryInformation(), SCIP_CALL, SCIP_OKAY, and SYM_SYMTYPE_SIGNPERM.