Scippy

SCIP

Solving Constraint Integer Programs

cons_orbitope.c File Reference

Detailed Description

constraint handler for (partitioning/packing/full) orbitope constraints w.r.t. the full symmetric group

Author
Timo Berthold
Marc Pfetsch
Christopher Hojny

The type of constraints of this constraint handler is described in cons_orbitope.h.

The details of the method implemented here are described in the following papers.

Packing and Partitioning Orbitopes
Volker Kaibel and Marc E. Pfetsch,
Math. Program. 114, No. 1, 1-36 (2008)

Among other things, this paper describes so-called shifted column inequalities of the following form \(x(S) \leq x(B)\), where \(S\) is a so-called shifted column and \(B\) is a so-called bar. These inequalities can be used to handle symmetry and they are separated in this constraint handler. We use the linear time separation algorithm of the paper.

Orbitopal Fixing
Volker Kaibel, Matthias Peinhardt, and Marc E. Pfetsch,
Discrete Optimization 8, No. 4, 595-610 (2011) (A preliminary version appears in Proc. IPCO 2007.)

In this paper a linear time propagation algorithm is described, a variant of which is implemented here. The implemented variant does not run in linear time, but is very fast in practice.

translation table
herepaper
nspcons p
nblocks q
vars x
vals A^\star
weights \omega
cases \tau
fixtriangle
resolveprop
firstnonzeros\mu
lastones \alpha
frontiersteps\Gamma

Definition in file cons_orbitope.c.

#include <assert.h>
#include <string.h>
#include <ctype.h>
#include "scip/cons_orbisack.h"
#include "scip/cons_orbitope.h"
#include "scip/cons_setppc.h"

Go to the source code of this file.

Macros

#define CONSHDLR_NAME   "orbitope"
 
#define CONSHDLR_DESC   "symmetry breaking constraint handler relying on (partitioning/packing) orbitopes"
 
#define CONSHDLR_SEPAPRIORITY   +40100
 
#define CONSHDLR_ENFOPRIORITY   -1005200
 
#define CONSHDLR_CHECKPRIORITY   -1005200
 
#define CONSHDLR_SEPAFREQ   5
 
#define CONSHDLR_PROPFREQ   5
 
#define CONSHDLR_EAGERFREQ   -1
 
#define CONSHDLR_MAXPREROUNDS   -1
 
#define CONSHDLR_DELAYSEPA   FALSE
 
#define CONSHDLR_DELAYPROP   FALSE
 
#define CONSHDLR_NEEDSCONS   TRUE
 
#define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_BEFORELP
 
#define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_MEDIUM
 
#define DEFAULT_PPORBITOPE   TRUE
 
#define DEFAULT_SEPAFULLORBITOPE   FALSE
 
#define DEFAULT_CHECKALWAYSFEAS   TRUE
 

Functions

static SCIP_RETCODE consdataFree (SCIP *scip, SCIP_CONSDATA **consdata)
 
static SCIP_RETCODE consdataCreate (SCIP *scip, SCIP_CONSDATA **consdata, SCIP_VAR ***vars, int nspcons, int nblocks, SCIP_ORBITOPETYPE orbitopetype, SCIP_Bool resolveprop)
 
static SCIP_RETCODE strenghtenOrbitopeConstraint (SCIP *scip, SCIP_VAR ***vars, int *nrows, int ncols, SCIP_ORBITOPETYPE *type)
 
static void copyValues (SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol)
 
static void computeSCTable (SCIP *scip, int nspcons, int nblocks, SCIP_Real **weights, int **cases, SCIP_Real **vals)
 
static SCIP_RETCODE fixTriangle (SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible, int *nfixedvars)
 
static SCIP_RETCODE separateSCIs (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_CONSDATA *consdata, SCIP_Bool *infeasible, int *nfixedvars, int *ncuts)
 
static SCIP_RETCODE propagatePackingPartitioningCons (SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible, int *nfixedvars)
 
static SCIP_RETCODE propagateFullOrbitope (SCIP *scip, SCIP_CONS *cons, SCIP_VAR ***vars, int firstcol, int lastcol, int currow, int nrows, int ncols, int *nfixedvars, SCIP_Bool *infeasible)
 
static SCIP_RETCODE propagateFullOrbitopeCons (SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible, int *nfixedvars)
 
static SCIP_RETCODE propagateCons (SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible, int *nfixedvars)
 
static SCIP_RETCODE resolvePropagation (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, int inferinfo, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_RESULT *result)
 
static SCIP_RETCODE resolvePropagationFullOrbitopes (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, int inferinfo, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_RESULT *result)
 
static SCIP_RETCODE enfopsPackingPartitioningOrbitopeSolution (SCIP *scip, SCIP_CONS *cons, SCIP_RESULT *result)
 
static SCIP_RETCODE checkPackingPartitioningOrbitopeSolution (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_RESULT *result, SCIP_Bool printreason)
 
static SCIP_RETCODE checkFullOrbitopeSolution (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_Bool *feasible)
 
static SCIP_RETCODE separateConstraints (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_RESULT *result)
 
static SCIP_DECL_CONSHDLRCOPY (conshdlrCopyOrbitope)
 
static SCIP_DECL_CONSFREE (consFreeOrbitope)
 
static SCIP_DECL_CONSDELETE (consDeleteOrbitope)
 
static SCIP_DECL_CONSTRANS (consTransOrbitope)
 
static SCIP_DECL_CONSSEPALP (consSepalpOrbitope)
 
static SCIP_DECL_CONSSEPASOL (consSepasolOrbitope)
 
static SCIP_DECL_CONSENFOLP (consEnfolpOrbitope)
 
static SCIP_DECL_CONSENFORELAX (consEnforelaxOrbitope)
 
static SCIP_DECL_CONSENFOPS (consEnfopsOrbitope)
 
static SCIP_DECL_CONSCHECK (consCheckOrbitope)
 
static SCIP_DECL_CONSPROP (consPropOrbitope)
 
static SCIP_DECL_CONSPRESOL (consPresolOrbitope)
 
static SCIP_DECL_CONSRESPROP (consRespropOrbitope)
 
static SCIP_DECL_CONSLOCK (consLockOrbitope)
 
static SCIP_DECL_CONSPRINT (consPrintOrbitope)
 
static SCIP_DECL_CONSCOPY (consCopyOrbitope)
 
static SCIP_DECL_CONSPARSE (consParseOrbitope)
 
static SCIP_DECL_CONSGETVARS (consGetVarsOrbitope)
 
static SCIP_DECL_CONSGETNVARS (consGetNVarsOrbitope)
 
SCIP_RETCODE SCIPincludeConshdlrOrbitope (SCIP *scip)
 
SCIP_RETCODE SCIPcreateConsOrbitope (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR ***vars, SCIP_ORBITOPETYPE orbitopetype, int nspcons, int nblocks, SCIP_Bool resolveprop, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
 
SCIP_RETCODE SCIPcreateConsBasicOrbitope (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR ***vars, SCIP_ORBITOPETYPE orbitopetype, int nspcons, int nblocks, SCIP_Bool resolveprop)
 

Macro Definition Documentation

◆ CONSHDLR_NAME

◆ CONSHDLR_DESC

#define CONSHDLR_DESC   "symmetry breaking constraint handler relying on (partitioning/packing) orbitopes"

Definition at line 73 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_SEPAPRIORITY

#define CONSHDLR_SEPAPRIORITY   +40100

priority of the constraint handler for separation

Definition at line 74 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_ENFOPRIORITY

#define CONSHDLR_ENFOPRIORITY   -1005200

priority of the constraint handler for constraint enforcing

Definition at line 75 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_CHECKPRIORITY

#define CONSHDLR_CHECKPRIORITY   -1005200

priority of the constraint handler for checking feasibility

Definition at line 76 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_SEPAFREQ

#define CONSHDLR_SEPAFREQ   5

frequency for separating cuts; zero means to separate only in the root node

Definition at line 77 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_PROPFREQ

#define CONSHDLR_PROPFREQ   5

frequency for propagating domains; zero means only preprocessing propagation

Definition at line 78 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_EAGERFREQ

#define CONSHDLR_EAGERFREQ   -1

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 79 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_MAXPREROUNDS

#define CONSHDLR_MAXPREROUNDS   -1

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

Definition at line 82 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_DELAYSEPA

#define CONSHDLR_DELAYSEPA   FALSE

should separation method be delayed, if other separators found cuts?

Definition at line 83 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_DELAYPROP

#define CONSHDLR_DELAYPROP   FALSE

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

Definition at line 84 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_NEEDSCONS

#define CONSHDLR_NEEDSCONS   TRUE

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

Definition at line 85 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_PROP_TIMING

#define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_BEFORELP

propagation timing mask of the constraint handler

Definition at line 87 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ CONSHDLR_PRESOLTIMING

#define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_MEDIUM

presolving timing of the constraint handler (fast, medium, or exhaustive)

Definition at line 88 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ DEFAULT_PPORBITOPE

#define DEFAULT_PPORBITOPE   TRUE

whether we check if full orbitopes can be strengthened to packing/partitioning orbitopes

Definition at line 90 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ DEFAULT_SEPAFULLORBITOPE

#define DEFAULT_SEPAFULLORBITOPE   FALSE

whether we separate inequalities for full orbitopes

Definition at line 91 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

◆ DEFAULT_CHECKALWAYSFEAS

#define DEFAULT_CHECKALWAYSFEAS   TRUE

whether check routine returns always SCIP_FEASIBLE

Definition at line 92 of file cons_orbitope.c.

Referenced by SCIPincludeConshdlrOrbitope().

Function Documentation

◆ consdataFree()

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

frees an orbitope constraint data

Parameters
scipSCIP data structure
consdatapointer to orbitope constraint data

Definition at line 130 of file cons_orbitope.c.

References consdataCreate(), SCIP_OKAY, SCIPfreeBlockMemory, and SCIPfreeBlockMemoryArrayNull.

Referenced by SCIP_DECL_CONSDELETE().

◆ consdataCreate()

static SCIP_RETCODE consdataCreate ( SCIP scip,
SCIP_CONSDATA **  consdata,
SCIP_VAR ***  vars,
int  nspcons,
int  nblocks,
SCIP_ORBITOPETYPE  orbitopetype,
SCIP_Bool  resolveprop 
)
static

creates orbitope constraint data

Parameters
scipSCIP data structure
consdatapointer to store constraint data
varsvariables array, must have size nspcons x nblocks
nspconsnumber of set partitioning (packing) constraints <=> p
nblocksnumber of symmetric variable blocks <=> q
orbitopetypetype of orbitope constraint
resolvepropshould propagation be resolved?

Definition at line 168 of file cons_orbitope.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPallocBlockMemoryArray, SCIPduplicateBlockMemoryArray, SCIPgetTransformedVar(), SCIPisTransformed(), SCIPmarkDoNotMultaggrVar(), and strenghtenOrbitopeConstraint().

Referenced by consdataFree(), SCIP_DECL_CONSTRANS(), and SCIPcreateConsOrbitope().

◆ strenghtenOrbitopeConstraint()

static SCIP_RETCODE strenghtenOrbitopeConstraint ( SCIP scip,
SCIP_VAR ***  vars,
int *  nrows,
int  ncols,
SCIP_ORBITOPETYPE type 
)
static

strenghten full orbitopes to packing/partitioning orbitopes if possible

Parameters
scipSCIP data structure
varsvariable matrix of orbitope constraint
nrowspointer to number of rows of variable matrix
ncolsnumber of columns of variable matrix
typepointer to store type of orbitope constraint after strengthening

Definition at line 231 of file cons_orbitope.c.

References copyValues(), FALSE, REALABS, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_ORBITOPETYPE_FULL, SCIP_ORBITOPETYPE_PACKING, SCIP_ORBITOPETYPE_PARTITIONING, SCIP_SETPPCTYPE_COVERING, SCIP_SETPPCTYPE_PACKING, SCIP_SETPPCTYPE_PARTITIONING, SCIPABORT, SCIPallocBufferArray, SCIPallocClearBufferArray, SCIPconshdlrGetConss(), SCIPconshdlrGetNConss(), SCIPerrorMessage, SCIPfindConshdlr(), SCIPfreeBufferArray, SCIPgetNVars(), SCIPgetNVarsSetppc(), SCIPgetTypeSetppc(), SCIPgetVarsSetppc(), SCIPinfoMessage(), SCIPvarGetLbLocal(), SCIPvarGetProbindex(), SCIPvarGetUbLocal(), SCIPvarIsNegated(), and TRUE.

Referenced by consdataCreate(), and SCIPcreateConsOrbitope().

◆ copyValues()

static void copyValues ( SCIP scip,
SCIP_CONSDATA consdata,
SCIP_SOL sol 
)
static

copies the variables values from the solution to the constraint data structure

Parameters
scipthe SCIP data structure
consdatathe constraint data
sola primal solution or NULL for the current LP optimum

Definition at line 599 of file cons_orbitope.c.

References computeSCTable(), and SCIPgetSolVal().

Referenced by checkPackingPartitioningOrbitopeSolution(), enfopsPackingPartitioningOrbitopeSolution(), separateConstraints(), and strenghtenOrbitopeConstraint().

◆ computeSCTable()

static void computeSCTable ( SCIP scip,
int  nspcons,
int  nblocks,
SCIP_Real **  weights,
int **  cases,
SCIP_Real **  vals 
)
static

compute the dynamic programming table for SC

Build up dynamic programming table in order to find SCs with minimum weight.

The values of the minimal SCIs are stored in weights. The array cases[i][j] stores which of the cases were applied to get weights[i][j]. Here, 3 means that we have reached the upper limit.

We assume that the upper right triangle is fixed to 0. Hence we can perform the computation a bit more efficient.

Parameters
scipSCIP pointer
nspconsnumber of set partitioning (packing) constraints <=> p
nblocksnumber of symmetric variable blocks <=> q
weightsSC weight table
casesindicator of the SC cases
valscurrent solution

Definition at line 635 of file cons_orbitope.c.

References fixTriangle(), SCIP_Real, and SCIPisLT().

Referenced by checkPackingPartitioningOrbitopeSolution(), copyValues(), enfopsPackingPartitioningOrbitopeSolution(), resolvePropagation(), and separateSCIs().

◆ fixTriangle()

static SCIP_RETCODE fixTriangle ( SCIP scip,
SCIP_CONS cons,
SCIP_Bool infeasible,
int *  nfixedvars 
)
static

fix upper right triangle if necessary

Parameters
scipSCIP data structure
consconstraint to be processed
infeasiblepointer to store TRUE, if the node can be cut off
nfixedvarspointer to add up the number of found domain reductions

Definition at line 730 of file cons_orbitope.c.

References FALSE, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPdebugMsg, SCIPfixVar(), SCIPvarGetUbGlobal(), separateSCIs(), and TRUE.

Referenced by computeSCTable(), enfopsPackingPartitioningOrbitopeSolution(), propagatePackingPartitioningCons(), and separateSCIs().

◆ separateSCIs()

static SCIP_RETCODE separateSCIs ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_CONS cons,
SCIP_CONSDATA consdata,
SCIP_Bool infeasible,
int *  nfixedvars,
int *  ncuts 
)
static

separates shifted column inequalities according to the solution stored in consdata->vals

Parameters
scipthe SCIP data structure
conshdlrconstraint handler
consconstraint
consdatathe constraint data
infeasiblewhether we detected infeasibility
nfixedvarspointer to store the number of variables fixed
ncutspointer to store number of separated SCIs

Definition at line 813 of file cons_orbitope.c.

References computeSCTable(), FALSE, fixTriangle(), propagatePackingPartitioningCons(), SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPaddRow(), SCIPaddVarsToRow(), SCIPcreateEmptyRowCons(), SCIPinfinity(), SCIPisEfficacious(), SCIPisSumEQ(), SCIPreleaseRow(), SCIPsnprintf(), and TRUE.

Referenced by fixTriangle(), and separateConstraints().

◆ propagatePackingPartitioningCons()

static SCIP_RETCODE propagatePackingPartitioningCons ( SCIP scip,
SCIP_CONS cons,
SCIP_Bool infeasible,
int *  nfixedvars 
)
static

propagation method for a single packing or partitioning orbitope constraint

Parameters
scipSCIP data structure
consconstraint to be processed
infeasiblepointer to store TRUE, if the node can be cut off
nfixedvarspointer to add up the number of found domain reductions

Definition at line 973 of file cons_orbitope.c.

References FALSE, fixTriangle(), propagateFullOrbitope(), SCIP_Bool, SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_OKAY, SCIP_ORBITOPETYPE_PACKING, SCIP_ORBITOPETYPE_PARTITIONING, SCIP_STAGE_SOLVING, SCIPaddConflictBinvar(), SCIPallocBufferArray, SCIPallowDualReds(), SCIPanalyzeConflictCons(), SCIPconsGetData(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPgetStage(), SCIPinferBinvarCons(), SCIPinitConflictAnalysis(), SCIPinProbing(), SCIPisConflictAnalysisApplicable(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and TRUE.

Referenced by propagateCons(), and separateSCIs().

◆ propagateFullOrbitope()

static SCIP_RETCODE propagateFullOrbitope ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR ***  vars,
int  firstcol,
int  lastcol,
int  currow,
int  nrows,
int  ncols,
int *  nfixedvars,
SCIP_Bool infeasible 
)
static

propagation of full orbitopes (called recursively)

Parameters
scipthe SCIP data structure
consconstraint to be processed
varsvariable matrix
firstcolfirst column to consider
lastcollast column to consider + 1
currowcurrent row
nrowsnumber of rows
ncolsnumber of columns
nfixedvarspointer to store the number of variables fixed during propagation
infeasiblepointer to store whether infeasibility was detected

Definition at line 1329 of file cons_orbitope.c.

References FALSE, propagateFullOrbitopeCons(), SCIP_Bool, SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_OKAY, SCIPaddConflictBinvar(), SCIPanalyzeConflictCons(), SCIPinferBinvarCons(), SCIPinitConflictAnalysis(), SCIPisConflictAnalysisApplicable(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and TRUE.

Referenced by propagateFullOrbitopeCons(), and propagatePackingPartitioningCons().

◆ propagateFullOrbitopeCons()

static SCIP_RETCODE propagateFullOrbitopeCons ( SCIP scip,
SCIP_CONS cons,
SCIP_Bool infeasible,
int *  nfixedvars 
)
static

propagation method for a single packing or partitioning orbitope constraint

Parameters
scipSCIP data structure
consconstraint to be processed
infeasiblepointer to store TRUE, if the node can be cut off
nfixedvarspointer to add up the number of found domain reductions

Definition at line 1475 of file cons_orbitope.c.

References FALSE, propagateCons(), propagateFullOrbitope(), SCIP_CALL, SCIP_OKAY, SCIP_ORBITOPETYPE_FULL, SCIPallowDualReds(), and SCIPconsGetData().

Referenced by propagateCons(), and propagateFullOrbitope().

◆ propagateCons()

static SCIP_RETCODE propagateCons ( SCIP scip,
SCIP_CONS cons,
SCIP_Bool infeasible,
int *  nfixedvars 
)
static

propagation method for a single orbitope constraint

Parameters
scipSCIP data structure
consconstraint to be processed
infeasiblepointer to store TRUE, if the node can be cut off
nfixedvarspointer to add up the number of found domain reductions

Definition at line 1511 of file cons_orbitope.c.

References propagateFullOrbitopeCons(), propagatePackingPartitioningCons(), resolvePropagation(), SCIP_CALL, SCIP_OKAY, SCIP_ORBITOPETYPE_FULL, SCIP_ORBITOPETYPE_PACKING, SCIP_ORBITOPETYPE_PARTITIONING, and SCIPconsGetData().

Referenced by propagateFullOrbitopeCons(), SCIP_DECL_CONSPRESOL(), and SCIP_DECL_CONSPROP().

◆ resolvePropagation()

static SCIP_RETCODE resolvePropagation ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR infervar,
int  inferinfo,
SCIP_BOUNDTYPE  boundtype,
SCIP_BDCHGIDX bdchgidx,
SCIP_RESULT result 
)
static

Propagation conflict resolving method of propagator

In this function we use that the propagation method above implicitly propagates SCIs, i.e., every fixing can also be gotten via an SCI-fixing.

Since the storage of an integer is not enough to store the complete information about the fixing nor a complete shifted column, we have to use the linear time algorithm for SCIs.

The inferinfo integer is set as follows:

  • If a shifted column is fixed to 0 and the corresponding bar does not necessarily has value 1 then we fix these entries to 0 and inferinfo is i * nblocks + j, where (i,j) is the leader of the bar. The SCI depends on whether i is in Gamma or not (see Lemma 1 in the paper and the comments above).
  • If a bar has value 1 and the shifted column has one entry that is not fixed, it can be fixed to 1 and inferinfo is (nspcons*nblocks) + i * nblocks + j, where (i,j) is the leader of the bar; see Proposition 1 (2c).
Parameters
scipSCIP data structure
consconstraint that inferred the bound change
infervarvariable that was deduced
inferinfoinference information
boundtypethe type of the changed bound (lower or upper bound)
bdchgidxbound change index (time stamp of bound change), or NULL for current time
resultpointer to store the result of the propagation conflict resolving call

Definition at line 1565 of file cons_orbitope.c.

References computeSCTable(), FALSE, resolvePropagationFullOrbitopes(), SCIP_CALL, SCIP_DIDNOTFIND, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_ORBITOPETYPE_PARTITIONING, SCIP_Real, SCIP_SUCCESS, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPconsGetData(), SCIPdebugMsg, SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), and SCIPsnprintf().

Referenced by propagateCons(), and SCIP_DECL_CONSRESPROP().

◆ resolvePropagationFullOrbitopes()

static SCIP_RETCODE resolvePropagationFullOrbitopes ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR infervar,
int  inferinfo,
SCIP_BOUNDTYPE  boundtype,
SCIP_BDCHGIDX bdchgidx,
SCIP_RESULT result 
)
static

Propagation conflict resolving method of propagator for full orbitope constraints

Parameters
scipSCIP data structure
consconstraint that inferred the bound change
infervarvariable that was deduced
inferinfoinference information
boundtypethe type of the changed bound (lower or upper bound)
bdchgidxbound change index (time stamp of bound change), or NULL for current time
resultpointer to store the result of the propagation conflict resolving call

Definition at line 1842 of file cons_orbitope.c.

References enfopsPackingPartitioningOrbitopeSolution(), FALSE, SCIP_CALL, SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_SUCCESS, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPconsGetData(), SCIPdebugMsg, SCIPvarGetIndex(), SCIPvarGetLbAtIndex(), SCIPvarGetUbAtIndex(), and TRUE.

Referenced by resolvePropagation(), and SCIP_DECL_CONSRESPROP().

◆ enfopsPackingPartitioningOrbitopeSolution()

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

check packing/partitioning orbitope solution for feasibility

Parameters
scipSCIP data structure
conspointer to orbitope constraint
resultpointer to store the result of the enforcing call

Definition at line 1936 of file cons_orbitope.c.

References checkPackingPartitioningOrbitopeSolution(), computeSCTable(), copyValues(), FALSE, fixTriangle(), SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_INFEASIBLE, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIPconsGetData(), SCIPconsGetName(), SCIPdebugMsg, SCIPisGT(), and SCIPisIntegral().

Referenced by resolvePropagationFullOrbitopes(), and SCIP_DECL_CONSENFOPS().

◆ checkPackingPartitioningOrbitopeSolution()

static SCIP_RETCODE checkPackingPartitioningOrbitopeSolution ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_RESULT result,
SCIP_Bool  printreason 
)
static

check packing/partitioning orbitope solution for feasibility

Parameters
scipSCIP data structure
conspointer to orbitope constraint
solsolution to be checked
resultpointer to store the result of the enforcing call
printreasonwhether reason for infeasibility should be printed

Definition at line 2030 of file cons_orbitope.c.

References checkFullOrbitopeSolution(), computeSCTable(), copyValues(), SCIP_INFEASIBLE, SCIP_OKAY, SCIP_Real, SCIPconsGetData(), SCIPconsGetName(), SCIPdebugMsg, SCIPinfoMessage(), SCIPisFeasIntegral(), SCIPisFeasZero(), SCIPisGT(), and SCIPvarGetName().

Referenced by enfopsPackingPartitioningOrbitopeSolution(), and SCIP_DECL_CONSCHECK().

◆ checkFullOrbitopeSolution()

static SCIP_RETCODE checkFullOrbitopeSolution ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_Bool  printreason,
SCIP_Bool feasible 
)
static

check full orbitope solution for feasibility

Parameters
scipSCIP data structure
consconstraint to process
solsolution to be checked
printreasonwhether reason for infeasibility should be printed
feasiblememory address to store whether solution is feasible

Definition at line 2176 of file cons_orbitope.c.

References SCIP_CALL, SCIP_OKAY, SCIPallocBufferArray, SCIPcheckSolutionOrbisack(), SCIPconsGetData(), SCIPfreeBufferArray, separateConstraints(), and TRUE.

Referenced by checkPackingPartitioningOrbitopeSolution(), SCIP_DECL_CONSCHECK(), and SCIP_DECL_CONSENFOPS().

◆ separateConstraints()

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

separate or enforce constraints

Parameters
scipSCIP data structure
conshdlrconstraint handler
conssconstraints to process
nconssnumber of constraints
nusefulconssnumber of useful (non-obsolete) constraints to process
solsolution to separate (NULL for the LP solution)
resultpointer to store the result (should be initialized)

Definition at line 2234 of file cons_orbitope.c.

References CONSHDLR_NAME, copyValues(), FALSE, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSHDLRCOPY(), SCIP_OKAY, SCIP_ORBITOPETYPE_PACKING, SCIP_ORBITOPETYPE_PARTITIONING, SCIP_REDUCEDDOM, SCIP_SEPARATED, SCIPallocBufferArray, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPseparateCoversOrbisack(), and separateSCIs().

Referenced by checkFullOrbitopeSolution(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFORELAX(), SCIP_DECL_CONSSEPALP(), and SCIP_DECL_CONSSEPASOL().

◆ SCIP_DECL_CONSHDLRCOPY()

static SCIP_DECL_CONSHDLRCOPY ( conshdlrCopyOrbitope  )
static

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

Definition at line 2349 of file cons_orbitope.c.

References CONSHDLR_NAME, SCIP_CALL, SCIP_DECL_CONSFREE(), SCIP_OKAY, SCIPconshdlrGetName(), SCIPincludeConshdlrOrbitope(), and TRUE.

Referenced by separateConstraints().

◆ SCIP_DECL_CONSFREE()

static SCIP_DECL_CONSFREE ( consFreeOrbitope  )
static

frees constraint handler

Definition at line 2365 of file cons_orbitope.c.

References CONSHDLR_NAME, SCIP_DECL_CONSDELETE(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), and SCIPfreeBlockMemory.

Referenced by SCIP_DECL_CONSHDLRCOPY().

◆ SCIP_DECL_CONSDELETE()

static SCIP_DECL_CONSDELETE ( consDeleteOrbitope  )
static

frees specific constraint data

Definition at line 2383 of file cons_orbitope.c.

References consdataFree(), CONSHDLR_NAME, SCIP_CALL, SCIP_DECL_CONSTRANS(), SCIP_OKAY, and SCIPconshdlrGetName().

Referenced by SCIP_DECL_CONSFREE().

◆ SCIP_DECL_CONSTRANS()

◆ SCIP_DECL_CONSSEPALP()

static SCIP_DECL_CONSSEPALP ( consSepalpOrbitope  )
static

separation method of constraint handler for LP solutions

Definition at line 2425 of file cons_orbitope.c.

References SCIP_CALL, SCIP_DECL_CONSSEPASOL(), SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetNLPBranchCands(), and separateConstraints().

Referenced by SCIP_DECL_CONSTRANS().

◆ SCIP_DECL_CONSSEPASOL()

static SCIP_DECL_CONSSEPASOL ( consSepasolOrbitope  )
static

separation method of constraint handler for arbitrary primal solutions

Definition at line 2448 of file cons_orbitope.c.

References SCIP_CALL, SCIP_DECL_CONSENFOLP(), SCIP_DIDNOTFIND, SCIP_OKAY, SCIPconshdlrGetName(), SCIPdebugMsg, and separateConstraints().

Referenced by SCIP_DECL_CONSSEPALP().

◆ SCIP_DECL_CONSENFOLP()

static SCIP_DECL_CONSENFOLP ( consEnfolpOrbitope  )
static

constraint enforcing method of constraint handler for LP solutions

Definition at line 2466 of file cons_orbitope.c.

References SCIP_CALL, SCIP_DECL_CONSENFORELAX(), SCIP_FEASIBLE, SCIP_OKAY, SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetNLPBranchCands(), and separateConstraints().

Referenced by SCIP_DECL_CONSSEPASOL().

◆ SCIP_DECL_CONSENFORELAX()

static SCIP_DECL_CONSENFORELAX ( consEnforelaxOrbitope  )
static

constraint enforcing method of constraint handler for relaxation solutions

Definition at line 2487 of file cons_orbitope.c.

References SCIP_CALL, SCIP_DECL_CONSENFOPS(), SCIP_FEASIBLE, SCIP_OKAY, SCIPconshdlrGetName(), SCIPdebugMsg, and separateConstraints().

Referenced by SCIP_DECL_CONSENFOLP().

◆ SCIP_DECL_CONSENFOPS()

static SCIP_DECL_CONSENFOPS ( consEnfopsOrbitope  )
static

◆ SCIP_DECL_CONSCHECK()

static SCIP_DECL_CONSCHECK ( consCheckOrbitope  )
static

◆ SCIP_DECL_CONSPROP()

static SCIP_DECL_CONSPROP ( consPropOrbitope  )
static

◆ SCIP_DECL_CONSPRESOL()

static SCIP_DECL_CONSPRESOL ( consPresolOrbitope  )
static

◆ SCIP_DECL_CONSRESPROP()

static SCIP_DECL_CONSRESPROP ( consRespropOrbitope  )
static

propagation conflict resolving method of constraint handler

Definition at line 2702 of file cons_orbitope.c.

References resolvePropagation(), resolvePropagationFullOrbitopes(), SCIP_CALL, SCIP_DECL_CONSLOCK(), SCIP_OKAY, SCIP_ORBITOPETYPE_PACKING, SCIP_ORBITOPETYPE_PARTITIONING, and SCIPconsGetData().

Referenced by SCIP_DECL_CONSPRESOL().

◆ SCIP_DECL_CONSLOCK()

static SCIP_DECL_CONSLOCK ( consLockOrbitope  )
static

variable rounding lock method of constraint handler

Definition at line 2734 of file cons_orbitope.c.

References CONSHDLR_NAME, SCIP_CALL, SCIP_DECL_CONSPRINT(), SCIP_OKAY, SCIPaddVarLocks(), SCIPconsGetData(), SCIPconshdlrGetName(), and SCIPdebugMsg.

Referenced by SCIP_DECL_CONSRESPROP().

◆ SCIP_DECL_CONSPRINT()

static SCIP_DECL_CONSPRINT ( consPrintOrbitope  )
static

◆ SCIP_DECL_CONSCOPY()

static SCIP_DECL_CONSCOPY ( consCopyOrbitope  )
static

◆ SCIP_DECL_CONSPARSE()

◆ SCIP_DECL_CONSGETVARS()

static SCIP_DECL_CONSGETVARS ( consGetVarsOrbitope  )
static

constraint method of constraint handler which returns the variables (if possible)

Definition at line 3033 of file cons_orbitope.c.

References FALSE, SCIP_DECL_CONSGETNVARS(), SCIP_OKAY, SCIPconsGetData(), and TRUE.

Referenced by SCIP_DECL_CONSPARSE().

◆ SCIP_DECL_CONSGETNVARS()

static SCIP_DECL_CONSGETNVARS ( consGetNVarsOrbitope  )
static

constraint method of constraint handler which returns the number of variables (if possible)

Definition at line 3066 of file cons_orbitope.c.

References SCIP_OKAY, SCIPconsGetData(), SCIPincludeConshdlrOrbitope(), and TRUE.

Referenced by SCIP_DECL_CONSGETVARS().