Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

common methods used to manipulate, generate, and strengthen cuts and to organize the cutpool

Functions

SCIP_Bool SCIPcutsTightenCoefficients (SCIP *scip, SCIP_Bool cutislocal, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, int *nchgcoefs)
 
SCIP_RETCODE SCIPaggrRowCreate (SCIP *scip, SCIP_AGGRROW **aggrrow)
 
void SCIPaggrRowFree (SCIP *scip, SCIP_AGGRROW **aggrrow)
 
void SCIPaggrRowPrint (SCIP *scip, SCIP_AGGRROW *aggrrow, FILE *file)
 
SCIP_RETCODE SCIPaggrRowCopy (SCIP *scip, SCIP_AGGRROW **aggrrow, SCIP_AGGRROW *source)
 
SCIP_RETCODE SCIPaggrRowAddRow (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_ROW *row, SCIP_Real weight, int sidetype)
 
SCIP_RETCODE SCIPaggrRowAddRowSafely (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_ROW *row, SCIP_Real weight, int sidetype, SCIP_Bool *success)
 
void SCIPaggrRowCancelVarWithBound (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_VAR *var, int pos, SCIP_Bool *valid)
 
SCIP_RETCODE SCIPaggrRowAddObjectiveFunction (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_Real rhs, SCIP_Real scale)
 
SCIP_RETCODE SCIPaggrRowAddObjectiveFunctionSafely (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_Real rhs, SCIP_Real scale)
 
SCIP_RETCODE SCIPaggrRowAddCustomCons (SCIP *scip, SCIP_AGGRROW *aggrrow, int *inds, SCIP_Real *vals, int len, SCIP_Real rhs, SCIP_Real weight, int rank, SCIP_Bool local)
 
SCIP_Real SCIPaggrRowCalcEfficacyNorm (SCIP *scip, SCIP_AGGRROW *aggrrow)
 
void SCIPaggrRowClear (SCIP_AGGRROW *aggrrow)
 
void SCIPaggrRowClearSafely (SCIP_AGGRROW *aggrrow)
 
SCIP_RETCODE SCIPaggrRowSumRows (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_Real *weights, int *rowinds, int nrowinds, SCIP_Bool sidetypebasis, SCIP_Bool allowlocal, int negslack, int maxaggrlen, SCIP_Bool *valid)
 
void SCIPaggrRowRemoveZeros (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_Bool useglbbounds, SCIP_Bool *valid)
 
int * SCIPaggrRowGetRowInds (SCIP_AGGRROW *aggrrow)
 
SCIP_RealSCIPaggrRowGetRowWeights (SCIP_AGGRROW *aggrrow)
 
SCIP_Bool SCIPaggrRowHasRowBeenAdded (SCIP_AGGRROW *aggrrow, SCIP_ROW *row)
 
void SCIPaggrRowGetAbsWeightRange (SCIP_AGGRROW *aggrrow, SCIP_Real *minabsrowweight, SCIP_Real *maxabsrowweight)
 
int * SCIPaggrRowGetInds (SCIP_AGGRROW *aggrrow)
 
int SCIPaggrRowGetNNz (SCIP_AGGRROW *aggrrow)
 
static INLINE SCIP_Real SCIPaggrRowGetValue (SCIP_AGGRROW *aggrrow, int i)
 
static INLINE SCIP_Real SCIPaggrRowGetValueSafely (SCIP_AGGRROW *aggrrow, int i)
 
static INLINE SCIP_Real SCIPaggrRowGetProbvarValue (SCIP_AGGRROW *aggrrow, int probindex)
 
int SCIPaggrRowGetRank (SCIP_AGGRROW *aggrrow)
 
SCIP_Bool SCIPaggrRowIsLocal (SCIP_AGGRROW *aggrrow)
 
SCIP_Real SCIPaggrRowGetRhs (SCIP_AGGRROW *aggrrow)
 
int SCIPaggrRowGetNRows (SCIP_AGGRROW *aggrrow)
 
SCIP_RETCODE SCIPcalcMIR (SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, int vartypeusevbds, SCIP_Bool allowlocal, SCIP_Bool fixintegralrhs, int *boundsfortrans, SCIP_BOUNDTYPE *boundtypesfortrans, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real scale, SCIP_AGGRROW *aggrrow, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, SCIP_Real *cutefficacy, int *cutrank, SCIP_Bool *cutislocal, SCIP_Bool *success)
 
SCIP_RETCODE SCIPcutGenerationHeuristicCMIR (SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, int vartypeusevbds, SCIP_Bool allowlocal, int maxtestdelta, int *boundsfortrans, SCIP_BOUNDTYPE *boundtypesfortrans, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_AGGRROW *aggrrow, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, SCIP_Real *cutefficacy, int *cutrank, SCIP_Bool *cutislocal, SCIP_Bool *success)
 
SCIP_RETCODE SCIPcalcFlowCover (SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, SCIP_Bool allowlocal, SCIP_AGGRROW *aggrrow, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, SCIP_Real *cutefficacy, int *cutrank, SCIP_Bool *cutislocal, SCIP_Bool *success)
 
SCIP_RETCODE SCIPcalcKnapsackCover (SCIP *scip, SCIP_SOL *sol, SCIP_Bool allowlocal, SCIP_AGGRROW *aggrrow, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, SCIP_Real *cutefficacy, int *cutrank, SCIP_Bool *cutislocal, SCIP_Bool *success)
 
SCIP_RETCODE SCIPcalcStrongCG (SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, int vartypeusevbds, SCIP_Bool allowlocal, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real scale, SCIP_AGGRROW *aggrrow, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, SCIP_Real *cutefficacy, int *cutrank, SCIP_Bool *cutislocal, SCIP_Bool *success)
 
SCIP_ROWSCIPcutGetRow (SCIP_CUT *cut)
 
int SCIPcutGetAge (SCIP_CUT *cut)
 
SCIP_Real SCIPcutGetLPActivityQuot (SCIP_CUT *cut)
 
SCIP_CUT ** SCIPcutpoolGetCuts (SCIP_CUTPOOL *cutpool)
 
int SCIPcutpoolGetNCuts (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetMaxNCuts (SCIP_CUTPOOL *cutpool)
 
SCIP_Real SCIPcutpoolGetTime (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNCalls (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNRootCalls (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNCutsFound (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNCutsAdded (SCIP_CUTPOOL *cutpool)
 
SCIP_Real SCIPgetCutLPSolCutoffDistance (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
 
SCIP_Real SCIPgetCutEfficacy (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
 
SCIP_Bool SCIPisCutEfficacious (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
 
SCIP_Bool SCIPisEfficacious (SCIP *scip, SCIP_Real efficacy)
 
SCIP_Real SCIPgetVectorEfficacyNorm (SCIP *scip, SCIP_Real *vals, int nvals)
 
SCIP_Bool SCIPisCutApplicable (SCIP *scip, SCIP_ROW *cut)
 
SCIP_RETCODE SCIPaddRow (SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
 
SCIP_Bool SCIPisCutNew (SCIP *scip, SCIP_ROW *row)
 
SCIP_RETCODE SCIPaddPoolCut (SCIP *scip, SCIP_ROW *row)
 
SCIP_RETCODE SCIPdelPoolCut (SCIP *scip, SCIP_ROW *row)
 
SCIP_CUT ** SCIPgetPoolCuts (SCIP *scip)
 
int SCIPgetNPoolCuts (SCIP *scip)
 
SCIP_CUTPOOLSCIPgetGlobalCutpool (SCIP *scip)
 
SCIP_RETCODE SCIPcreateCutpool (SCIP *scip, SCIP_CUTPOOL **cutpool, int agelimit)
 
SCIP_RETCODE SCIPfreeCutpool (SCIP *scip, SCIP_CUTPOOL **cutpool)
 
SCIP_RETCODE SCIPaddRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row)
 
SCIP_RETCODE SCIPaddNewRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row)
 
SCIP_RETCODE SCIPdelRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row)
 
SCIP_RETCODE SCIPseparateCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_RESULT *result)
 
SCIP_RETCODE SCIPseparateSolCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_SOL *sol, SCIP_Bool pretendroot, SCIP_RESULT *result)
 
SCIP_RETCODE SCIPaddDelayedPoolCut (SCIP *scip, SCIP_ROW *row)
 
SCIP_RETCODE SCIPdelDelayedPoolCut (SCIP *scip, SCIP_ROW *row)
 
SCIP_CUT ** SCIPgetDelayedPoolCuts (SCIP *scip)
 
int SCIPgetNDelayedPoolCuts (SCIP *scip)
 
SCIP_CUTPOOLSCIPgetDelayedGlobalCutpool (SCIP *scip)
 
SCIP_RETCODE SCIPseparateSol (SCIP *scip, SCIP_SOL *sol, SCIP_Bool pretendroot, SCIP_Bool allowlocal, SCIP_Bool onlydelayed, SCIP_Bool *delayed, SCIP_Bool *cutoff)
 
SCIP_ROW ** SCIPgetCuts (SCIP *scip)
 
int SCIPgetNCuts (SCIP *scip)
 
SCIP_RETCODE SCIPclearCuts (SCIP *scip)
 
SCIP_RETCODE SCIPremoveInefficaciousCuts (SCIP *scip)
 

Function Documentation

◆ SCIPcutsTightenCoefficients()

SCIP_Bool SCIPcutsTightenCoefficients ( SCIP scip,
SCIP_Bool  cutislocal,
SCIP_Real cutcoefs,
SCIP_Real cutrhs,
int *  cutinds,
int *  cutnnz,
int *  nchgcoefs 
)

perform activity based coefficient tigthening on the given cut; returns TRUE if the cut was detected to be redundant due to acitivity bounds

See also cons_linear.c:consdataTightenCoefs().

perform activity based coefficient tightening on the given cut; returns TRUE if the cut was detected to be redundant due to activity bounds

See also cons_linear.c:consdataTightenCoefs().

Parameters
scipSCIP data structure
cutislocalis the cut local?
cutcoefsarray of the non-zero coefficients in the cut
cutrhsthe right hand side of the cut
cutindsarray of the problem indices of variables with a non-zero coefficient in the cut
cutnnzthe number of non-zeros in the cut
nchgcoefsnumber of changed coefficients

Definition at line 2466 of file cuts.c.

References FALSE, MAX, NULL, QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_Bool, SCIP_CALL_ABORT, SCIP_Real, SCIPallocBufferArray, SCIPceil(), SCIPdebugMsg, SCIPfloor(), SCIPfreeBufferArray, SCIPfreeBufferArrayNull, SCIPgetNContVars(), SCIPgetNVars(), SCIPgetVars(), SCIPisFeasLE(), SCIPisGT(), SCIPisInfinity(), SCIPisLE(), SCIPisNegative(), SCIPisPositive(), SCIPquadprecProdDD, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPsortDownRealRealInt(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), and TRUE.

Referenced by computeMIRForOptimalityCut(), generateZerohalfCut(), tightenCoefficients(), and transformNonIntegralRow().

◆ SCIPaggrRowCreate()

SCIP_RETCODE SCIPaggrRowCreate ( SCIP scip,
SCIP_AGGRROW **  aggrrow 
)

create an empty aggregation row

Note
By default, this data structure uses quad precision via double-double arithmetic, i.e., it allocates a SCIP_Real array of length two times SCIPgetNVars() for storing the coefficients. In exact solving mode, we cannot use quad precision because we need to control the ronding mode, hence only the first SCIPgetNVars() entries are used.
Parameters
scipSCIP data structure
aggrrowpointer to return aggregation row

Definition at line 2668 of file cuts.c.

References BMSclearMemoryArray, FALSE, NULL, QUAD_ARRAY_SIZE, QUAD_ASSIGN, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPallocBlockMemoryArray, and SCIPgetNVars().

Referenced by computeMIRForOptimalityCut(), conflictAnalyzeLP(), createCGCuts(), doSeparation(), generateClusterCuts(), generateGMICuts(), MirReduction(), SCIP_DECL_SEPAEXECLP(), SCIPaggrRowSumRows(), SCIPrunBoundHeuristic(), and setupAggregationData().

◆ SCIPaggrRowFree()

void SCIPaggrRowFree ( SCIP scip,
SCIP_AGGRROW **  aggrrow 
)

free a the aggregation row

free a aggregation row

Parameters
scipSCIP data structure
aggrrowpointer to aggregation row that should be freed

Definition at line 2700 of file cuts.c.

References NULL, QUAD_ARRAY_SIZE, SCIPfreeBlockMemory, SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, and SCIPgetNVars().

Referenced by computeMIRForOptimalityCut(), conflictAnalyzeLP(), createCGCuts(), destroyAggregationData(), doSeparation(), generateClusterCuts(), generateGMICuts(), MirReduction(), SCIP_DECL_SEPAEXECLP(), SCIPaggrRowSumRows(), SCIPcertificateFreeAggrInfo(), and SCIPrunBoundHeuristic().

◆ SCIPaggrRowPrint()

void SCIPaggrRowPrint ( SCIP scip,
SCIP_AGGRROW aggrrow,
FILE *  file 
)

output aggregation row to file stream

Parameters
scipSCIP data structure
aggrrowpointer to return aggregation row
fileoutput file (or NULL for standard output)

Definition at line 2721 of file cuts.c.

References SCIP_AggrRow::inds, SCIP_AggrRow::nnz, NULL, QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Real, SCIPgetMessagehdlr(), SCIPgetVars(), SCIPmessageFPrintInfo(), SCIPvarGetName(), SCIPvarGetProbindex(), and SCIP_AggrRow::vals.

Referenced by SCIPcertificatePrintAggrrow().

◆ SCIPaggrRowCopy()

SCIP_RETCODE SCIPaggrRowCopy ( SCIP scip,
SCIP_AGGRROW **  aggrrow,
SCIP_AGGRROW source 
)

copy the aggregation row

copy a aggregation row

Parameters
scipSCIP data structure
aggrrowpointer to return aggregation row
sourcesource aggregation row

Definition at line 2758 of file cuts.c.

References SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, NULL, QUAD_ARRAY_SIZE, QUAD_ASSIGN_Q, SCIP_AggrRow::rank, SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowweights, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPduplicateBlockMemoryArray, SCIPgetNVars(), SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.

Referenced by SCIPcertificateNewAggrInfo().

◆ SCIPaggrRowAddRow()

SCIP_RETCODE SCIPaggrRowAddRow ( SCIP scip,
SCIP_AGGRROW aggrrow,
SCIP_ROW row,
SCIP_Real  weight,
int  sidetype 
)

add weighted row to the aggregation row

add weighted row to aggregation row

Parameters
scipSCIP data structure
aggrrowaggregation row
rowrow to add to aggregation row
weightscale for adding given row to aggregation row
sidetypespecify row side type (-1 = lhs, 0 = automatic, 1 = rhs)

Definition at line 2804 of file cuts.c.

References SCIP_Row::constant, FALSE, SCIP_AggrRow::inds, SCIP_Row::integral, SCIP_Row::lhs, SCIP_AggrRow::local, SCIP_Row::local, SCIP_Row::lppos, MAX, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, QUAD, SCIP_AggrRow::rank, SCIP_Row::rank, SCIP_Row::rhs, SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowssize, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPcalcMemGrowSize(), SCIPceil(), SCIPfloor(), SCIPisInfinity(), SCIPquadprecProdDD, SCIPquadprecSumQQ, SCIPreallocBlockMemoryArray, SCIProwGetLPPos(), SCIP_AggrRow::slacksign, TRUE, SCIP_AggrRow::vals, and varVecAddScaledRowCoefsQuad().

Referenced by addRowToAggrRow(), aggregateNextRow(), and aggregation().

◆ SCIPaggrRowAddRowSafely()

SCIP_RETCODE SCIPaggrRowAddRowSafely ( SCIP scip,
SCIP_AGGRROW aggrrow,
SCIP_ROW row,
SCIP_Real  weight,
int  sidetype,
SCIP_Bool success 
)

add weighted row to aggregation row

Note
this method is the variant of SCIPaggrRowAddRow that is safe to use in exact solving mode
Parameters
scipSCIP data structure
aggrrowaggregation row
rowrow to add to aggregation row
weightscale for adding given row to aggregation row
sidetypespecify row side type (-1 = lhs, 0 = automatic, 1 = rhs)
successwas the row added successfully

Definition at line 2887 of file cuts.c.

References SCIP_Row::constant, FALSE, SCIP_AggrRow::inds, SCIP_Row::integral, SCIP_Row::lhs, SCIP_AggrRow::local, SCIP_Row::local, MAX, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, NULL, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_AggrRow::rank, SCIP_Row::rank, SCIP_Row::rhs, SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowssize, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPcalcMemGrowSize(), SCIPintervalGetRoundingMode(), SCIPintervalSetRoundingMode(), SCIPintervalSetRoundingModeDownwards(), SCIPintervalSetRoundingModeUpwards(), SCIPisExact(), SCIPisInfinity(), SCIPreallocBlockMemoryArray, SCIProwExactGetRowRhs(), SCIProwExactHasFpRelax(), SCIProwGetLPPos(), SCIProwGetRowExact(), SCIP_AggrRow::slacksign, TRUE, SCIP_AggrRow::vals, and varVecAddScaledRowCoefsSafely().

Referenced by addRowToAggrRow().

◆ SCIPaggrRowCancelVarWithBound()

void SCIPaggrRowCancelVarWithBound ( SCIP scip,
SCIP_AGGRROW aggrrow,
SCIP_VAR var,
int  pos,
SCIP_Bool valid 
)

Removes a given variable var from position pos the aggregation row and updates the right-hand side according to sign of the coefficient, i.e., rhs -= coef * bound, where bound = lb if coef >= 0 and bound = ub, otherwise.

Note
: The choice of global or local bounds depend on the validity (global or local) of the aggregation row.
: The list of non-zero indices will be updated by swapping the last non-zero index to pos.
Parameters
scipSCIP data structure
aggrrowthe aggregation row
varvariable that should be removed
posposition of the variable in the aggregation row
validpointer to return whether the aggregation row is still valid

Definition at line 3008 of file cuts.c.

References FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NULL, QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_HI, QUAD_TO_DBL, SCIP_Real, SCIPinfinity(), SCIPisInfinity(), SCIPquadprecProdQD, SCIPquadprecSumQQ, SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetProbindex(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), TRUE, and SCIP_AggrRow::vals.

◆ SCIPaggrRowAddObjectiveFunction()

SCIP_RETCODE SCIPaggrRowAddObjectiveFunction ( SCIP scip,
SCIP_AGGRROW aggrrow,
SCIP_Real  rhs,
SCIP_Real  scale 
)

add the objective function with right-hand side rhs and scaled by scale to the aggregation row

Parameters
scipSCIP data structure
aggrrowthe aggregation row
rhsright-hand side of the artificial row
scalescalar

Definition at line 3067 of file cuts.c.

References SCIP_AggrRow::inds, SCIP_AggrRow::nnz, NONZERO, NULL, QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_HI, SCIP_OKAY, SCIP_Real, SCIPgetNVars(), SCIPgetVars(), SCIPisZero(), SCIPquadprecProdDD, SCIPquadprecSumQQ, SCIPvarGetObj(), SCIPvarGetProbindex(), and SCIP_AggrRow::vals.

Referenced by aggregation(), and SCIPgetDualProof().

◆ SCIPaggrRowAddObjectiveFunctionSafely()

SCIP_RETCODE SCIPaggrRowAddObjectiveFunctionSafely ( SCIP scip,
SCIP_AGGRROW aggrrow,
SCIP_Real  rhs,
SCIP_Real  scale 
)

add the objective function with right-hand side rhs and scaled by scale to the aggregation row variant of SCIPaggrRowAddObjectiveFunction that is safe to use in exact mode

Parameters
scipSCIP data structure
aggrrowthe aggregation row
rhsright-hand side of the artificial row
scalescalar

◆ SCIPaggrRowAddCustomCons()

SCIP_RETCODE SCIPaggrRowAddCustomCons ( SCIP scip,
SCIP_AGGRROW aggrrow,
int *  inds,
SCIP_Real vals,
int  len,
SCIP_Real  rhs,
SCIP_Real  weight,
int  rank,
SCIP_Bool  local 
)

add weighted constraint to the aggregation row

Parameters
scipSCIP data structure
aggrrowthe aggregation row
indsvariable problem indices in constraint to add to the aggregation row
valsvalues of constraint to add to the aggregation row
lenlength of constraint to add to the aggregation row
rhsright hand side of constraint to add to the aggregation row
weight(positive) scale for adding given constraint to the aggregation row
rankrank to use for given constraint
localis constraint only valid locally

Definition at line 3143 of file cuts.c.

References SCIP_AggrRow::inds, SCIP_AggrRow::local, MAX, SCIP_AggrRow::nnz, NONZERO, QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_STORE, QUAD_HI, SCIP_AggrRow::rank, REALABS, SCIP_OKAY, SCIP_Real, SCIPisInfinity(), SCIPquadprecProdDD, SCIPquadprecSumQQ, and SCIP_AggrRow::vals.

Referenced by computeMIRForOptimalityCut(), and MirReduction().

◆ SCIPaggrRowCalcEfficacyNorm()

SCIP_Real SCIPaggrRowCalcEfficacyNorm ( SCIP scip,
SCIP_AGGRROW aggrrow 
)

calculates the efficacy norm of the given aggregation row, which depends on the "separating/efficacynorm" parameter

Returns
the efficacy norm of the given aggregation row, which depends on the "separating/efficacynorm" parameter
Parameters
scipSCIP data structure
aggrrowthe aggregation row

Definition at line 3243 of file cuts.c.

References calcEfficacyNormQuad(), SCIP_AggrRow::inds, SCIP_AggrRow::nnz, and SCIP_AggrRow::vals.

Referenced by separateAlternativeProofs().

◆ SCIPaggrRowClear()

void SCIPaggrRowClear ( SCIP_AGGRROW aggrrow)

clear all entries in the aggregation row but do not free the internal memory

clear all entries int the aggregation row but don't free memory

Parameters
aggrrowthe aggregation row

Definition at line 3218 of file cuts.c.

References FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, QUAD, QUAD_ARRAY_STORE, QUAD_ASSIGN, SCIP_AggrRow::rank, SCIP_Real, and SCIP_AggrRow::vals.

Referenced by aggregation(), SCIPaggrRowSumRows(), and SCIPgetDualProof().

◆ SCIPaggrRowClearSafely()

void SCIPaggrRowClearSafely ( SCIP_AGGRROW aggrrow)

version for use in exact solving mode of SCIPaggrRowClear()

Parameters
aggrrowthe aggregation row

Definition at line 3196 of file cuts.c.

References FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, QUAD_ASSIGN, SCIP_AggrRow::rank, and SCIP_AggrRow::vals.

Referenced by SCIPaggrRowSumRows(), and SCIPgetDualProof().

◆ SCIPaggrRowSumRows()

SCIP_RETCODE SCIPaggrRowSumRows ( SCIP scip,
SCIP_AGGRROW aggrrow,
SCIP_Real weights,
int *  rowinds,
int  nrowinds,
SCIP_Bool  sidetypebasis,
SCIP_Bool  allowlocal,
int  negslack,
int  maxaggrlen,
SCIP_Bool valid 
)

aggregate rows using the given weights; the current content of the aggregation row, aggrrow, is overwritten

Note
this method is safe for usage in exact solving mode
Parameters
scipSCIP data structure
aggrrowthe aggregation row
weightsrow weights in row summation
rowindsarray to store indices of non-zero entries of the weights array, or NULL
nrowindsnumber of non-zero entries in weights array, -1 if rowinds is NULL
sidetypebasischoose sidetypes of row (lhs/rhs) based on basis information?
allowlocalshould local rows allowed to be used?
negslackshould negative slack variables allowed to be used? (0: no, 1: only for integral rows, 2: yes)
maxaggrlenmaximal length of aggregation row
validis the aggregation valid

Definition at line 3523 of file cuts.c.

References addOneRow(), addOneRowSafely(), SCIP_Row::constant, FALSE, SCIP_Row::integral, SCIP_Row::lhs, SCIP_AggrRow::nrows, NULL, SCIP_Row::rhs, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddCertificateAggrInfo(), SCIPaggrRowClear(), SCIPaggrRowClearSafely(), SCIPaggrRowCreate(), SCIPaggrRowFree(), SCIPaggrRowRemoveZeros(), SCIPallocBufferArray, SCIPdebug, SCIPdebugMessage, SCIPfreeBufferArray, SCIPgetLPRowsData(), SCIPgetVarsData(), SCIPisCertified(), SCIPisExact(), SCIPprintRow(), SCIPrealIsExactlyIntegral(), and TRUE.

Referenced by createCGCutCMIR(), createCGCutStrongCG(), generateClusterCuts(), generateGMICuts(), and SCIP_DECL_SEPAEXECLP().

◆ SCIPaggrRowRemoveZeros()

void SCIPaggrRowRemoveZeros ( SCIP scip,
SCIP_AGGRROW aggrrow,
SCIP_Bool  useglbbounds,
SCIP_Bool valid 
)

removes all (close enough to) zero entries in the aggregation row

removes almost zero entries from the aggregation row.

Parameters
scipSCIP datastructure
aggrrowthe aggregation row
useglbboundsconsider global bound although the cut is local?
validpointer to return whether the aggregation row is still valid

Definition at line 3949 of file cuts.c.

References FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NULL, QUAD, QUAD_ASSIGN, QUAD_TO_DBL, removeZerosQuad(), removeZerosSafely(), SCIP_Real, SCIPisExact(), SCIPsumepsilon(), and SCIP_AggrRow::vals.

Referenced by addLocalRows(), aggregateNextRow(), SCIPaggrRowSumRows(), SCIPgetDualProof(), and SCIPgetFarkasProof().

◆ SCIPaggrRowGetRowInds()

int * SCIPaggrRowGetRowInds ( SCIP_AGGRROW aggrrow)

get array with lp positions of aggregated rows

get array with lp positions of rows used in aggregation

Parameters
aggrrowthe aggregation row

Definition at line 3983 of file cuts.c.

References SCIP_AggrRow::nrows, NULL, and SCIP_AggrRow::rowsinds.

Referenced by aggregation().

◆ SCIPaggrRowGetRowWeights()

SCIP_Real * SCIPaggrRowGetRowWeights ( SCIP_AGGRROW aggrrow)

get array with weights of aggregated rows

Parameters
aggrrowthe aggregation row

Definition at line 3994 of file cuts.c.

References SCIP_AggrRow::nrows, NULL, and SCIP_AggrRow::rowweights.

◆ SCIPaggrRowHasRowBeenAdded()

SCIP_Bool SCIPaggrRowHasRowBeenAdded ( SCIP_AGGRROW aggrrow,
SCIP_ROW row 
)

checks whether a given row has been added to the aggregation row

Parameters
aggrrowthe aggregation row
rowrow for which it is checked whether it has been added to the aggregation

Definition at line 4005 of file cuts.c.

References FALSE, SCIP_AggrRow::nrows, NULL, SCIP_AggrRow::rowsinds, SCIProwGetLPPos(), and TRUE.

Referenced by aggregateNextRow().

◆ SCIPaggrRowGetAbsWeightRange()

void SCIPaggrRowGetAbsWeightRange ( SCIP_AGGRROW aggrrow,
SCIP_Real minabsrowweight,
SCIP_Real maxabsrowweight 
)

gets the min and max absolute value of the weights used to aggregate the rows; must not be called for empty aggregation rows

Parameters
aggrrowthe aggregation row
minabsrowweightpointer to store smallest absolute value of weights used for aggregating rows
maxabsrowweightpointer to store largest absolute value of weights used for aggregating rows

◆ SCIPaggrRowGetInds()

int * SCIPaggrRowGetInds ( SCIP_AGGRROW aggrrow)

gets the array of corresponding variable problem indices for each non-zero in the aggregation row

Parameters
aggrrowaggregation row

Definition at line 4028 of file cuts.c.

References SCIP_AggrRow::inds, and NULL.

Referenced by aggregateNextRow(), aggrRowGetMinActivitySafely(), conflictAnalyzeLP(), proofsetAddAggrrow(), SCIPaggrRowGetMinActivity(), SCIPcertificatePrintAggrrow(), SCIPrunBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().

◆ SCIPaggrRowGetNNz()

int SCIPaggrRowGetNNz ( SCIP_AGGRROW aggrrow)

◆ SCIPaggrRowGetValue()

static INLINE SCIP_Real SCIPaggrRowGetValue ( SCIP_AGGRROW aggrrow,
int  i 
)
static

gets the non-zero value for the given non-zero index

Parameters
aggrrowthe aggregation row
inon-zero index; must be between 0 and SCIPaggrRowGetNNz(aggrrow) - 1

Definition at line 273 of file cuts.h.

References SCIP_AggrRow::inds, QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Real, and SCIP_AggrRow::vals.

◆ SCIPaggrRowGetValueSafely()

static INLINE SCIP_Real SCIPaggrRowGetValueSafely ( SCIP_AGGRROW aggrrow,
int  i 
)
static

gets the non-zero value for the given non-zero index

Parameters
aggrrowthe aggregation row
inon-zero index; must be between 0 and SCIPaggrRowGetNNz(aggrrow) - 1

Definition at line 287 of file cuts.h.

References SCIP_AggrRow::inds, and SCIP_AggrRow::vals.

Referenced by SCIPcertificatePrintAggrrow().

◆ SCIPaggrRowGetProbvarValue()

static INLINE SCIP_Real SCIPaggrRowGetProbvarValue ( SCIP_AGGRROW aggrrow,
int  probindex 
)
static

gets the non-zero value for the given problem index of a variable

Parameters
aggrrowthe aggregation row
probindexproblem index of variable; must be between 0 and SCIPgetNVars(scip) - 1

Definition at line 297 of file cuts.h.

References QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Real, and SCIP_AggrRow::vals.

Referenced by aggregateNextRow(), conflictAnalyzeLP(), proofsetAddAggrrow(), SCIPaggrRowGetMinActivity(), SCIPrunBoundHeuristic(), and separateAlternativeProofs().

◆ SCIPaggrRowGetRank()

int SCIPaggrRowGetRank ( SCIP_AGGRROW aggrrow)

gets the rank of the aggregation row

Parameters
aggrrowaggregation row

Definition at line 4048 of file cuts.c.

References NULL, and SCIP_AggrRow::rank.

◆ SCIPaggrRowIsLocal()

SCIP_Bool SCIPaggrRowIsLocal ( SCIP_AGGRROW aggrrow)

checks if the aggregation row is only valid locally

Parameters
aggrrowaggregation row

Definition at line 4058 of file cuts.c.

References SCIP_AggrRow::local, and NULL.

◆ SCIPaggrRowGetRhs()

SCIP_Real SCIPaggrRowGetRhs ( SCIP_AGGRROW aggrrow)

◆ SCIPaggrRowGetNRows()

int SCIPaggrRowGetNRows ( SCIP_AGGRROW aggrrow)

gets the number of row aggregations

get number of aggregated rows

Parameters
aggrrowthe aggregation row

Definition at line 3973 of file cuts.c.

References SCIP_AggrRow::nrows, and NULL.

Referenced by aggregation().

◆ SCIPcalcMIR()

SCIP_RETCODE SCIPcalcMIR ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  postprocess,
SCIP_Real  boundswitch,
int  vartypeusevbds,
SCIP_Bool  allowlocal,
SCIP_Bool  fixintegralrhs,
int *  boundsfortrans,
SCIP_BOUNDTYPE boundtypesfortrans,
SCIP_Real  minfrac,
SCIP_Real  maxfrac,
SCIP_Real  scale,
SCIP_AGGRROW aggrrow,
SCIP_Real cutcoefs,
SCIP_Real cutrhs,
int *  cutinds,
int *  cutnnz,
SCIP_Real cutefficacy,
int *  cutrank,
SCIP_Bool cutislocal,
SCIP_Bool success 
)

calculates an MIR cut out of the weighted sum of LP rows given by an aggregation row; the aggregation row must not contain non-zero weights for modifiable rows, because these rows cannot participate in an MIR cut.

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:

See SCIP_STAGE for a complete list of all possible solving stages.

calculates an MIR cut out of the weighted sum of LP rows; The weights of modifiable rows are set to 0.0, because these rows cannot participate in an MIR cut.

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:

See SCIP_STAGE for a complete list of all possible solving stages.

Note
this method is safe for usage in exact solving mode
Parameters
scipSCIP data structure
solthe solution that should be separated, or NULL for LP solution
postprocessapply a post-processing step to the resulting cut?
boundswitchfraction of domain up to which lower bound is used in transformation
vartypeusevbdsfor all variable types with index smaller than this number, variable type substitution is allowed. The indices are: 0: continuous, 1: continuous implint., 2: integer implint, 3: binary implint, 4: integer, 5: binary
allowlocalshould local information allowed to be used, resulting in a local cut?
fixintegralrhsshould complementation tried to be adjusted such that rhs gets fractional?
boundsfortransbounds that should be used for transformed variables: vlb_idx/vub_idx, -1 for global lb/ub, -2 for local lb/ub, or -3 for using closest bound; NULL for using closest bound for all variables
boundtypesfortranstype of bounds that should be used for transformed variables; NULL for using closest bound for all variables
minfracminimal fractionality of rhs to produce MIR cut for
maxfracmaximal fractionality of rhs to produce MIR cut for
scaleadditional scaling factor multiplied to the aggrrow; must be positive
aggrrowaggrrow to compute MIR cut for
cutcoefsarray to store the non-zero coefficients in the cut if its efficacy improves cutefficacy
cutrhspointer to store the right hand side of the cut if its efficacy improves cutefficacy
cutindsarray to store the indices of non-zero coefficients in the cut if its efficacy improves cutefficacy
cutnnzpointer to store the number of non-zeros in the cut if its efficacy improves cutefficacy
cutefficacypointer to store efficacy of cut, or NULL
cutrankpointer to return rank of generated cut or NULL if it improves cutefficacy
cutislocalpointer to store whether the generated cut is only valid locally if it improves cutefficacy
successpointer to store whether the returned coefficients are a valid MIR cut and it improves cutefficacy

Definition at line 7923 of file cuts.c.

References BMScopyMemoryArray, calcEfficacyDenseStorageQuad(), calcMIRSafely(), MIR_Data::cutcoefs, MIR_Data::cutinds, cutsRoundMIR(), cutsSubstituteMIR(), cutsTransformMIR(), FALSE, SCIP_AggrRow::inds, MIR_Data::isenfint, MIR_Data::isimplint, SCIP_AggrRow::local, MAXCMIRSCALE, MIR_Data::nbinimplvars, MIR_Data::nbinvars, MIR_Data::ncontimplvars, MIR_Data::ncontvars, MIR_Data::ncutinds, MIR_Data::nintimplvars, MIR_Data::nintvars, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, NSECTIONS, NULL, MIR_Data::nvars, postprocessCutQuad(), QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_SIZE, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_ASSIGN_Q, QUAD_HI, QUAD_LO, QUAD_TO_DBL, SCIP_AggrRow::rank, REALABS, removeZerosQuad(), SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPABORT, SCIPallocBuffer, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMsg, SCIPepsilon(), SCIPfreeBuffer, SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNBinImplVars(), SCIPgetNBinVars(), SCIPgetNContImplVars(), SCIPgetNContVars(), SCIPgetNIntImplVars(), SCIPgetNIntVars(), SCIPgetNVars(), SCIPgetVars(), SCIPisEfficacious(), SCIPisExact(), SCIPisPositive(), SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQQ, SCIPsortDownInt(), SCIPsumepsilon(), MIR_Data::secindices, MIR_Data::secnnz, SCIP_AggrRow::slacksign, MIR_Data::totalnnz, TRUE, MIR_Data::usevbds, SCIP_AggrRow::vals, MIR_Data::vars, and varSection().

Referenced by computeMIRForOptimalityCut(), createCGCutCMIR(), generateClusterCuts(), generateGMICuts(), MirReduction(), and SCIP_DECL_SEPAEXECLP().

◆ SCIPcutGenerationHeuristicCMIR()

SCIP_RETCODE SCIPcutGenerationHeuristicCMIR ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  postprocess,
SCIP_Real  boundswitch,
int  vartypeusevbds,
SCIP_Bool  allowlocal,
int  maxtestdelta,
int *  boundsfortrans,
SCIP_BOUNDTYPE boundtypesfortrans,
SCIP_Real  minfrac,
SCIP_Real  maxfrac,
SCIP_AGGRROW aggrrow,
SCIP_Real cutcoefs,
SCIP_Real cutrhs,
int *  cutinds,
int *  cutnnz,
SCIP_Real cutefficacy,
int *  cutrank,
SCIP_Bool cutislocal,
SCIP_Bool success 
)

calculates an MIR cut out of the weighted sum of LP rows given by an aggregation row; the aggregation row must not contain non-zero weights for modifiable rows, because these rows cannot participate in an MIR cut. The function uses a cut generation heuristic which tries different scaling factors and complementations of the variables to improve the cut's efficacy. For further details we refer to:

Marchand, H., & Wolsey, L. A. (2001). Aggregation and mixed integer rounding to solve MIPs. Operations research, 49(3), 363-371.

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:

See SCIP_STAGE for a complete list of all possible solving stages.

calculates an MIR cut out of an aggregation of LP rows

Given the aggregation, it is transformed to a mixed knapsack set via complementation (using bounds or variable bounds) Then, different scalings of the mkset are used to generate a MIR and the best is chosen. One of the steps of the MIR is to round the coefficients of the integer variables down, so one would prefer to have integer coefficients for integer variables which are far away from their bounds in the mkset.

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:

See SCIP_STAGE for a complete list of all possible solving stages.

Parameters
scipSCIP data structure
solthe solution that should be separated, or NULL for LP solution
postprocessapply a post-processing step to the resulting cut?
boundswitchfraction of domain up to which lower bound is used in transformation
vartypeusevbdsfor all variable types with index smaller than this number, variable type substitution is allowed. The indices are: 0: continuous, 1: continuous implint., 2: integer implint, 3: binary implint, 4: integer, 5: binary
allowlocalshould local information allowed to be used, resulting in a local cut?
maxtestdeltamaximum number of deltas to test
boundsfortransbounds that should be used for transformed variables: vlb_idx/vub_idx, -1 for global lb/ub, -2 for local lb/ub, or -3 for using closest bound; NULL for using closest bound for all variables
boundtypesfortranstype of bounds that should be used for transformed variables; NULL for using closest bound for all variables
minfracminimal fractionality of rhs to produce MIR cut for
maxfracmaximal fractionality of rhs to produce MIR cut for
aggrrowaggrrow to compute MIR cut for
cutcoefsarray to store the non-zero coefficients in the cut
cutrhspointer to store the right hand side of the cut
cutindsarray to store the problem indices of variables with a non-zero coefficient in the cut
cutnnzpointer to store the number of non-zeros in the cut
cutefficacypointer to store efficacy of best cut; only cuts that are strictly better than the value of this efficacy on input to this function are returned
cutrankpointer to return rank of generated cut (or NULL)
cutislocalpointer to store whether the generated cut is only valid locally
successpointer to store whether a valid and efficacious cut was returned

Definition at line 8339 of file cuts.c.

References BMScopyMemoryArray, calcEfficacyDenseStorageQuad(), computeMIREfficacy(), MIR_Data::cutcoefs, MIR_Data::cutinds, cutsRoundMIR(), cutsSubstituteMIR(), cutsTransformMIR(), EPSZ, FALSE, findBestLb(), findBestUb(), SCIP_AggrRow::inds, SCIP_Row::integral, MIR_Data::isenfint, MIR_Data::isimplint, SCIP_Row::lhs, SCIP_AggrRow::local, MAX, MIN, MIR_Data::nbinimplvars, MIR_Data::nbinvars, MIR_Data::ncontimplvars, MIR_Data::ncontvars, MIR_Data::ncutinds, MIR_Data::nintimplvars, MIR_Data::nintvars, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, NSECTIONS, NULL, MIR_Data::nvars, postprocessCutQuad(), QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_SIZE, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_ASSIGN_Q, QUAD_HI, QUAD_LO, QUAD_TO_DBL, SCIP_AggrRow::rank, REALABS, removeZerosQuad(), SCIP_Row::rhs, SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_INVALID, SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPABORT, SCIPallocBuffer, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPcalcIntegralScalar(), SCIPceil(), SCIPdebug, SCIPdebugMsg, SCIPepsilon(), SCIPfloor(), SCIPfreeBuffer, SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetLPRows(), SCIPgetNBinImplVars(), SCIPgetNBinVars(), SCIPgetNContImplVars(), SCIPgetNContVars(), SCIPgetNIntImplVars(), SCIPgetNIntVars(), SCIPgetNVars(), SCIPgetRowSolActivity(), SCIPgetSolVal(), SCIPgetVars(), SCIPinfinity(), SCIPisEfficacious(), SCIPisEQ(), SCIPisFeasIntegral(), SCIPisGT(), SCIPisInfinity(), SCIPquadprecEpsFloorQ, SCIPquadprecProdDD, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQQ, SCIPrelDiff(), SCIPsortDownInt(), SCIPsortDownRealRealInt(), SCIPsumepsilon(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetType(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarGetVlbCoefs(), SCIPvarGetVlbConstants(), SCIPvarGetVlbVars(), SCIPvarGetVubCoefs(), SCIPvarGetVubConstants(), SCIPvarGetVubVars(), SCIPvarIsIntegral(), MIR_Data::secindices, MIR_Data::secnnz, SCIP_AggrRow::slacksign, SQR, MIR_Data::totalnnz, TRUE, MIR_Data::usevbds, SCIP_AggrRow::vals, MIR_Data::vars, and varSection().

Referenced by aggregation(), and separateAlternativeProofs().

◆ SCIPcalcFlowCover()

SCIP_RETCODE SCIPcalcFlowCover ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  postprocess,
SCIP_Real  boundswitch,
SCIP_Bool  allowlocal,
SCIP_AGGRROW aggrrow,
SCIP_Real cutcoefs,
SCIP_Real cutrhs,
int *  cutinds,
int *  cutnnz,
SCIP_Real cutefficacy,
int *  cutrank,
SCIP_Bool cutislocal,
SCIP_Bool success 
)

calculates a lifted simple generalized flow cover cut out of the weighted sum of LP rows given by an aggregation row; the aggregation row must not contain non-zero weights for modifiable rows, because these rows cannot participate in the cut. For further details we refer to:

Gu, Z., Nemhauser, G. L., & Savelsbergh, M. W. (1999). Lifted flow cover inequalities for mixed 0-1 integer programs. Mathematical Programming, 85(3), 439-467.

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:

See SCIP_STAGE for a complete list of all possible solving stages.

Parameters
scipSCIP data structure
solthe solution that should be separated, or NULL for LP solution
postprocessapply a post-processing step to the resulting cut?
boundswitchfraction of domain up to which lower bound is used in transformation
allowlocalshould local information allowed to be used, resulting in a local cut?
aggrrowthe aggregation row to compute flow cover cut for
cutcoefsarray to store the non-zero coefficients in the cut
cutrhspointer to store the right hand side of the cut
cutindsarray to store the problem indices of variables with a non-zero coefficient in the cut
cutnnzpointer to store the number of non-zeros in the cut
cutefficacypointer to store the efficacy of the cut, or NULL
cutrankpointer to return rank of generated cut
cutislocalpointer to store whether the generated cut is only valid locally
successpointer to store whether a valid cut was returned

Definition at line 11645 of file cuts.c.

References allocSNFRelaxation(), calcEfficacy(), constructSNFRelaxation(), destroySNFRelaxation(), FALSE, generateLiftedFlowCoverCut(), getFlowCover(), SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NULL, postprocessCut(), QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_AggrRow::rank, removeZeros(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMsg, SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNCuts(), SCIPgetNLPs(), SCIPgetNVars(), SCIPsumepsilon(), and SCIP_AggrRow::vals.

Referenced by aggregation(), computeMIRForOptimalityCut(), and separateAlternativeProofs().

◆ SCIPcalcKnapsackCover()

SCIP_RETCODE SCIPcalcKnapsackCover ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  allowlocal,
SCIP_AGGRROW aggrrow,
SCIP_Real cutcoefs,
SCIP_Real cutrhs,
int *  cutinds,
int *  cutnnz,
SCIP_Real cutefficacy,
int *  cutrank,
SCIP_Bool cutislocal,
SCIP_Bool success 
)

calculates a lifted knapsack cover cut out of the weighted sum of LP rows given by an aggregation row; the aggregation row must not contain non-zero weights for modifiable rows, because these rows cannot participate in the cut. For further details we refer to:

Letchford, A. N., & Souli, G. (2019). On lifted cover inequalities: A new lifting procedure with unusual properties. Operations Research Letters, 47(2), 83-87.

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:

See SCIP_STAGE for a complete list of all possible solving stages.

Parameters
scipSCIP data structure
solthe solution that should be separated, or NULL for LP solution
allowlocalshould local information allowed to be used, resulting in a local cut?
aggrrowthe aggregation row to compute flow cover cut for
cutcoefsarray to store the non-zero coefficients in the cut
cutrhspointer to store the right hand side of the cut
cutindsarray to store the problem indices of variables with a non-zero coefficient in the cut
cutnnzpointer to store the number of non-zeros in the cut
cutefficacypointer to store the efficacy of the cut, or NULL
cutrankpointer to return rank of generated cut
cutislocalpointer to store whether the generated cut is only valid locally
successpointer to store whether a valid cut was returned

Definition at line 12270 of file cuts.c.

References BMScopyMemoryArray, calcEfficacy(), calcEfficacyDenseStorageQuad(), computeInitialKnapsackCover(), cutsTransformKnapsackCover(), evaluateLiftingFunctionKnapsack(), FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NONZERO, SCIP_AggrRow::nrows, NULL, prepareLiftingData(), QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_SIZE, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_ASSIGN_Q, QUAD_HI, QUAD_LO, QUAD_TO_DBL, SCIP_AggrRow::rank, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPABORT, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMsg, SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNVars(), SCIPisGT(), SCIPquadprecSumQD, SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.

Referenced by aggregation().

◆ SCIPcalcStrongCG()

SCIP_RETCODE SCIPcalcStrongCG ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  postprocess,
SCIP_Real  boundswitch,
int  vartypeusevbds,
SCIP_Bool  allowlocal,
SCIP_Real  minfrac,
SCIP_Real  maxfrac,
SCIP_Real  scale,
SCIP_AGGRROW aggrrow,
SCIP_Real cutcoefs,
SCIP_Real cutrhs,
int *  cutinds,
int *  cutnnz,
SCIP_Real cutefficacy,
int *  cutrank,
SCIP_Bool cutislocal,
SCIP_Bool success 
)

calculates a strong CG cut out of the weighted sum of LP rows given by an aggregation row; the aggregation row must not contain non-zero weights for modifiable rows, because these rows cannot participate in a strongcg cut

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:

See SCIP_STAGE for a complete list of all possible solving stages.

Parameters
scipSCIP data structure
solthe solution that should be separated, or NULL for LP solution
postprocessapply a post-processing step to the resulting cut?
boundswitchfraction of domain up to which lower bound is used in transformation
vartypeusevbdsfor all variable types with index smaller than this number, variable type substitution is allowed. The indices are: 0: continuous, 1: continuous implint., 2: integer implint, 3: binary implint, 4: integer, 5: binary
allowlocalshould local information allowed to be used, resulting in a local cut?
minfracminimal fractionality of rhs to produce strong CG cut for
maxfracmaximal fractionality of rhs to produce strong CG cut for
scaleadditional scaling factor multiplied to all rows
aggrrowthe aggregation row to compute a strong CG cut for
cutcoefsarray to store the non-zero coefficients in the cut
cutrhspointer to store the right hand side of the cut
cutindsarray to store the problem indices of variables with a non-zero coefficient in the cut
cutnnzpointer to store the number of non-zeros in the cut
cutefficacypointer to store the efficacy of the cut, or NULL
cutrankpointer to return rank of generated cut
cutislocalpointer to store whether the generated cut is only valid locally
successpointer to store whether a valid cut was returned

Definition at line 13281 of file cuts.c.

References ABS, BMScopyMemoryArray, calcEfficacy(), MIR_Data::cutcoefs, MIR_Data::cutinds, cutsRoundStrongCG(), cutsSubstituteStrongCG(), cutsTransformStrongCG(), FALSE, SCIP_AggrRow::inds, MIR_Data::isenfint, MIR_Data::isimplint, SCIP_AggrRow::local, MIR_Data::nbinimplvars, MIR_Data::nbinvars, MIR_Data::ncontimplvars, MIR_Data::ncontvars, MIR_Data::ncutinds, MIR_Data::nintimplvars, MIR_Data::nintvars, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, NSECTIONS, NULL, MIR_Data::nvars, postprocessCutQuad(), QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_SIZE, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_ASSIGN_Q, QUAD_HI, QUAD_LO, QUAD_TO_DBL, SCIP_AggrRow::rank, removeZerosQuad(), SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBuffer, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPceil(), SCIPdebug, SCIPdebugMsg, SCIPepsilon(), SCIPfreeBuffer, SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetHugeValue(), SCIPgetNBinImplVars(), SCIPgetNBinVars(), SCIPgetNContImplVars(), SCIPgetNContVars(), SCIPgetNIntImplVars(), SCIPgetNIntVars(), SCIPgetNVars(), SCIPgetVars(), SCIPisPositive(), SCIPquadprecDivDQ, SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPsortDownInt(), SCIPsumepsilon(), MIR_Data::secindices, MIR_Data::secnnz, SCIP_AggrRow::slacksign, MIR_Data::totalnnz, TRUE, MIR_Data::usevbds, SCIP_AggrRow::vals, MIR_Data::vars, and varSection().

Referenced by createCGCutStrongCG(), and SCIP_DECL_SEPAEXECLP().

◆ SCIPcutGetRow()

SCIP_ROW * SCIPcutGetRow ( SCIP_CUT cut)

gets the row of the cut

Parameters
cutcut

Definition at line 382 of file cutpool.c.

References NULL, and SCIP_Cut::row.

Referenced by copyCuts(), and takeCut().

◆ SCIPcutGetAge()

int SCIPcutGetAge ( SCIP_CUT cut)

gets the age of the cut: the number of consecutive cut pool separation rounds where the cut was neither in the LP nor violated

Parameters
cutcut

Definition at line 392 of file cutpool.c.

References SCIP_Cut::age, and NULL.

Referenced by takeCut().

◆ SCIPcutGetLPActivityQuot()

SCIP_Real SCIPcutGetLPActivityQuot ( SCIP_CUT cut)

returns the ratio of LPs where the row belonging to this cut was active in an LP solution, i.e. where the age of its row has not been increased

See also
SCIPcutGetAge() to get the age of a cut
Parameters
cutcut

Definition at line 406 of file cutpool.c.

References NULL, SCIP_Cut::row, SCIP_Longint, SCIP_Real, SCIProwGetActiveLPCount(), and SCIProwGetNLPsAfterCreation().

Referenced by takeCut().

◆ SCIPcutpoolGetCuts()

SCIP_CUT ** SCIPcutpoolGetCuts ( SCIP_CUTPOOL cutpool)

gets array of cuts in the cut pool

Parameters
cutpoolcut pool

Definition at line 1067 of file cutpool.c.

References SCIP_Cutpool::cuts, and NULL.

Referenced by SCIPgetDelayedPoolCuts(), and SCIPgetPoolCuts().

◆ SCIPcutpoolGetNCuts()

int SCIPcutpoolGetNCuts ( SCIP_CUTPOOL cutpool)

get number of cuts in the cut pool

gets number of cuts in the cut pool

Parameters
cutpoolcut pool

Definition at line 1077 of file cutpool.c.

References SCIP_Cutpool::ncuts, and NULL.

Referenced by SCIPgetNDelayedPoolCuts(), SCIPgetNPoolCuts(), and SCIPsepaExecLP().

◆ SCIPcutpoolGetMaxNCuts()

SCIP_Longint SCIPcutpoolGetMaxNCuts ( SCIP_CUTPOOL cutpool)

get maximum number of cuts that were stored in the cut pool at the same time

gets maximum number of cuts that were stored in the cut pool at the same time

Parameters
cutpoolcut pool

Definition at line 1087 of file cutpool.c.

References SCIP_Cutpool::maxncuts, and NULL.

Referenced by SCIPcollectSeparatorStatistics(), SCIPprintSeparatorStatistics(), and SCIPsolve().

◆ SCIPcutpoolGetTime()

SCIP_Real SCIPcutpoolGetTime ( SCIP_CUTPOOL cutpool)

gets time in seconds used for separating cuts from the pool

Parameters
cutpoolcut pool

Definition at line 1097 of file cutpool.c.

References NULL, SCIP_Cutpool::poolclock, and SCIPclockGetTime().

Referenced by SCIPcollectSeparatorStatistics(), SCIPprintSeparatorStatistics(), and SCIPsolve().

◆ SCIPcutpoolGetNCalls()

SCIP_Longint SCIPcutpoolGetNCalls ( SCIP_CUTPOOL cutpool)

get number of times the cut pool was separated

Parameters
cutpoolcut pool

Definition at line 1107 of file cutpool.c.

References SCIP_Cutpool::ncalls, and NULL.

Referenced by SCIPcollectSeparatorStatistics(), SCIPprintSeparatorStatistics(), and SCIPsolve().

◆ SCIPcutpoolGetNRootCalls()

SCIP_Longint SCIPcutpoolGetNRootCalls ( SCIP_CUTPOOL cutpool)

get number of times the cut pool was separated at the root

Parameters
cutpoolcut pool

Definition at line 1117 of file cutpool.c.

References SCIP_Cutpool::nrootcalls, and NULL.

Referenced by SCIPcollectSeparatorStatistics(), SCIPprintSeparatorStatistics(), and SCIPsolve().

◆ SCIPcutpoolGetNCutsFound()

SCIP_Longint SCIPcutpoolGetNCutsFound ( SCIP_CUTPOOL cutpool)

get total number of cuts that were separated from the cut pool

get total number of cuts that were added to the cut pool

Parameters
cutpoolcut pool

Definition at line 1127 of file cutpool.c.

References SCIP_Cutpool::ncutsfound, and NULL.

Referenced by SCIPcollectSeparatorStatistics(), SCIPprintSeparatorStatistics(), and SCIPsolve().

◆ SCIPcutpoolGetNCutsAdded()

SCIP_Longint SCIPcutpoolGetNCutsAdded ( SCIP_CUTPOOL cutpool)

get total number of cuts that were added from the cut pool to sepastore

Parameters
cutpoolcut pool

Definition at line 1137 of file cutpool.c.

References SCIP_Cutpool::ncutsadded, and NULL.

Referenced by SCIPcollectSeparatorStatistics(), SCIPprintSeparatorStatistics(), and SCIPsolve().

◆ SCIPgetCutLPSolCutoffDistance()

SCIP_Real SCIPgetCutLPSolCutoffDistance ( SCIP scip,
SCIP_SOL sol,
SCIP_ROW cut 
)

returns row's cutoff distance in the direction of the given primal solution

Returns
the cutoff distance of the cut with respect to the LP solution in the direction of the given primal solution
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
solsolution to compute direction for cutoff distance; must not be NULL
cutseparated cut

Definition at line 72 of file scip_cut.c.

References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage, SCIProwGetLPSolCutoffDistance(), and TRUE.

Referenced by scoring().

◆ SCIPgetCutEfficacy()

SCIP_Real SCIPgetCutEfficacy ( SCIP scip,
SCIP_SOL sol,
SCIP_ROW cut 
)

returns efficacy of the cut with respect to the given primal solution or the current LP solution: e = -feasibility/norm

Returns
the efficacy of the cut with respect to the given primal solution or the current LP solution: e = -feasibility/norm
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
solprimal CIP solution, or NULL for current LP solution
cutseparated cut

Definition at line 94 of file scip_cut.c.

References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage, SCIProwGetLPEfficacy(), SCIProwGetSolEfficacy(), and TRUE.

Referenced by addCut(), computeCut(), computeProjectionScore(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), filterWithDynamicParallelism(), SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_NLHDLRENFO(), SCIP_DECL_SEPAEXECLP(), SCIPprocessRowprepNonlinear(), scoring(), separateCuts(), and separateDeterminant().

◆ SCIPisCutEfficacious()

SCIP_Bool SCIPisCutEfficacious ( SCIP scip,
SCIP_SOL sol,
SCIP_ROW cut 
)

returns whether the cut's efficacy with respect to the given primal solution or the current LP solution is greater than the minimal cut efficacy

Returns
TRUE if the cut's efficacy with respect to the given primal solution or the current LP solution is greater than the minimal cut efficacy, otherwise FALSE
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
solprimal CIP solution, or NULL for current LP solution
cutseparated cut

Definition at line 117 of file scip_cut.c.

References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage, SCIProwIsLPEfficacious(), SCIProwIsSolEfficacious(), SCIPtreeGetCurrentDepth(), and TRUE.

Referenced by addBoundCutSepa(), addCut(), computeCut(), createCGCutCMIR(), createCGCutStrongCG(), createRow(), generateOddCycleCut(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_SEPAEXECLP(), SCIPprocessRowprepNonlinear(), sepaImplBoundCutsSOS1(), separateCuts(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), and sepaSubtour().

◆ SCIPisEfficacious()

◆ SCIPgetVectorEfficacyNorm()

SCIP_Real SCIPgetVectorEfficacyNorm ( SCIP scip,
SCIP_Real vals,
int  nvals 
)

calculates the efficacy norm of the given vector, which depends on the "separating/efficacynorm" parameter

Returns
the efficacy norm of the given vector, which depends on the "separating/efficacynorm" parameter
Parameters
scipSCIP data structure
valsarray of values
nvalsnumber of values

Definition at line 149 of file scip_cut.c.

References FALSE, MAX, NULL, REALABS, SCIP_Real, SCIPerrorMessage, SCIPisZero(), and SQR.

Referenced by calcEfficacy().

◆ SCIPisCutApplicable()

SCIP_Bool SCIPisCutApplicable ( SCIP scip,
SCIP_ROW cut 
)

indicates whether a cut is applicable

If the cut has only one variable and this method returns FALSE, it may still be possible that the cut can be added to the LP (as a row instead of a boundchange), but it will be a very weak cut. The user is asked to avoid such cuts.

Precondition
This method can be called if scip is in one of the following stages:
Returns
whether the cut is modifiable, not a bound change, or a bound change that changes bounds by at least epsilon

indicates whether a cut is applicable, i.e., will modify the LP when applied

Precondition
This method can be called if scip is in one of the following stages:
Returns
whether the cut is modifiable, not a bound change, or a bound change that changes bounds by at least epsilon
Parameters
scipSCIP data structure
cutseparated cut

Definition at line 207 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, SCIPsepastoreIsCutApplicable(), and TRUE.

Referenced by addCut(), and SCIPprocessRowprepNonlinear().

◆ SCIPaddRow()

SCIP_RETCODE SCIPaddRow ( SCIP scip,
SCIP_ROW row,
SCIP_Bool  forcecut,
SCIP_Bool infeasible 
)

adds row to separation storage

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
rowrow
forcecutshould the row be forced to enter the LP?
infeasiblepointer to store whether row has been detected to be infeasible for local bounds

Definition at line 225 of file scip_cut.c.

References SCIP_Row::cols, FALSE, SCIP_Row::lhs, NULL, SCIP_Row::rhs, SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_OKAY, SCIP_Real, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPanalyzeConflict(), SCIPcheckStage, SCIPcolGetVar(), SCIPgetDepth(), SCIPinitConflictAnalysis(), SCIPisConflictAnalysisApplicable(), SCIPisGT(), SCIPisInfinity(), SCIPisLT(), SCIPisZero(), SCIPprobAllColsInLP(), SCIProwGetMaxActivity(), SCIProwGetMinActivity(), SCIProwGetNNonz(), SCIPsepastoreAddCut(), SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), TRUE, and SCIP_Row::vals.

Referenced by addBoundCutSepa(), addCut(), addCuts(), addOrbisackCover(), addOrbisackInequality(), addRelaxation(), addSymresackInequality(), computeCut(), createCapacityRestrictionIntvars(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), createRow(), doSeparation(), extendToCover(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateOddCycleCut(), initLP(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), LOPseparate(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSINITLP(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_NLHDLRENFO(), SCIP_DECL_NLHDLRINITSEPA(), SCIP_DECL_SEPAEXECLP(), SCIPgenerateAndApplyBendersOptCut(), SCIPprocessRowprepNonlinear(), sepaImplBoundCutsSOS1(), separateCons(), separateConsBinaryRepresentation(), separateCoverCutsCons(), separateCoversOrbisack(), separateCuts(), separateDeterminant(), separateIndicators(), separateMcCormickImplicit(), separatePerspective(), separateRltCuts(), separateSCIs(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), and sepaSubtour().

◆ SCIPisCutNew()

SCIP_Bool SCIPisCutNew ( SCIP scip,
SCIP_ROW row 
)

checks if cut is already existing in global cutpool

Returns
TRUE is returned if the cut is not already existing in the global cutpool, FALSE otherwise
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
rowcutting plane to add

Definition at line 318 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, SCIPcutpoolIsCutNew(), and TRUE.

Referenced by addCut(), addCuts(), generateZerohalfCut(), and SCIPsepastoreApplyCuts().

◆ SCIPaddPoolCut()

SCIP_RETCODE SCIPaddPoolCut ( SCIP scip,
SCIP_ROW row 
)

if not already existing, adds row to global cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
rowrow to remove

Definition at line 336 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolAddRow(), and TRUE.

Referenced by addCut(), addCutPool(), addCuts(), addPathCuts(), addSubtourCuts(), addTourCuts(), computeCut(), createAndAddTransferredCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), doSeparation(), extendToCover(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateOddCycleCut(), newsolCliqueAddRow(), SCIP_DECL_NLHDLRSOLLINEARIZE(), SCIP_DECL_SEPAEXECLP(), SCIPgenerateAndApplyBendersOptCut(), SCIPsepastoreApplyCuts(), and separateRltCuts().

◆ SCIPdelPoolCut()

SCIP_RETCODE SCIPdelPoolCut ( SCIP scip,
SCIP_ROW row 
)

removes the row from the global cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
rowcutting plane to add

Definition at line 356 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolDelRow(), and TRUE.

Referenced by addCut(), and SCIPsepastoreApplyCuts().

◆ SCIPgetPoolCuts()

SCIP_CUT ** SCIPgetPoolCuts ( SCIP scip)

gets current cuts in the global cut pool

Returns
the current cuts in the global cut pool
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure

Definition at line 377 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, SCIPcutpoolGetCuts(), and TRUE.

Referenced by SCIPcopyCuts().

◆ SCIPgetNPoolCuts()

int SCIPgetNPoolCuts ( SCIP scip)

gets current number of rows in the global cut pool

Returns
the current number of rows in the global cut pool
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure

Definition at line 395 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, SCIPcutpoolGetNCuts(), and TRUE.

Referenced by SCIP_DECL_DISPOUTPUT(), and SCIPcopyCuts().

◆ SCIPgetGlobalCutpool()

SCIP_CUTPOOL * SCIPgetGlobalCutpool ( SCIP scip)

gets the global cut pool used by SCIP

Returns
the global cut pool used by SCIP
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure

Definition at line 413 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, and TRUE.

Referenced by SCIPsepaExecLP().

◆ SCIPcreateCutpool()

SCIP_RETCODE SCIPcreateCutpool ( SCIP scip,
SCIP_CUTPOOL **  cutpool,
int  agelimit 
)

creates a cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
cutpoolpointer to store cut pool
agelimitmaximum age a cut can reach before it is deleted from the pool

Definition at line 437 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolCreate(), and TRUE.

◆ SCIPfreeCutpool()

SCIP_RETCODE SCIPfreeCutpool ( SCIP scip,
SCIP_CUTPOOL **  cutpool 
)

frees a cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
cutpoolpointer to store cut pool

Definition at line 468 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolFree(), and TRUE.

◆ SCIPaddRowCutpool()

SCIP_RETCODE SCIPaddRowCutpool ( SCIP scip,
SCIP_CUTPOOL cutpool,
SCIP_ROW row 
)

if not already existing, adds row to a cut pool and captures it

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
cutpoolcut pool
rowcutting plane to add

Definition at line 489 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolAddRow(), and TRUE.

◆ SCIPaddNewRowCutpool()

SCIP_RETCODE SCIPaddNewRowCutpool ( SCIP scip,
SCIP_CUTPOOL cutpool,
SCIP_ROW row 
)

adds row to a cut pool and captures it; doesn't check for multiple cuts

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
cutpoolcut pool
rowcutting plane to add

Definition at line 511 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolAddNewRow(), and TRUE.

◆ SCIPdelRowCutpool()

SCIP_RETCODE SCIPdelRowCutpool ( SCIP scip,
SCIP_CUTPOOL cutpool,
SCIP_ROW row 
)

removes the LP row from a cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
cutpoolcut pool
rowrow to remove

Definition at line 534 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolDelRow(), and TRUE.

◆ SCIPseparateCutpool()

SCIP_RETCODE SCIPseparateCutpool ( SCIP scip,
SCIP_CUTPOOL cutpool,
SCIP_RESULT result 
)

separates cuts from a cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
cutpoolcut pool
resultpointer to store the result of the separation call

Definition at line 555 of file scip_cut.c.

References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolSeparate(), SCIPerrorMessage, SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), SCIPtreeHasCurrentNodeLP(), and TRUE.

◆ SCIPseparateSolCutpool()

SCIP_RETCODE SCIPseparateSolCutpool ( SCIP scip,
SCIP_CUTPOOL cutpool,
SCIP_SOL sol,
SCIP_Bool  pretendroot,
SCIP_RESULT result 
)

separates cuts w.r.t. given solution from a cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
cutpoolcut pool
solsolution to be separated
pretendrootshould the cut separators be called as if we are at the root node?
resultpointer to store the result of the separation call

Definition at line 585 of file scip_cut.c.

References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolSeparate(), SCIPerrorMessage, SCIPtreeGetCurrentNode(), SCIPtreeHasCurrentNodeLP(), and TRUE.

◆ SCIPaddDelayedPoolCut()

SCIP_RETCODE SCIPaddDelayedPoolCut ( SCIP scip,
SCIP_ROW row 
)

if not already existing, adds row to the delayed global cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is the stages SCIP_STAGE_SOLVING

if not already existing, adds row to delayed global cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is the stages SCIP_STAGE_SOLVING
Parameters
scipSCIP data structure
rowcutting plane to add

Definition at line 616 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolAddRow(), and TRUE.

Referenced by addCut(), and addCuts().

◆ SCIPdelDelayedPoolCut()

SCIP_RETCODE SCIPdelDelayedPoolCut ( SCIP scip,
SCIP_ROW row 
)

removes the row from the delayed global cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is the stages SCIP_STAGE_SOLVING
Parameters
scipSCIP data structure
rowcutting plane to add

Definition at line 635 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPcutpoolDelRow(), and TRUE.

◆ SCIPgetDelayedPoolCuts()

SCIP_CUT ** SCIPgetDelayedPoolCuts ( SCIP scip)

gets current cuts in the delayed global cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is the stages SCIP_STAGE_SOLVING
Parameters
scipSCIP data structure

Definition at line 654 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, SCIPcutpoolGetCuts(), and TRUE.

Referenced by SCIPcopyCuts().

◆ SCIPgetNDelayedPoolCuts()

int SCIPgetNDelayedPoolCuts ( SCIP scip)

gets current number of rows in the delayed global cut pool

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is the stages SCIP_STAGE_SOLVING
Parameters
scipSCIP data structure

Definition at line 670 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, SCIPcutpoolGetNCuts(), and TRUE.

Referenced by SCIPcopyCuts().

◆ SCIPgetDelayedGlobalCutpool()

SCIP_CUTPOOL * SCIPgetDelayedGlobalCutpool ( SCIP scip)

gets the delayed global cut pool used by SCIP

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is the stages SCIP_STAGE_SOLVING
Parameters
scipSCIP data structure

Definition at line 686 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, and TRUE.

Referenced by SCIPsepaExecLP().

◆ SCIPseparateSol()

SCIP_RETCODE SCIPseparateSol ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  pretendroot,
SCIP_Bool  allowlocal,
SCIP_Bool  onlydelayed,
SCIP_Bool delayed,
SCIP_Bool cutoff 
)

separates the given primal solution or the current LP solution by calling the separators and constraint handlers' separation methods; the generated cuts are stored in the separation storage and can be accessed with the methods SCIPgetCuts() and SCIPgetNCuts(); after evaluating the cuts, you have to call SCIPclearCuts() in order to remove the cuts from the separation storage; it is possible to call SCIPseparateSol() multiple times with different solutions and evaluate the found cuts afterwards

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure
solprimal solution that should be separated, or NULL for LP solution
pretendrootshould the cut separators be called as if we are at the root node?
allowlocalshould the separator be asked to separate local cuts
onlydelayedshould only separators be called that were delayed in the previous round?
delayedpointer to store whether a separator was delayed
cutoffpointer to store whether the node can be cut off

Definition at line 710 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPseparationRound(), SCIPtreeGetCurrentDepth(), and TRUE.

Referenced by applySeparation(), and SCIP_DECL_SEPAEXECLP().

◆ SCIPgetCuts()

SCIP_ROW ** SCIPgetCuts ( SCIP scip)

gets the array of cuts currently stored in the separation storage

Returns
the array of cuts currently stored in the separation storage
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure

Definition at line 744 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, SCIPsepastoreGetCuts(), and TRUE.

◆ SCIPgetNCuts()

int SCIPgetNCuts ( SCIP scip)

get current number of cuts in the separation storage

Returns
the current number of cuts in the separation storage
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure

Definition at line 762 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage, SCIPsepastoreGetNCuts(), and TRUE.

Referenced by applySeparation(), SCIP_DECL_SEPAEXECLP(), SCIPcalcFlowCover(), and SCIPrelaxExec().

◆ SCIPclearCuts()

SCIP_RETCODE SCIPclearCuts ( SCIP scip)

clears the separation storage

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure

Definition at line 779 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPsepastoreClearCuts(), and TRUE.

◆ SCIPremoveInefficaciousCuts()

SCIP_RETCODE SCIPremoveInefficaciousCuts ( SCIP scip)

removes cuts that are inefficacious w.r.t. the current LP solution from separation storage without adding the cuts to the LP

Returns
SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
Precondition
This method can be called if scip is in one of the following stages:
Parameters
scipSCIP data structure

Definition at line 798 of file scip_cut.c.

References FALSE, SCIP_Bool, SCIP_CALL, SCIP_EFFICIACYCHOICE_LP, SCIP_OKAY, SCIPcheckStage, SCIPsepastoreRemoveInefficaciousCuts(), SCIPtreeGetCurrentDepth(), and TRUE.

Referenced by SCIP_DECL_SEPAEXECLP().