Detailed Description
common methods used to manipulate, generate, and strengthen cuts and to organize the cutpool
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
-
scip SCIP data structure cutislocal is the cut local? cutcoefs array of the non-zero coefficients in the cut cutrhs the right hand side of the cut cutinds array of the problem indices of variables with a non-zero coefficient in the cut cutnnz the number of non-zeros in the cut nchgcoefs number of changed coefficients
Definition at line 1535 of file cuts.c.
References FALSE, MAX, NULL, QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_Bool, SCIP_CALL_ABORT, SCIP_Real, SCIPallocBufferArray, SCIPdebugMsg, 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 the aggregation row
create an empty aggregation row
- Parameters
-
scip SCIP data structure aggrrow pointer to return aggregation row
Definition at line 1731 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(), SCIP_DECL_SEPAEXECLP(), SCIPrunBoundHeuristic(), and setupAggregationData().
◆ SCIPaggrRowFree()
void SCIPaggrRowFree | ( | SCIP * | scip, |
SCIP_AGGRROW ** | aggrrow | ||
) |
free a the aggregation row
free a aggregation row
- Parameters
-
scip SCIP data structure aggrrow pointer to aggregation row that should be freed
Definition at line 1763 of file cuts.c.
References NULL, QUAD_ARRAY_SIZE, SCIPfreeBlockMemory, SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, and SCIPgetNVars().
Referenced by computeMIRForOptimalityCut(), conflictAnalyzeLP(), createCGCuts(), doSeparation(), generateClusterCuts(), SCIP_DECL_SEPAEXECLP(), SCIPrunBoundHeuristic(), and setupAggregationData().
◆ SCIPaggrRowPrint()
void SCIPaggrRowPrint | ( | SCIP * | scip, |
SCIP_AGGRROW * | aggrrow, | ||
FILE * | file | ||
) |
output aggregation row to file stream
- Parameters
-
scip SCIP data structure aggrrow pointer to return aggregation row file output file (or NULL for standard output)
Definition at line 1784 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
-
scip SCIP data structure aggrrow pointer to return aggregation row source source aggregation row
Definition at line 1821 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
-
scip SCIP data structure aggrrow aggregation row row row to add to aggregation row weight scale for adding given row to aggregation row sidetype specify row side type (-1 = lhs, 0 = automatic, 1 = rhs)
Definition at line 1867 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().
◆ 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
-
scip SCIP data structure aggrrow the aggregation row var variable that should be removed pos position of the variable in the aggregation row valid pointer to return whether the aggregation row is still valid
Definition at line 1953 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
-
scip SCIP data structure aggrrow the aggregation row rhs right-hand side of the artificial row scale scalar
Definition at line 2012 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().
◆ 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
-
scip SCIP data structure aggrrow the aggregation row inds variable problem indices in constraint to add to the aggregation row vals values of constraint to add to the aggregation row len length of constraint to add to the aggregation row rhs right hand side of constraint to add to the aggregation row weight (positive) scale for adding given constraint to the aggregation row rank rank to use for given constraint local is constraint only valid locally
Definition at line 2088 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().
◆ 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
-
scip SCIP data structure aggrrow the aggregation row
Definition at line 2166 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
-
aggrrow the aggregation row
Definition at line 2141 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().
◆ 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
-
scip SCIP data structure aggrrow the aggregation row weights row weights in row summation rowinds array to store indices of non-zero entries of the weights array, or NULL nrowinds number of non-zero entries in weights array, -1 if rowinds is NULL sidetypebasis choose sidetypes of row (lhs/rhs) based on basis information? allowlocal should local rows allowed to be used? negslack should negative slack variables allowed to be used? (0: no, 1: only for integral rows, 2: yes) maxaggrlen maximal length of aggregation row valid is the aggregation valid
Definition at line 2287 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 | useglbbounds, | ||
SCIP_Bool * | valid | ||
) |
removes all (close enough to) zero entries in the aggregation row
removes almost zero entries from the aggregation row.
- Parameters
-
scip SCIP datastructure aggrrow the aggregation row useglbbounds consider global bound although the cut is local? valid pointer to return whether the aggregation row is still valid
Definition at line 2479 of file cuts.c.
References FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NULL, QUAD, removeZerosQuad(), 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
-
aggrrow the aggregation row
Definition at line 2504 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
-
aggrrow the aggregation row
Definition at line 2515 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
-
aggrrow the aggregation row row row for which it is checked whether it has been added to the aggregation
Definition at line 2526 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
-
aggrrow the aggregation row minabsrowweight pointer to store smallest absolute value of weights used for aggregating rows maxabsrowweight pointer 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
-
aggrrow aggregation row
Definition at line 2549 of file cuts.c.
References SCIP_AggrRow::inds, and NULL.
Referenced by aggregateNextRow(), conflictAnalyzeLP(), proofsetAddAggrrow(), SCIPaggrRowGetMinActivity(), SCIPrunBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().
◆ SCIPaggrRowGetNNz()
int SCIPaggrRowGetNNz | ( | SCIP_AGGRROW * | aggrrow | ) |
gets the number of non-zeros in the aggregation row
- Parameters
-
aggrrow aggregation row
Definition at line 2559 of file cuts.c.
References SCIP_AggrRow::nnz, and NULL.
Referenced by aggregateNextRow(), aggregation(), conflictAnalyzeLP(), proofsetAddAggrrow(), SCIPaggrRowGetMinActivity(), SCIPconflictAnalyzeDualProof(), SCIPrunBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().
◆ SCIPaggrRowGetValue()
|
static |
gets the non-zero value for the given non-zero index
- Parameters
-
aggrrow the aggregation row i non-zero index; must be between 0 and SCIPaggrRowGetNNz(aggrrow) - 1
Definition at line 237 of file cuts.h.
References SCIP_AggrRow::inds, INLINE, QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Real, and SCIP_AggrRow::vals.
◆ SCIPaggrRowGetProbvarValue()
|
static |
gets the non-zero value for the given problem index of a variable
- Parameters
-
aggrrow the aggregation row probindex problem index of variable; must be between 0 and SCIPgetNVars(scip) - 1
Definition at line 251 of file cuts.h.
References QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Bool, SCIP_Real, SCIPaggrRowGetNRows(), SCIPaggrRowGetRank(), SCIPaggrRowGetRhs(), SCIPaggrRowIsLocal(), SCIPcalcFlowCover(), SCIPcalcKnapsackCover(), SCIPcalcMIR(), SCIPcalcStrongCG(), SCIPcutGenerationHeuristicCMIR(), 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
-
aggrrow aggregation row
Definition at line 2569 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
-
aggrrow aggregation row
Definition at line 2579 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
-
aggrrow aggregation row
Definition at line 2589 of file cuts.c.
References NULL, and QUAD_TO_DBL.
Referenced by addLocalRows(), addRowToAggrRow(), conflictAnalyzeLP(), proofsetAddAggrrow(), SCIPaggrRowGetProbvarValue(), SCIPconflictAnalyzeDualProof(), SCIPgetDualProof(), SCIPgetFarkasProof(), SCIPrunBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().
◆ SCIPaggrRowGetNRows()
int SCIPaggrRowGetNRows | ( | SCIP_AGGRROW * | aggrrow | ) |
gets the number of row aggregations
get number of aggregated rows
- Parameters
-
aggrrow the aggregation row
Definition at line 2494 of file cuts.c.
References SCIP_AggrRow::nrows, and NULL.
Referenced by aggregation(), and SCIPaggrRowGetProbvarValue().
◆ 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
-
scip SCIP data structure sol the solution that should be separated, or NULL for LP solution postprocess apply a post-processing step to the resulting cut? boundswitch fraction of domain up to which lower bound is used in transformation usevbds should variable bounds be used in bound transformation? allowlocal should local information allowed to be used, resulting in a local cut? fixintegralrhs should complementation tried to be adjusted such that rhs gets fractional? boundsfortrans bounds 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 boundtypesfortrans type of bounds that should be used for transformed variables; NULL for using closest bound for all variables minfrac minimal fractionality of rhs to produce MIR cut for maxfrac maximal fractionality of rhs to produce MIR cut for scale additional scaling factor multiplied to the aggrrow; must be positive aggrrow aggrrow to compute MIR cut for cutcoefs array to store the non-zero coefficients in the cut if its efficacy improves cutefficacy cutrhs pointer to store the right hand side of the cut if its efficacy improves cutefficacy cutinds array to store the indices of non-zero coefficients in the cut if its efficacy improves cutefficacy cutnnz pointer to store the number of non-zeros in the cut if its efficacy improves cutefficacy cutefficacy pointer to store efficacy of cut, or NULL cutrank pointer to return rank of generated cut or NULL if it improves cutefficacy cutislocal pointer to store whether the generated cut is only valid locally if it improves cutefficacy success pointer to store whether the returned coefficients are a valid MIR cut and it improves cutefficacy
Definition at line 3879 of file cuts.c.
References BMScopyMemoryArray, calcEfficacyDenseStorageQuad(), 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, SCIPdebugMsg, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNVars(), SCIPisEfficacious(), SCIPisPositive(), SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQQ, SCIPsumepsilon(), SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.
Referenced by computeMIRForOptimalityCut(), 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
-
scip SCIP data structure sol the solution that should be separated, or NULL for LP solution postprocess apply a post-processing step to the resulting cut? boundswitch fraction of domain up to which lower bound is used in transformation usevbds should variable bounds be used in bound transformation? allowlocal should local information allowed to be used, resulting in a local cut? maxtestdelta maximum number of deltas to test boundsfortrans bounds 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 boundtypesfortrans type of bounds that should be used for transformed variables; NULL for using closest bound for all variables minfrac minimal fractionality of rhs to produce MIR cut for maxfrac maximal fractionality of rhs to produce MIR cut for aggrrow aggrrow to compute MIR cut for cutcoefs array to store the non-zero coefficients in the cut cutrhs pointer to store the right hand side of the cut cutinds array to store the problem indices of variables with a non-zero coefficient in the cut cutnnz pointer to store the number of non-zeros in the cut cutefficacy pointer 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 cutrank pointer to return rank of generated cut (or NULL) cutislocal pointer to store whether the generated cut is only valid locally success pointer to store whether a valid and efficacious cut was returned
Definition at line 4218 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, SCIPdebugMsg, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetLPRows(), SCIPgetNContVars(), SCIPgetNVars(), SCIPgetRowSolActivity(), SCIPgetSolVal(), SCIPgetVars(), SCIPinfinity(), SCIPisEfficacious(), SCIPisEQ(), SCIPisFeasIntegral(), SCIPisInfinity(), SCIPquadprecEpsFloorQ, SCIPquadprecProdDD, SCIPquadprecProdQD, SCIPquadprecSumDD, 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 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
-
scip SCIP data structure sol the solution that should be separated, or NULL for LP solution postprocess apply a post-processing step to the resulting cut? boundswitch fraction of domain up to which lower bound is used in transformation allowlocal should local information allowed to be used, resulting in a local cut? aggrrow the aggregation row to compute flow cover cut for cutcoefs array to store the non-zero coefficients in the cut cutrhs pointer to store the right hand side of the cut cutinds array to store the problem indices of variables with a non-zero coefficient in the cut cutnnz pointer to store the number of non-zeros in the cut cutefficacy pointer to store the efficacy of the cut, or NULL cutrank pointer to return rank of generated cut cutislocal pointer to store whether the generated cut is only valid locally success pointer to store whether a valid cut was returned
Definition at line 7428 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(), computeMIRForOptimalityCut(), SCIPaggrRowGetProbvarValue(), 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
-
scip SCIP data structure sol the solution that should be separated, or NULL for LP solution allowlocal should local information allowed to be used, resulting in a local cut? aggrrow the aggregation row to compute flow cover cut for cutcoefs array to store the non-zero coefficients in the cut cutrhs pointer to store the right hand side of the cut cutinds array to store the problem indices of variables with a non-zero coefficient in the cut cutnnz pointer to store the number of non-zeros in the cut cutefficacy pointer to store the efficacy of the cut, or NULL cutrank pointer to return rank of generated cut cutislocal pointer to store whether the generated cut is only valid locally success pointer to store whether a valid cut was returned
Definition at line 8058 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(), SCIPquadprecSumQD, SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.
Referenced by aggregation(), and SCIPaggrRowGetProbvarValue().
◆ 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
-
scip SCIP data structure sol the solution that should be separated, or NULL for LP solution postprocess apply a post-processing step to the resulting cut? boundswitch fraction of domain up to which lower bound is used in transformation usevbds should variable bounds be used in bound transformation? allowlocal should local information allowed to be used, resulting in a local cut? minfrac minimal fractionality of rhs to produce strong CG cut for maxfrac maximal fractionality of rhs to produce strong CG cut for scale additional scaling factor multiplied to all rows aggrrow the aggregation row to compute a strong CG cut for cutcoefs array to store the non-zero coefficients in the cut cutrhs pointer to store the right hand side of the cut cutinds array to store the problem indices of variables with a non-zero coefficient in the cut cutnnz pointer to store the number of non-zeros in the cut cutefficacy pointer to store the efficacy of the cut, or NULL cutrank pointer to return rank of generated cut cutislocal pointer to store whether the generated cut is only valid locally success pointer to store whether a valid cut was returned
Definition at line 8975 of file cuts.c.
References BMScopyMemoryArray, calcEfficacy(), cutsRoundStrongCG(), cutsSubstituteStrongCG(), cutsTransformStrongCG(), FALSE, SCIP_AggrRow::inds, SCIP_Row::integral, SCIP_AggrRow::local, Scip::lp, 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_Lp::rows, SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPceil(), SCIPdebug, SCIPdebugMsg, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNVars(), SCIPisPositive(), SCIPquadprecDivDQ, SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPsumepsilon(), SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.
Referenced by createCGCutStrongCG(), SCIP_DECL_SEPAEXECLP(), and SCIPaggrRowGetProbvarValue().
◆ SCIPcutGetRow()
gets the row of the cut
- Parameters
-
cut cut
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
-
cut cut
Definition at line 392 of file cutpool.c.
References SCIP_Cut::age, and NULL.
Referenced by takeCut().
◆ SCIPcutGetLPActivityQuot()
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
-
cut cut
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
-
cutpool cut pool
Definition at line 1075 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
-
cutpool cut pool
Definition at line 1085 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
-
cutpool cut pool
Definition at line 1095 of file cutpool.c.
References SCIP_Cutpool::maxncuts, and NULL.
Referenced by SCIPprintSeparatorStatistics(), and SCIPsolve().
◆ SCIPcutpoolGetTime()
SCIP_Real SCIPcutpoolGetTime | ( | SCIP_CUTPOOL * | cutpool | ) |
gets time in seconds used for separating cuts from the pool
- Parameters
-
cutpool cut pool
Definition at line 1105 of file cutpool.c.
References NULL, SCIP_Cutpool::poolclock, and SCIPclockGetTime().
Referenced by SCIPprintSeparatorStatistics(), and SCIPsolve().
◆ SCIPcutpoolGetNCalls()
SCIP_Longint SCIPcutpoolGetNCalls | ( | SCIP_CUTPOOL * | cutpool | ) |
get number of times the cut pool was separated
- Parameters
-
cutpool cut pool
Definition at line 1115 of file cutpool.c.
References SCIP_Cutpool::ncalls, and NULL.
Referenced by SCIPprintSeparatorStatistics(), and SCIPsolve().
◆ SCIPcutpoolGetNRootCalls()
SCIP_Longint SCIPcutpoolGetNRootCalls | ( | SCIP_CUTPOOL * | cutpool | ) |
get number of times the cut pool was separated at the root
- Parameters
-
cutpool cut pool
Definition at line 1125 of file cutpool.c.
References SCIP_Cutpool::nrootcalls, and NULL.
Referenced by 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
-
cutpool cut pool
Definition at line 1135 of file cutpool.c.
References SCIP_Cutpool::ncutsfound, and NULL.
Referenced by 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
-
cutpool cut pool
Definition at line 1145 of file cutpool.c.
References SCIP_Cutpool::ncutsadded, and NULL.
Referenced by SCIPprintSeparatorStatistics(), and SCIPsolve().
◆ SCIPgetCutLPSolCutoffDistance()
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
-
scip SCIP data structure sol solution to compute direction for cutoff distance; must not be NULL cut separated cut
Definition at line 72 of file scip_cut.c.
References FALSE, Scip::lp, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIProwGetLPSolCutoffDistance(), Scip::set, Scip::stat, and TRUE.
Referenced by scoring().
◆ SCIPgetCutEfficacy()
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
-
scip SCIP data structure sol primal CIP solution, or NULL for current LP solution cut separated cut
Definition at line 94 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(), computeProjectionScore(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), filterWithDynamicParallelism(), SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_NLHDLRENFO(), SCIP_DECL_SEPAEXECLP(), SCIPprocessRowprepNonlinear(), scoring(), separateCuts(), and separateDeterminant().
◆ SCIPisCutEfficacious()
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
-
scip SCIP data structure sol primal CIP solution, or NULL for current LP solution cut separated cut
Definition at line 117 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(), generateOddCycleCut(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_SEPAEXECLP(), SCIPprocessRowprepNonlinear(), sepaImplBoundCutsSOS1(), separateCuts(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), and sepaSubtour().
◆ SCIPisEfficacious()
checks, if the given cut's efficacy is larger than the minimal cut efficacy
- Returns
- TRUE if the given cut's efficacy is larger than the minimal cut efficacy, otherwise FALSE
- Parameters
-
scip SCIP data structure efficacy efficacy of the cut
Definition at line 135 of file scip_cut.c.
References NULL, SCIPsetIsEfficacious(), SCIPtreeGetCurrentDepth(), Scip::set, and Scip::tree.
Referenced by addCut(), computeMIRForOptimalityCut(), constructCutRow(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), extendToCover(), generateClusterCuts(), generateZerohalfCut(), LOPseparate(), SCIP_DECL_SEPAEXECLP(), SCIPcalcMIR(), SCIPcutGenerationHeuristicCMIR(), separateCons(), separateCoversOrbisack(), separateCuts(), separateIndicators(), separateOrbisack(), separateOrbisackCovers(), separatePerspective(), separateSCIs(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), separateSymresackCovers(), solCutIsViolated(), and TCLIQUE_NEWSOL().
◆ SCIPgetVectorEfficacyNorm()
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
-
scip SCIP data structure vals array of values nvals number of values
Definition at line 149 of file scip_cut.c.
References FALSE, MAX, NULL, REALABS, SCIP_Real, SCIPerrorMessage, SCIPisZero(), SCIP_Set::sepa_efficacynorm, Scip::set, and SQR.
Referenced by calcEfficacy().
◆ SCIPisCutApplicable()
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
-
scip SCIP data structure cut separated cut
Definition at line 207 of file scip_cut.c.
References FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPsepastoreIsCutApplicable(), Scip::set, and TRUE.
Referenced by addCut(), and SCIPprocessRowprepNonlinear().
◆ SCIPaddCut()
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
-
scip SCIP data structure sol primal solution that was separated, or NULL for LP solution cut separated cut forcecut should the cut be forced to enter the LP? infeasible pointer to store whether cut has been detected to be infeasible for local bounds
Definition at line 227 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
-
scip SCIP data structure row row forcecut should the row be forced to enter the LP? infeasible pointer to store whether row has been detected to be infeasible for local bounds
Definition at line 250 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(), 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(), SCIPaddCut(), SCIPgenerateAndApplyBendersOptCut(), SCIPprocessRowprepNonlinear(), sepaImplBoundCutsSOS1(), separateCons(), separateConsBinaryRepresentation(), separateCoverCutsCons(), separateCoversOrbisack(), separateCuts(), separateDeterminant(), separateIndicators(), separateMcCormickImplicit(), separatePerspective(), separateRltCuts(), separateSCIs(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), and sepaSubtour().
◆ SCIPisCutNew()
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
-
scip SCIP data structure row cutting plane to add
Definition at line 343 of file scip_cut.c.
References Scip::cutpool, FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPcutpoolIsCutNew(), Scip::set, and TRUE.
Referenced by addCut(), addCuts(), and generateZerohalfCut().
◆ 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
-
scip SCIP data structure row row to remove
Definition at line 361 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(), addCutPool(), addCuts(), addPathCuts(), addSubtourCuts(), addTourCuts(), computeCut(), createAndAddTransferredCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), doSeparation(), extendToCover(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateOddCycleCut(), newsolCliqueAddRow(), SCIP_DECL_NLHDLRSOLLINEARIZE(), SCIP_DECL_SEPAEXECLP(), SCIPgenerateAndApplyBendersOptCut(), 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
-
scip SCIP data structure row cutting plane to add
Definition at line 381 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()
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
-
scip SCIP data structure
Definition at line 402 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
-
scip SCIP data structure
Definition at line 420 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
-
scip SCIP data structure
Definition at line 438 of file scip_cut.c.
References Scip::cutpool, 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
-
scip SCIP data structure cutpool pointer to store cut pool agelimit maximum age a cut can reach before it is deleted from the pool
Definition at line 462 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
-
scip SCIP data structure cutpool pointer to store cut pool
Definition at line 493 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
-
scip SCIP data structure cutpool cut pool row cutting plane to add
Definition at line 514 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
-
scip SCIP data structure cutpool cut pool row cutting plane to add
Definition at line 536 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
-
scip SCIP data structure cutpool cut pool row row to remove
Definition at line 559 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
-
scip SCIP data structure cutpool cut pool result pointer to store the result of the separation call
Definition at line 580 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_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
-
scip SCIP data structure cutpool cut pool sol solution to be separated pretendroot should the cut separators be called as if we are at the root node? result pointer to store the result of the separation call
Definition at line 610 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, 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
-
scip SCIP data structure row cutting plane to add
Definition at line 641 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.
◆ 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
-
scip SCIP data structure row cutting plane to add
Definition at line 660 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()
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
-
scip SCIP data structure
Definition at line 679 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
-
scip SCIP data structure
Definition at line 695 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
-
scip SCIP data structure
Definition at line 711 of file scip_cut.c.
References Scip::delayedcutpool, 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
-
scip SCIP data structure sol primal solution that should be separated, or NULL for LP solution pretendroot should the cut separators be called as if we are at the root node? allowlocal should the separator be asked to separate local cuts onlydelayed should only separators be called that were delayed in the previous round? delayed pointer to store whether a separator was delayed cutoff pointer to store whether the node can be cut off
Definition at line 735 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()
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
-
scip SCIP data structure
Definition at line 769 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
-
scip SCIP data structure
Definition at line 787 of file scip_cut.c.
References FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPsepastoreGetNCuts(), Scip::sepastore, and TRUE.
Referenced by 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
-
scip SCIP data structure
Definition at line 804 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
-
scip SCIP data structure
Definition at line 823 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().