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)
 
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 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)
 
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 *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 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 SCIPselectCuts (SCIP *scip, SCIP_ROW **cuts, SCIP_RANDNUMGEN *randnumgen, SCIP_Real goodscorefac, SCIP_Real badscorefac, SCIP_Real goodmaxparall, SCIP_Real maxparall, SCIP_Real dircutoffdistweight, SCIP_Real efficacyweight, SCIP_Real objparalweight, SCIP_Real intsupportweight, int ncuts, int nforcedcuts, int maxselectedcuts, int *nselectedcuts)
 
SCIP_RETCODE SCIPcalcMIR (SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, SCIP_Bool usevbds, 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, SCIP_Bool usevbds, 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 SCIPcalcStrongCG (SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, SCIP_Bool usevbds, 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)
 
int SCIPcutpoolGetMaxNCuts (SCIP_CUTPOOL *cutpool)
 
SCIP_Real SCIPcutpoolGetTime (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNCalls (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNCutsFound (SCIP_CUTPOOL *cutpool)
 
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)
 
EXTERN SCIP_DEPRECATED SCIP_RETCODE SCIPaddCut (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_Bool forcecut, SCIP_Bool *infeasible)
 
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_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 acitvity bounds

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

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 1348 of file cuts.c.

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

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

◆ SCIPaggrRowCreate()

SCIP_RETCODE SCIPaggrRowCreate ( SCIP scip,
SCIP_AGGRROW **  aggrrow 
)

create an empty the aggregation row

create an empty aggregation row

Parameters
scipSCIP data structure
aggrrowpointer to return aggregation row

Definition at line 1549 of file cuts.c.

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

Referenced by conflictAnalyzeLP(), createCGCuts(), doSeparation(), generateClusterCuts(), runBoundHeuristic(), SCIP_DECL_SEPAEXECLP(), 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 1581 of file cuts.c.

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

Referenced by conflictAnalyzeLP(), createCGCuts(), doSeparation(), generateClusterCuts(), runBoundHeuristic(), SCIP_DECL_SEPAEXECLP(), and setupAggregationData().

◆ 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 1601 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.

◆ 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 1638 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.

◆ 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 1684 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, 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(), SCIPquadprecSumQD, SCIPreallocBlockMemoryArray, SCIProwGetLPPos(), SCIP_AggrRow::slacksign, TRUE, SCIP_AggrRow::vals, and varVecAddScaledRowCoefsQuad().

Referenced by aggregateNextRow(), aggregation(), getDualProof(), and getFarkasProof().

◆ 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 1771 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 1828 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(), SCIPquadprecSumQD, SCIPvarGetObj(), SCIPvarGetProbindex(), and SCIP_AggrRow::vals.

Referenced by getDualProof().

◆ 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 1899 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(), SCIPquadprecSumQD, and SCIP_AggrRow::vals.

◆ 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 1974 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 1949 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(), getDualProof(), and SCIPaggrRowSumRows().

◆ 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, gets overwritten

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 2093 of file cuts.c.

References addOneRow(), FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPaggrRowClear(), SCIPaggrRowRemoveZeros(), SCIPgetLPRowsData(), and SCIPgetVarsData().

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

◆ SCIPaggrRowRemoveZeros()

void SCIPaggrRowRemoveZeros ( SCIP scip,
SCIP_AGGRROW aggrrow,
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
validpointer to return whether the aggregation row is still valid

Definition at line 2282 of file cuts.c.

References SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NULL, QUAD, removeZerosQuad(), SCIPsumepsilon(), and SCIP_AggrRow::vals.

Referenced by aggregateNextRow(), getDualProof(), getFarkasProof(), and SCIPaggrRowSumRows().

◆ 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 2305 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 2316 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 2327 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 2350 of file cuts.c.

References SCIP_AggrRow::inds, and NULL.

Referenced by aggregateNextRow(), aggrRowGetMinActivity(), conflictAnalyzeLP(), proofsetAddAggrrow(), runBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().

◆ SCIPaggrRowGetNNz()

int SCIPaggrRowGetNNz ( SCIP_AGGRROW aggrrow)

gets the number of non-zeros in the aggregation row

Parameters
aggrrowaggregation row

Definition at line 2360 of file cuts.c.

References SCIP_AggrRow::nnz, and NULL.

Referenced by aggregateNextRow(), aggregation(), aggrRowGetMinActivity(), conflictAnalyzeDualProof(), conflictAnalyzeLP(), proofsetAddAggrrow(), runBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().

◆ 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 225 of file cuts.h.

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

◆ 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 239 of file cuts.h.

References QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Bool, SCIP_Real, SCIPaggrRowGetNRows(), SCIPaggrRowGetRank(), SCIPaggrRowGetRhs(), SCIPaggrRowIsLocal(), SCIPcalcFlowCover(), SCIPcalcMIR(), SCIPcalcStrongCG(), SCIPcutGenerationHeuristicCMIR(), SCIPselectCuts(), and SCIP_AggrRow::vals.

Referenced by aggregateNextRow(), aggrRowGetMinActivity(), conflictAnalyzeLP(), proofsetAddAggrrow(), runBoundHeuristic(), and separateAlternativeProofs().

◆ SCIPaggrRowGetRank()

int SCIPaggrRowGetRank ( SCIP_AGGRROW aggrrow)

gets the rank of the aggregation row

Parameters
aggrrowaggregation row

Definition at line 2370 of file cuts.c.

References NULL, and SCIP_AggrRow::rank.

Referenced by SCIPaggrRowGetProbvarValue().

◆ SCIPaggrRowIsLocal()

SCIP_Bool SCIPaggrRowIsLocal ( SCIP_AGGRROW aggrrow)

checks if the aggregation row is only valid locally

Parameters
aggrrowaggregation row

Definition at line 2380 of file cuts.c.

References SCIP_AggrRow::local, and NULL.

Referenced by SCIPaggrRowGetProbvarValue().

◆ SCIPaggrRowGetRhs()

SCIP_Real SCIPaggrRowGetRhs ( SCIP_AGGRROW aggrrow)

gets the right hand side of the aggregation row

Parameters
aggrrowaggregation row

Definition at line 2390 of file cuts.c.

References NULL, and QUAD_TO_DBL.

Referenced by conflictAnalyzeDualProof(), conflictAnalyzeLP(), getDualProof(), getFarkasProof(), proofsetAddAggrrow(), runBoundHeuristic(), SCIPaggrRowGetProbvarValue(), separateAlternativeProofs(), and tightenDualproof().

◆ SCIPaggrRowGetNRows()

int SCIPaggrRowGetNRows ( SCIP_AGGRROW aggrrow)

gets the number of row aggregations

get number of aggregated rows

Parameters
aggrrowthe aggregation row

Definition at line 2295 of file cuts.c.

References SCIP_AggrRow::nrows, and NULL.

Referenced by aggregation(), and SCIPaggrRowGetProbvarValue().

◆ SCIPselectCuts()

SCIP_RETCODE SCIPselectCuts ( SCIP scip,
SCIP_ROW **  cuts,
SCIP_RANDNUMGEN randnumgen,
SCIP_Real  goodscorefac,
SCIP_Real  badscorefac,
SCIP_Real  goodmaxparall,
SCIP_Real  maxparall,
SCIP_Real  dircutoffdistweight,
SCIP_Real  efficacyweight,
SCIP_Real  objparalweight,
SCIP_Real  intsupportweight,
int  ncuts,
int  nforcedcuts,
int  maxselectedcuts,
int *  nselectedcuts 
)

perform a cut selection algorithm for the given array of cuts; the array is partitioned so that the selected cuts come first and the remaining ones are at the end of the array

Parameters
scipSCIP data structure
cutsarray with cuts to perform selection algorithm
randnumgenrandom number generator for tie-breaking, or NULL
goodscorefacfactor of best score among the given cuts to consider a cut good and filter with less strict settings of the maximum parallelism
badscorefacfactor of best score among the given cuts to consider a cut bad and discard it regardless of its parallelism to other cuts
goodmaxparallmaximum parallelism for good cuts
maxparallmaximum parallelism for non-good cuts
dircutoffdistweightweight of directed cutoff distance in score calculation
efficacyweightweight of efficacy (shortest cutoff distance) in score calculation
objparalweightweight of objective parallelism in score calculation
intsupportweightweight of integral support in score calculation
ncutsnumber of cuts in given array
nforcedcutsnumber of forced cuts at start of given array
maxselectedcutsmaximal number of cuts to select
nselectedcutspointer to return number of selected cuts

Definition at line 2472 of file cuts.c.

References filterWithParallelism(), Scip::lp, MAX, MIN, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPfreeBufferArray, SCIPgetBestSol(), SCIPrandomGetReal(), SCIProwGetLPEfficacy(), SCIProwGetLPSolCutoffDistance(), SCIProwGetNNonz(), SCIProwGetNumIntCols(), SCIProwGetObjParallelism(), SCIProwIsInGlobalCutpool(), SCIProwIsLocal(), selectBestCut(), Scip::set, and Scip::stat.

Referenced by doSeparation(), SCIP_DECL_SEPAEXECLP(), SCIPaggrRowGetProbvarValue(), and SCIPsepastoreApplyCuts().

◆ SCIPcalcMIR()

SCIP_RETCODE SCIPcalcMIR ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  postprocess,
SCIP_Real  boundswitch,
SCIP_Bool  usevbds,
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.

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
usevbdsshould variable bounds be used in bound transformation?
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
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 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 the returned coefficients are a valid MIR cut

Definition at line 3904 of file cuts.c.

References BMScopyMemoryArray, calcEfficacy(), cutsRoundMIR(), cutsSubstituteMIR(), cutsTransformMIR(), FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, MAXCMIRSCALE, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, NULL, 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, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMessage, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNVars(), SCIPisPositive(), SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQQ, SCIPsumepsilon(), SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.

Referenced by createCGCutCMIR(), generateClusterCuts(), SCIP_DECL_SEPAEXECLP(), and SCIPaggrRowGetProbvarValue().

◆ SCIPcutGenerationHeuristicCMIR()

SCIP_RETCODE SCIPcutGenerationHeuristicCMIR ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  postprocess,
SCIP_Real  boundswitch,
SCIP_Bool  usevbds,
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
usevbdsshould variable bounds be used in bound transformation?
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 4222 of file cuts.c.

References BMScopyMemoryArray, calcEfficacyDenseStorageQuad(), computeMIREfficacy(), cutsRoundMIR(), cutsSubstituteMIR(), cutsTransformMIR(), EPSZ, FALSE, findBestLb(), findBestUb(), SCIP_AggrRow::inds, SCIP_Row::integral, SCIP_Row::lhs, SCIP_AggrRow::local, MAX, MIN, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, NULL, postprocessCutQuad(), QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_SIZE, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_ASSIGN_Q, QUAD_EPSILON, 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, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPcalcIntegralScalar(), SCIPdebug, SCIPdebugMessage, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetLPRows(), SCIPgetNContVars(), SCIPgetNVars(), SCIPgetRowSolActivity(), SCIPgetSolVal(), SCIPgetVars(), SCIPinfinity(), SCIPisEfficacious(), SCIPisEQ(), SCIPisFeasIntegral(), SCIPisInfinity(), SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPrelDiff(), SCIPsortDownRealRealInt(), SCIPsumepsilon(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarGetVlbCoefs(), SCIPvarGetVlbConstants(), SCIPvarGetVlbVars(), SCIPvarGetVubCoefs(), SCIPvarGetVubConstants(), SCIPvarGetVubVars(), SCIP_AggrRow::slacksign, SQR, TRUE, and SCIP_AggrRow::vals.

Referenced by aggregation(), SCIPaggrRowGetProbvarValue(), 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 an MIR 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.

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 7409 of file cuts.c.

References allocSNFRelaxation(), calcEfficacy(), constructSNFRelaxation(), destroySNFRelaxation(), FALSE, generateLiftedFlowCoverCut(), getFlowCover(), SCIP_AggrRow::inds, LiftingData::lambda, 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(), SCIPaggrRowGetProbvarValue(), and separateAlternativeProofs().

◆ SCIPcalcStrongCG()

SCIP_RETCODE SCIPcalcStrongCG ( SCIP scip,
SCIP_SOL sol,
SCIP_Bool  postprocess,
SCIP_Real  boundswitch,
SCIP_Bool  usevbds,
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
usevbdsshould variable bounds be used in bound transformation?
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 8216 of file cuts.c.

References BMScopyMemoryArray, calcEfficacy(), cutsRoundStrongCG(), cutsSubstituteStrongCG(), cutsTransformStrongCG(), FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NONZERO, SCIP_AggrRow::nrows, NULL, 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, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMessage, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNVars(), SCIPisPositive(), SCIPquadprecDivDQ, SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQQ, SCIPround(), SCIPsumepsilon(), SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.

Referenced by createCGCutStrongCG(), SCIP_DECL_SEPAEXECLP(), and SCIPaggrRowGetProbvarValue().

◆ SCIPcutGetRow()

SCIP_ROW* SCIPcutGetRow ( SCIP_CUT cut)

gets the row of the cut

Parameters
cutcut

Definition at line 372 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 382 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 396 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 1043 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 1053 of file cutpool.c.

References SCIP_Cutpool::ncuts, and NULL.

Referenced by SCIPgetNDelayedPoolCuts(), and SCIPgetNPoolCuts().

◆ SCIPcutpoolGetMaxNCuts()

int 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 1063 of file cutpool.c.

References SCIP_Cutpool::maxncuts, and NULL.

Referenced by SCIPprintSeparatorStatistics().

◆ SCIPcutpoolGetTime()

SCIP_Real SCIPcutpoolGetTime ( SCIP_CUTPOOL cutpool)

gets time in seconds used for separating cuts from the pool

Parameters
cutpoolcut pool

Definition at line 1073 of file cutpool.c.

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

Referenced by SCIPprintSeparatorStatistics().

◆ SCIPcutpoolGetNCalls()

SCIP_Longint SCIPcutpoolGetNCalls ( SCIP_CUTPOOL cutpool)

get number of times, the cut pool was separated

Parameters
cutpoolcut pool

Definition at line 1083 of file cutpool.c.

References SCIP_Cutpool::ncalls, and NULL.

Referenced by SCIPprintSeparatorStatistics().

◆ SCIPcutpoolGetNCutsFound()

SCIP_Longint SCIPcutpoolGetNCutsFound ( SCIP_CUTPOOL cutpool)

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

Parameters
cutpoolcut pool

Definition at line 1093 of file cutpool.c.

References SCIP_Cutpool::ncutsfound, and NULL.

Referenced by SCIPprintSeparatorStatistics().

◆ 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 138 of file scip_cut.c.

References FALSE, Scip::lp, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIProwGetLPEfficacy(), SCIProwGetSolEfficacy(), Scip::set, Scip::stat, and TRUE.

Referenced by addCut(), computeCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), SCIP_DECL_SEPAEXECLP(), separateCuts(), and separatePoint().

◆ 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 161 of file scip_cut.c.

References FALSE, Scip::lp, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIProwIsLPEfficacious(), SCIProwIsSolEfficacious(), SCIPtreeGetCurrentDepth(), Scip::set, Scip::stat, Scip::tree, and TRUE.

Referenced by addBoundCutSepa(), addCut(), computeCut(), createCGCutCMIR(), createCGCutStrongCG(), createRow(), cut_add(), generateOddCycleCut(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_SEPAEXECLP(), 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 193 of file scip_cut.c.

References FALSE, MAX, NULL, REALABS, SCIP_Real, SCIPerrorMessage, SCIPisZero(), SCIP_Set::sepa_efficacynorm, Scip::set, SQR, and SQRT.

Referenced by calcEfficacy(), and SCIP_DECL_SEPAEXECLP().

◆ 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 251 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPsepastoreIsCutApplicable(), Scip::set, and TRUE.

Referenced by generateCutSol(), processCut(), and separatePoint().

◆ SCIPaddCut()

EXTERN SCIP_DEPRECATED SCIP_RETCODE SCIPaddCut ( SCIP scip,
SCIP_SOL sol,
SCIP_ROW cut,
SCIP_Bool  forcecut,
SCIP_Bool infeasible 
)

adds cut 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:
Deprecated:
Please use SCIPaddRow() instead, or, if the row is a global cut and it might be useful to keep it for future use, consider adding it to the global cutpool with SCIPaddPoolCut().

adds cut 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:
Deprecated:
Please use SCIPaddRow() instead, or, if the row is a global cut, add it only to the global cutpool.
Parameters
scipSCIP data structure
solprimal solution that was separated, or NULL for LP solution
cutseparated cut
forcecutshould the cut be forced to enter the LP?
infeasiblepointer to store whether cut has been detected to be infeasible for local bounds

Definition at line 271 of file scip_cut.c.

References FALSE, SCIP_CALL, SCIP_UNUSED, SCIPaddRow(), SCIPcheckStage(), and TRUE.

◆ 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 294 of file scip_cut.c.

References SCIP_Row::cols, Scip::eventfilter, Scip::eventqueue, FALSE, SCIP_Row::lhs, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, 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(), Scip::sepastore, Scip::set, Scip::stat, Scip::transprob, Scip::tree, TRUE, and SCIP_Row::vals.

Referenced by addBoundCutSepa(), addCut(), addCuts(), addLinearizationCuts(), addOrbisackCover(), addOrbisackInequality(), addRelaxation(), addSymresackInequality(), computeCut(), createCapacityRestrictionIntvars(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), createRow(), cut_add(), doSeparation(), extendToCover(), generateAndApplyBendersCuts(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateOddCycleCut(), initLP(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), LOPseparate(), processCut(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSINITLP(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_SEPAEXECLP(), SCIPaddCut(), SCIPseparateCoversOrbisack(), SCIPStpDualAscent(), SCIPStpDualAscentPcMw(), sep_flow(), sepaImplBoundCutsSOS1(), separateCons(), separateConsBinaryRepresentation(), separateCoverCutsCons(), separateCuts(), separateIndicators(), separatePerspective(), separatePoint(), 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 387 of file scip_cut.c.

References Scip::cutpool, FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPcutpoolIsCutNew(), Scip::set, and TRUE.

Referenced by addCut(), generateZerohalfCut(), and SCIP_DECL_SEPAEXECLP().

◆ 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 405 of file scip_cut.c.

References Scip::cutpool, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolAddRow(), Scip::set, Scip::stat, and TRUE.

Referenced by addCut(), addLinearizationCuts(), addPathCuts(), addSubtourCuts(), addTourCuts(), computeCut(), createAndAddTransferredCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), cut_add(), doSeparation(), extendToCover(), generateAndApplyBendersCuts(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateOddCycleCut(), newsolCliqueAddRow(), SCIP_DECL_EVENTEXEC(), SCIP_DECL_SEPAEXECLP(), and sep_flow().

◆ 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 425 of file scip_cut.c.

References Scip::cutpool, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolDelRow(), Scip::set, Scip::stat, and TRUE.

◆ 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 446 of file scip_cut.c.

References Scip::cutpool, 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 464 of file scip_cut.c.

References Scip::cutpool, 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 482 of file scip_cut.c.

References Scip::cutpool, FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), and TRUE.

◆ 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 506 of file scip_cut.c.

References FALSE, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolCreate(), Scip::set, 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 537 of file scip_cut.c.

References FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolFree(), Scip::set, 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 558 of file scip_cut.c.

References FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolAddRow(), Scip::set, Scip::stat, 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 580 of file scip_cut.c.

References FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolAddNewRow(), Scip::set, Scip::stat, 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 603 of file scip_cut.c.

References FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolDelRow(), Scip::set, Scip::stat, 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 624 of file scip_cut.c.

References Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolSeparate(), SCIPerrorMessage, SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), SCIPtreeHasCurrentNodeLP(), Scip::sepastore, Scip::set, Scip::stat, Scip::tree, and TRUE.

◆ SCIPseparateSolCutpool()

SCIP_RETCODE SCIPseparateSolCutpool ( SCIP scip,
SCIP_CUTPOOL cutpool,
SCIP_SOL sol,
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
resultpointer to store the result of the separation call

Definition at line 654 of file scip_cut.c.

References Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolSeparate(), SCIPerrorMessage, SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), SCIPtreeHasCurrentNodeLP(), Scip::sepastore, Scip::set, Scip::stat, Scip::tree, 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 684 of file scip_cut.c.

References Scip::delayedcutpool, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolAddRow(), Scip::set, Scip::stat, and TRUE.

Referenced by SCIP_DECL_SEPAEXECLP().

◆ 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 703 of file scip_cut.c.

References Scip::delayedcutpool, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolDelRow(), Scip::set, Scip::stat, 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 722 of file scip_cut.c.

References Scip::delayedcutpool, 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 738 of file scip_cut.c.

References Scip::delayedcutpool, 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 754 of file scip_cut.c.

References Scip::delayedcutpool, FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), and TRUE.

◆ 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 778 of file scip_cut.c.

References Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::messagehdlr, Scip::primal, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPseparationRound(), SCIPtreeGetCurrentDepth(), Scip::sepastore, Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.

Referenced by 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 812 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPsepastoreGetCuts(), Scip::sepastore, 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 830 of file scip_cut.c.

References FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPsepastoreGetNCuts(), Scip::sepastore, and TRUE.

Referenced by SCIP_DECL_SEPAEXECLP(), and SCIPcalcFlowCover().

◆ 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 847 of file scip_cut.c.

References Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPsepastoreClearCuts(), Scip::sepastore, Scip::set, 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 866 of file scip_cut.c.

References Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_Bool, SCIP_CALL, SCIP_EFFICIACYCHOICE_LP, SCIP_OKAY, SCIPcheckStage(), SCIPsepastoreRemoveInefficaciousCuts(), SCIPtreeGetCurrentDepth(), Scip::sepastore, Scip::set, Scip::stat, Scip::tree, and TRUE.

Referenced by SCIP_DECL_SEPAEXECLP().