common methods used to manipulate, generate, and strengthen cuts and to organize the cutpool
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 useglbbounds, SCIP_Bool *valid) int * SCIPaggrRowGetRowInds (SCIP_AGGRROW *aggrrow) SCIP_Real * SCIPaggrRowGetRowWeights (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 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 SCIPcalcKnapsackCover (SCIP *scip, SCIP_SOL *sol, SCIP_Bool allowlocal, SCIP_AGGRROW *aggrrow, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, SCIP_Real *cutefficacy, int *cutrank, SCIP_Bool *cutislocal, SCIP_Bool *success) SCIP_RETCODE SCIPcalcStrongCG (SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, 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_ROW * SCIPcutGetRow (SCIP_CUT *cut) int SCIPcutGetAge (SCIP_CUT *cut) SCIP_Real SCIPcutGetLPActivityQuot (SCIP_CUT *cut) SCIP_CUT ** SCIPcutpoolGetCuts (SCIP_CUTPOOL *cutpool) int SCIPcutpoolGetNCuts (SCIP_CUTPOOL *cutpool) SCIP_Longint SCIPcutpoolGetMaxNCuts (SCIP_CUTPOOL *cutpool) SCIP_Real SCIPcutpoolGetTime (SCIP_CUTPOOL *cutpool) SCIP_Longint SCIPcutpoolGetNCalls (SCIP_CUTPOOL *cutpool) SCIP_Longint SCIPcutpoolGetNRootCalls (SCIP_CUTPOOL *cutpool) SCIP_Longint SCIPcutpoolGetNCutsFound (SCIP_CUTPOOL *cutpool) SCIP_Longint SCIPcutpoolGetNCutsAdded (SCIP_CUTPOOL *cutpool) SCIP_Real SCIPgetCutLPSolCutoffDistance (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut) SCIP_Real SCIPgetCutEfficacy (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut) SCIP_Bool SCIPisCutEfficacious (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut) SCIP_Bool SCIPisEfficacious (SCIP *scip, SCIP_Real efficacy) SCIP_Real SCIPgetVectorEfficacyNorm (SCIP *scip, SCIP_Real *vals, int nvals) SCIP_Bool SCIPisCutApplicable (SCIP *scip, SCIP_ROW *cut) SCIP_RETCODE 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_CUTPOOL * SCIPgetGlobalCutpool (SCIP *scip) SCIP_RETCODE SCIPcreateCutpool (SCIP *scip, SCIP_CUTPOOL **cutpool, int agelimit) SCIP_RETCODE SCIPfreeCutpool (SCIP *scip, SCIP_CUTPOOL **cutpool) SCIP_RETCODE SCIPaddRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row) SCIP_RETCODE SCIPaddNewRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row) SCIP_RETCODE SCIPdelRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row) SCIP_RETCODE SCIPseparateCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_RESULT *result) SCIP_RETCODE SCIPseparateSolCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_SOL *sol, SCIP_Bool pretendroot, SCIP_RESULT *result) SCIP_RETCODE SCIPaddDelayedPoolCut (SCIP *scip, SCIP_ROW *row) SCIP_RETCODE SCIPdelDelayedPoolCut (SCIP *scip, SCIP_ROW *row) SCIP_CUT ** SCIPgetDelayedPoolCuts (SCIP *scip) int SCIPgetNDelayedPoolCuts (SCIP *scip) SCIP_CUTPOOL * SCIPgetDelayedGlobalCutpool (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) ◆ SCIPcutsTightenCoefficients()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().
Definition at line 1527 of file cuts.c.
References FALSE, MAX, NULL, QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_Bool, SCIP_CALL_ABORT, SCIP_Real, SCIPallocBufferArray, SCIPceil(), SCIPdebugMsg, SCIPfloor(), SCIPfreeBufferArray, SCIPfreeBufferArrayNull, SCIPgetNContVars(), SCIPgetNVars(), SCIPgetVars(), SCIPisFeasLE(), SCIPisGT(), SCIPisInfinity(), SCIPisLE(), SCIPisNegative(), SCIPisPositive(), SCIPquadprecProdDD, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPsortDownRealRealInt(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), and TRUE.
Referenced by computeMIRForOptimalityCut(), generateZerohalfCut(), tightenCoefficients(), and transformNonIntegralRow().
◆ SCIPaggrRowCreate()create an empty the aggregation row
create an empty aggregation row
Definition at line 1723 of file cuts.c.
References BMSclearMemoryArray, FALSE, NULL, QUAD_ARRAY_SIZE, QUAD_ASSIGN, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPallocBlockMemoryArray, and SCIPgetNVars().
Referenced by computeMIRForOptimalityCut(), conflictAnalyzeLP(), createCGCuts(), doSeparation(), generateClusterCuts(), generateGMICuts(), SCIP_DECL_SEPAEXECLP(), SCIPrunBoundHeuristic(), and setupAggregationData().
◆ SCIPaggrRowFree()free a the aggregation row
free a aggregation row
Definition at line 1755 of file cuts.c.
References NULL, QUAD_ARRAY_SIZE, SCIPfreeBlockMemory, SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, and SCIPgetNVars().
Referenced by computeMIRForOptimalityCut(), conflictAnalyzeLP(), createCGCuts(), destroyAggregationData(), doSeparation(), generateClusterCuts(), generateGMICuts(), SCIP_DECL_SEPAEXECLP(), and SCIPrunBoundHeuristic().
◆ SCIPaggrRowPrint()output aggregation row to file stream
Definition at line 1776 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()copy the aggregation row
copy a aggregation row
Definition at line 1813 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()add weighted row to the aggregation row
add weighted row to aggregation row
Definition at line 1859 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()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.
pos
.
Definition at line 1945 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()add the objective function with right-hand side rhs
and scaled by scale
to the aggregation row
Definition at line 2004 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()add weighted constraint to the aggregation row
Definition at line 2080 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() ◆ SCIPaggrRowClear()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
Definition at line 2133 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()aggregate rows using the given weights; the current content of the aggregation row, aggrrow
, gets overwritten
Definition at line 2279 of file cuts.c.
References addOneRow(), FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPaggrRowClear(), SCIPaggrRowRemoveZeros(), SCIPgetLPRowsData(), and SCIPgetVarsData().
Referenced by createCGCutCMIR(), createCGCutStrongCG(), generateClusterCuts(), generateGMICuts(), and SCIP_DECL_SEPAEXECLP().
◆ SCIPaggrRowRemoveZeros()removes all (close enough to) zero entries in the aggregation row
removes almost zero entries from the aggregation row.
Definition at line 2471 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() ◆ SCIPaggrRowGetRowWeights() ◆ SCIPaggrRowHasRowBeenAdded() ◆ SCIPaggrRowGetAbsWeightRange()gets the min and max absolute value of the weights used to aggregate the rows; must not be called for empty aggregation rows
gets the right hand side of the aggregation row
Definition at line 2581 of file cuts.c.
References NULL, and QUAD_TO_DBL.
Referenced by addLocalRows(), addRowToAggrRow(), conflictAnalyzeLP(), proofsetAddAggrrow(), SCIPconflictAnalyzeDualProof(), SCIPgetDualProof(), SCIPgetFarkasProof(), SCIPrunBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().
◆ SCIPaggrRowGetNRows() ◆ 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.
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.
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
Definition at line 3873 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(), generateGMICuts(), and SCIP_DECL_SEPAEXECLP().
◆ 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.
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.
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
Definition at line 4212 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_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(), SCIPceil(), SCIPdebug, SCIPdebugMsg, SCIPepsilon(), SCIPfloor(), 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(), 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.
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
Definition at line 7417 of file cuts.c.
References allocSNFRelaxation(), calcEfficacy(), constructSNFRelaxation(), destroySNFRelaxation(), FALSE, generateLiftedFlowCoverCut(), getFlowCover(), SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NULL, postprocessCut(), QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_AggrRow::rank, removeZeros(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMsg, SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNCuts(), SCIPgetNLPs(), SCIPgetNVars(), SCIPsumepsilon(), and SCIP_AggrRow::vals.
Referenced by aggregation(), computeMIRForOptimalityCut(), and separateAlternativeProofs().
◆ SCIPcalcKnapsackCover() SCIP_RETCODE SCIPcalcKnapsackCover ( SCIP * scip, SCIP_SOL * sol, SCIP_Bool allowlocal, SCIP_AGGRROW * aggrrow, SCIP_Real * cutcoefs, SCIP_Real * cutrhs, int * cutinds, int * cutnnz, SCIP_Real * cutefficacy, int * cutrank, SCIP_Bool * cutislocal, SCIP_Bool * success )calculates a lifted knapsack cover cut out of the weighted sum of LP rows given by an aggregation row; the aggregation row must not contain non-zero weights for modifiable rows, because these rows cannot participate in the cut. For further details we refer to:
Letchford, A. N., & Souli, G. (2019). On lifted cover inequalities: A new lifting procedure with unusual properties. Operations Research Letters, 47(2), 83-87.
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
Definition at line 8047 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().
◆ 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
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
Definition at line 8966 of file cuts.c.
References ABS, 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, SCIPceil(), SCIPdebug, SCIPdebugMsg, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetHugeValue(), SCIPgetNContVars(), SCIPgetNVars(), SCIPisPositive(), SCIPquadprecDivDQ, SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPsumepsilon(), SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.
Referenced by createCGCutStrongCG(), and SCIP_DECL_SEPAEXECLP().
◆ SCIPcutGetRow() ◆ SCIPcutGetAge()gets the age of the cut: the number of consecutive cut pool separation rounds where the cut was neither in the LP nor violated
Definition at line 392 of file cutpool.c.
References SCIP_Cut::age, and NULL.
Referenced by takeCut().
◆ SCIPcutGetLPActivityQuot() ◆ SCIPcutpoolGetCuts() ◆ SCIPcutpoolGetNCuts() ◆ SCIPcutpoolGetMaxNCuts() ◆ SCIPcutpoolGetTime() ◆ SCIPcutpoolGetNCalls() ◆ SCIPcutpoolGetNRootCalls() ◆ SCIPcutpoolGetNCutsFound() ◆ SCIPcutpoolGetNCutsAdded() ◆ SCIPgetCutLPSolCutoffDistance()returns row's cutoff distance in the direction of the given primal solution
scip
is in one of the following stages:
Definition at line 72 of file scip_cut.c.
References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIProwGetLPSolCutoffDistance(), 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
scip
is in one of the following stages:
Definition at line 94 of file scip_cut.c.
References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIProwGetLPEfficacy(), SCIProwGetSolEfficacy(), and TRUE.
Referenced by addCut(), computeCut(), computeProjectionScore(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), filterWithDynamicParallelism(), SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_NLHDLRENFO(), SCIP_DECL_SEPAEXECLP(), SCIPprocessRowprepNonlinear(), scoring(), separateCuts(), and separateDeterminant().
◆ SCIPisCutEfficacious()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
scip
is in one of the following stages:
Definition at line 117 of file scip_cut.c.
References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIProwIsLPEfficacious(), SCIProwIsSolEfficacious(), SCIPtreeGetCurrentDepth(), and TRUE.
Referenced by addBoundCutSepa(), addCut(), computeCut(), createCGCutCMIR(), createCGCutStrongCG(), createRow(), generateOddCycleCut(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_SEPAEXECLP(), SCIPprocessRowprepNonlinear(), sepaImplBoundCutsSOS1(), separateCuts(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), and sepaSubtour().
◆ SCIPisEfficacious()checks, if the given cut's efficacy is larger than the minimal cut efficacy
Definition at line 135 of file scip_cut.c.
References NULL, SCIPsetIsEfficacious(), and SCIPtreeGetCurrentDepth().
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
Definition at line 149 of file scip_cut.c.
References FALSE, MAX, NULL, REALABS, SCIP_Real, SCIPerrorMessage, SCIPisZero(), 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.
scip
is in one of the following stages:
indicates whether a cut is applicable, i.e., will modify the LP when applied
scip
is in one of the following stages:
Definition at line 207 of file scip_cut.c.
References FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPsepastoreIsCutApplicable(), and TRUE.
Referenced by addCut(), and SCIPprocessRowprepNonlinear().
◆ SCIPaddCut()adds cut to separation storage
scip
is in one of the following stages:
adds cut to separation storage
scip
is in one of the following stages:
Definition at line 227 of file scip_cut.c.
References FALSE, SCIP_CALL, SCIP_UNUSED, SCIPaddRow(), SCIPcheckStage(), and TRUE.
◆ SCIPaddRow()adds row to separation storage
scip
is in one of the following stages:
Definition at line 250 of file scip_cut.c.
References SCIP_Row::cols, FALSE, SCIP_Row::lhs, NULL, SCIP_Row::rhs, SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_OKAY, SCIP_Real, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPanalyzeConflict(), SCIPcheckStage(), SCIPcolGetVar(), SCIPgetDepth(), SCIPinitConflictAnalysis(), SCIPisConflictAnalysisApplicable(), SCIPisGT(), SCIPisInfinity(), SCIPisLT(), SCIPisZero(), SCIPprobAllColsInLP(), SCIProwGetMaxActivity(), SCIProwGetMinActivity(), SCIProwGetNNonz(), SCIPsepastoreAddCut(), SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), TRUE, and SCIP_Row::vals.
Referenced by addBoundCutSepa(), addCut(), addCuts(), addOrbisackCover(), addOrbisackInequality(), addRelaxation(), addSymresackInequality(), computeCut(), createCapacityRestrictionIntvars(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), createRow(), doSeparation(), extendToCover(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateOddCycleCut(), initLP(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), LOPseparate(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSINITLP(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_NLHDLRENFO(), SCIP_DECL_NLHDLRINITSEPA(), SCIP_DECL_SEPAEXECLP(), SCIPaddCut(), SCIPgenerateAndApplyBendersOptCut(), SCIPprocessRowprepNonlinear(), sepaImplBoundCutsSOS1(), separateCons(), separateConsBinaryRepresentation(), separateCoverCutsCons(), separateCoversOrbisack(), separateCuts(), separateDeterminant(), separateIndicators(), separateMcCormickImplicit(), separatePerspective(), separateRltCuts(), separateSCIs(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), and sepaSubtour().
◆ SCIPisCutNew() ◆ SCIPaddPoolCut()if not already existing, adds row to global cut pool
scip
is in one of the following stages:
Definition at line 361 of file scip_cut.c.
References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolAddRow(), and TRUE.
Referenced by addCut(), addCutPool(), addCuts(), addPathCuts(), addSubtourCuts(), addTourCuts(), computeCut(), createAndAddTransferredCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), doSeparation(), extendToCover(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateOddCycleCut(), newsolCliqueAddRow(), SCIP_DECL_NLHDLRSOLLINEARIZE(), SCIP_DECL_SEPAEXECLP(), SCIPgenerateAndApplyBendersOptCut(), and separateRltCuts().
◆ SCIPdelPoolCut() ◆ SCIPgetPoolCuts() ◆ SCIPgetNPoolCuts() int SCIPgetNPoolCuts ( SCIP * scip ) ◆ SCIPgetGlobalCutpool() ◆ SCIPcreateCutpool() ◆ SCIPfreeCutpool() ◆ SCIPaddRowCutpool() ◆ SCIPaddNewRowCutpool() ◆ SCIPdelRowCutpool() ◆ SCIPseparateCutpool()separates cuts from a cut pool
scip
is in one of the following stages:
Definition at line 580 of file scip_cut.c.
References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolSeparate(), SCIPerrorMessage, SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), SCIPtreeHasCurrentNodeLP(), and TRUE.
◆ SCIPseparateSolCutpool()separates cuts w.r.t. given solution from a cut pool
scip
is in one of the following stages:
Definition at line 610 of file scip_cut.c.
References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPcutpoolSeparate(), SCIPerrorMessage, SCIPtreeGetCurrentNode(), SCIPtreeHasCurrentNodeLP(), and TRUE.
◆ SCIPaddDelayedPoolCut() ◆ SCIPdelDelayedPoolCut() ◆ SCIPgetDelayedPoolCuts() ◆ SCIPgetNDelayedPoolCuts() int SCIPgetNDelayedPoolCuts ( SCIP * scip ) ◆ SCIPgetDelayedGlobalCutpool() ◆ SCIPseparateSol()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
scip
is in one of the following stages:
Definition at line 735 of file scip_cut.c.
References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPseparationRound(), SCIPtreeGetCurrentDepth(), and TRUE.
Referenced by applySeparation(), and SCIP_DECL_SEPAEXECLP().
◆ SCIPgetCuts() ◆ SCIPgetNCuts() int SCIPgetNCuts ( SCIP * scip ) ◆ SCIPclearCuts() ◆ SCIPremoveInefficaciousCuts()RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4