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 | ||
) |
perform activity based coefficient tigthening on the given cut; returns TRUE if the cut was detected to be redundant due to acitvity bounds
perform activity based coefficient tightening on the given cut; returns TRUE if the cut was detected to be redundant due to activity bounds
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 1334 of file cuts.c.
References FALSE, MAX, QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_Bool, SCIP_CALL_ABORT, SCIP_Real, SCIPallocBufferArray, SCIPdebugPrintf, SCIPfreeBufferArray, SCIPfreeBufferArrayNull, SCIPgetNContVars(), SCIPgetNVars(), SCIPgetVars(), SCIPisFeasLE(), SCIPisGT(), SCIPisInfinity(), SCIPisLE(), SCIPisNegative(), SCIPisPositive(), SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPsortDownRealRealInt(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), and TRUE.
Referenced by generateZerohalfCut(), tightenCoefficients(), and transformNonIntegralRow().
SCIP_RETCODE SCIPaggrRowCreate | ( | SCIP * | scip, |
SCIP_AGGRROW ** | aggrrow | ||
) |
create an empty the aggregation row
create an empty aggregation row
scip | SCIP data structure |
aggrrow | pointer to return aggregation row |
Definition at line 1535 of file cuts.c.
References BMSclearMemoryArray, FALSE, QUAD_ARRAY_SIZE, QUAD_ASSIGN, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPallocBlockMemoryArray, and SCIPgetNVars().
Referenced by conflictAnalyzeLP(), createCGCuts(), generateClusterCuts(), runBoundHeuristic(), SCIP_DECL_SEPAEXECLP(), and setupAggregationData().
void SCIPaggrRowFree | ( | SCIP * | scip, |
SCIP_AGGRROW ** | aggrrow | ||
) |
free a the aggregation row
free a aggregation row
scip | SCIP data structure |
aggrrow | pointer to aggregation row that should be freed |
Definition at line 1567 of file cuts.c.
References QUAD_ARRAY_SIZE, SCIPfreeBlockMemory, SCIPfreeBlockMemoryArray, SCIPfreeBlockMemoryArrayNull, and SCIPgetNVars().
Referenced by conflictAnalyzeLP(), createCGCuts(), generateClusterCuts(), runBoundHeuristic(), SCIP_DECL_SEPAEXECLP(), and setupAggregationData().
void SCIPaggrRowPrint | ( | SCIP * | scip, |
SCIP_AGGRROW * | aggrrow, | ||
FILE * | file | ||
) |
output aggregation row to file stream
scip | SCIP data structure |
aggrrow | pointer to return aggregation row |
file | output file (or NULL for standard output) |
Definition at line 1587 of file cuts.c.
References SCIP_AggrRow::inds, SCIP_AggrRow::nnz, QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Real, SCIPgetMessagehdlr(), SCIPgetVars(), SCIPmessageFPrintInfo(), SCIPvarGetName(), SCIPvarGetProbindex(), and SCIP_AggrRow::vals.
SCIP_RETCODE SCIPaggrRowCopy | ( | SCIP * | scip, |
SCIP_AGGRROW ** | aggrrow, | ||
SCIP_AGGRROW * | source | ||
) |
copy the aggregation row
copy a aggregation row
scip | SCIP data structure |
aggrrow | pointer to return aggregation row |
source | source aggregation row |
Definition at line 1624 of file cuts.c.
References SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, 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.
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
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 1670 of file cuts.c.
References SCIP_Row::constant, FALSE, SCIP_AggrRow::inds, SCIP_Row::integral, SCIP_Row::lhs, SCIP_AggrRow::local, SCIP_Row::local, SCIP_Row::lppos, MAX, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, SCIP_AggrRow::rank, SCIP_Row::rank, SCIP_Row::rhs, SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowssize, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPcalcMemGrowSize(), SCIPceil(), SCIPfloor(), SCIPisInfinity(), SCIPquadprecSumQD, SCIPreallocBlockMemoryArray, SCIProwGetLPPos(), SCIP_AggrRow::slacksign, TRUE, SCIP_AggrRow::vals, and varVecAddScaledRowCoefsQuad().
Referenced by aggregateNextRow(), aggregation(), getDualProof(), and getFarkasProof().
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.
pos
. 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 1757 of file cuts.c.
References FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, 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.
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
scip | SCIP data structure |
aggrrow | the aggregation row |
rhs | right-hand side of the artificial row |
scale | scalar |
Definition at line 1814 of file cuts.c.
References SCIP_AggrRow::inds, SCIP_AggrRow::nnz, NONZERO, QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_HI, SCIP_OKAY, SCIP_Real, SCIPgetNVars(), SCIPgetVars(), SCIPisZero(), SCIPquadprecSumQD, SCIPvarGetObj(), SCIPvarGetProbindex(), and SCIP_AggrRow::vals.
Referenced by getDualProof().
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
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 1885 of file cuts.c.
References SCIP_AggrRow::inds, SCIP_AggrRow::local, MAX, SCIP_AggrRow::nnz, NONZERO, QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_STORE, QUAD_HI, SCIP_AggrRow::rank, REALABS, SCIP_OKAY, SCIP_Real, SCIPisInfinity(), SCIPquadprecSumQD, and SCIP_AggrRow::vals.
SCIP_Real SCIPaggrRowCalcEfficacyNorm | ( | SCIP * | scip, |
SCIP_AGGRROW * | aggrrow | ||
) |
calculates the efficacy norm of the given aggregation row, which depends on the "separating/efficacynorm" parameter
scip | SCIP data structure |
aggrrow | the aggregation row |
Definition at line 1960 of file cuts.c.
References calcEfficacyNormQuad(), SCIP_AggrRow::inds, SCIP_AggrRow::nnz, and SCIP_AggrRow::vals.
Referenced by separateAlternativeProofs().
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
aggrrow | the aggregation row |
Definition at line 1935 of file cuts.c.
References FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, QUAD, QUAD_ARRAY_STORE, QUAD_ASSIGN, SCIP_AggrRow::rank, SCIP_Real, and SCIP_AggrRow::vals.
Referenced by aggregation(), getDualProof(), and SCIPaggrRowSumRows().
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
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 2087 of file cuts.c.
References addOneRow(), FALSE, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPaggrRowClear(), SCIPaggrRowRemoveZeros(), SCIPgetLPRowsData(), and SCIPgetVarsData().
Referenced by createCGCutCMIR(), createCGCutStrongCG(), generateClusterCuts(), and SCIP_DECL_SEPAEXECLP().
void SCIPaggrRowRemoveZeros | ( | SCIP * | scip, |
SCIP_AGGRROW * | aggrrow, | ||
SCIP_Bool * | valid | ||
) |
removes all (close enough to) zero entries in the aggregation row
removes almost zero entries from the aggregation row.
scip | SCIP datastructure |
aggrrow | the aggregation row |
valid | pointer to return whether the aggregation row is still valid |
Definition at line 2266 of file cuts.c.
References SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, QUAD, removeZerosQuad(), SCIPsumepsilon(), and SCIP_AggrRow::vals.
Referenced by aggregateNextRow(), getDualProof(), getFarkasProof(), and SCIPaggrRowSumRows().
int* SCIPaggrRowGetRowInds | ( | SCIP_AGGRROW * | aggrrow | ) |
get array with lp positions of aggregated rows
get array with lp positions of rows used in aggregation
aggrrow | the aggregation row |
Definition at line 2288 of file cuts.c.
References SCIP_AggrRow::nrows, and SCIP_AggrRow::rowsinds.
Referenced by aggregation().
SCIP_Real* SCIPaggrRowGetRowWeights | ( | SCIP_AGGRROW * | aggrrow | ) |
get array with weights of aggregated rows
aggrrow | the aggregation row |
Definition at line 2299 of file cuts.c.
References SCIP_AggrRow::nrows, and SCIP_AggrRow::rowweights.
SCIP_Bool SCIPaggrRowHasRowBeenAdded | ( | SCIP_AGGRROW * | aggrrow, |
SCIP_ROW * | row | ||
) |
checks whether a given row has been added to the aggregation row
aggrrow | the aggregation row |
row | row for which it is checked whether it has been added to the aggregation |
Definition at line 2310 of file cuts.c.
References FALSE, SCIP_AggrRow::nrows, SCIP_AggrRow::rowsinds, SCIProwGetLPPos(), and TRUE.
Referenced by aggregateNextRow().
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
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 |
int* SCIPaggrRowGetInds | ( | SCIP_AGGRROW * | aggrrow | ) |
gets the array of corresponding variable problem indices for each non-zero in the aggregation row
aggrrow | aggregation row |
Definition at line 2331 of file cuts.c.
References SCIP_AggrRow::inds.
Referenced by aggregateNextRow(), aggrRowGetMinActivity(), conflictAnalyzeLP(), proofsetAddAggrrow(), runBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().
int SCIPaggrRowGetNNz | ( | SCIP_AGGRROW * | aggrrow | ) |
gets the number of non-zeros in the aggregation row
aggrrow | aggregation row |
Definition at line 2341 of file cuts.c.
References SCIP_AggrRow::nnz.
Referenced by aggregateNextRow(), aggregation(), aggrRowGetMinActivity(), conflictAnalyzeDualProof(), conflictAnalyzeLP(), proofsetAddAggrrow(), runBoundHeuristic(), separateAlternativeProofs(), and tightenDualproof().
|
static |
gets the non-zero value for the given non-zero index
aggrrow | the aggregation row |
i | non-zero index; must be between 0 and SCIPaggrRowGetNNz(aggrrow) - 1 |
Definition at line 220 of file cuts.h.
References SCIP_AggrRow::inds, INLINE, QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Real, and SCIP_AggrRow::vals.
|
static |
gets the non-zero value for the given problem index of a variable
aggrrow | the aggregation row |
probindex | problem index of variable; must be between 0 and SCIPgetNVars(scip) - 1 |
Definition at line 234 of file cuts.h.
References QUAD, QUAD_ARRAY_LOAD, QUAD_TO_DBL, SCIP_Bool, SCIP_Real, SCIPaggrRowGetNRows(), SCIPaggrRowGetRank(), SCIPaggrRowGetRhs(), SCIPaggrRowIsLocal(), SCIPcalcFlowCover(), SCIPcalcMIR(), SCIPcalcStrongCG(), SCIPcutGenerationHeuristicCMIR(), and SCIP_AggrRow::vals.
Referenced by aggregateNextRow(), aggrRowGetMinActivity(), conflictAnalyzeLP(), proofsetAddAggrrow(), runBoundHeuristic(), and separateAlternativeProofs().
int SCIPaggrRowGetRank | ( | SCIP_AGGRROW * | aggrrow | ) |
gets the rank of the aggregation row
aggrrow | aggregation row |
Definition at line 2351 of file cuts.c.
References SCIP_AggrRow::rank.
Referenced by SCIPaggrRowGetProbvarValue().
SCIP_Bool SCIPaggrRowIsLocal | ( | SCIP_AGGRROW * | aggrrow | ) |
checks if the aggregation row is only valid locally
aggrrow | aggregation row |
Definition at line 2361 of file cuts.c.
References SCIP_AggrRow::local.
Referenced by SCIPaggrRowGetProbvarValue().
SCIP_Real SCIPaggrRowGetRhs | ( | SCIP_AGGRROW * | aggrrow | ) |
gets the right hand side of the aggregation row
aggrrow | aggregation row |
Definition at line 2371 of file cuts.c.
References QUAD_TO_DBL.
Referenced by conflictAnalyzeDualProof(), conflictAnalyzeLP(), getDualProof(), getFarkasProof(), proofsetAddAggrrow(), runBoundHeuristic(), SCIPaggrRowGetProbvarValue(), separateAlternativeProofs(), and tightenDualproof().
int SCIPaggrRowGetNRows | ( | SCIP_AGGRROW * | aggrrow | ) |
gets the number of row aggregations
get number of aggregated rows
aggrrow | the aggregation row |
Definition at line 2278 of file cuts.c.
References SCIP_AggrRow::nrows.
Referenced by aggregation(), and SCIPaggrRowGetProbvarValue().
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.
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 |
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 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 the returned coefficients are a valid MIR cut |
Definition at line 3634 of file cuts.c.
References BMScopyMemoryArray, calcEfficacy(), cutsRoundMIR(), cutsSubstituteMIR(), cutsTransformMIR(), FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, MAXCMIRSCALE, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, postprocessCutQuad(), QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_SIZE, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_ASSIGN_Q, QUAD_HI, QUAD_LO, QUAD_TO_DBL, SCIP_AggrRow::rank, REALABS, removeZerosQuad(), SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMessage, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNVars(), SCIPisPositive(), SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQQ, SCIPsumepsilon(), SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.
Referenced by createCGCutCMIR(), generateClusterCuts(), SCIP_DECL_SEPAEXECLP(), and SCIPaggrRowGetProbvarValue().
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.
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 3951 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, SCIP_AggrRow::nnz, SCIP_AggrRow::nrows, 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_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMessage, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetLPRows(), SCIPgetNContVars(), SCIPgetNVars(), SCIPgetRowSolActivity(), SCIPgetSolVal(), SCIPgetVars(), SCIPinfinity(), SCIPisEfficacious(), SCIPisEQ(), SCIPisInfinity(), SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPrelDiff(), SCIPsortDownRealRealInt(), SCIPsumepsilon(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarGetVlbCoefs(), SCIPvarGetVlbConstants(), SCIPvarGetVlbVars(), SCIPvarGetVubCoefs(), SCIPvarGetVubConstants(), SCIPvarGetVubVars(), SCIP_AggrRow::slacksign, TRUE, and SCIP_AggrRow::vals.
Referenced by aggregation(), SCIPaggrRowGetProbvarValue(), and separateAlternativeProofs().
SCIP_RETCODE SCIPcalcFlowCover | ( | SCIP * | scip, |
SCIP_SOL * | sol, | ||
SCIP_Bool | postprocess, | ||
SCIP_Real | boundswitch, | ||
SCIP_Bool | allowlocal, | ||
SCIP_AGGRROW * | aggrrow, | ||
SCIP_Real * | cutcoefs, | ||
SCIP_Real * | cutrhs, | ||
int * | cutinds, | ||
int * | cutnnz, | ||
SCIP_Real * | cutefficacy, | ||
int * | cutrank, | ||
SCIP_Bool * | cutislocal, | ||
SCIP_Bool * | success | ||
) |
calculates a lifted simple generalized flow cover cut out of the weighted sum of LP rows given by an aggregation row; the aggregation row must not contain non-zero weights for modifiable rows, because these rows cannot participate in an MIR cut. For further details we refer to:
Gu, Z., Nemhauser, G. L., & Savelsbergh, M. W. (1999). Lifted flow cover inequalities for mixed 0-1 integer programs. Mathematical Programming, 85(3), 439-467.
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
calculates a lifted simple generalized flow cover cut out of the weighted sum of LP rows given by an aggregation row; the aggregation row must not contain non-zero weights for modifiable rows, because these rows cannot participate in the cut. For further details we refer to:
Gu, Z., Nemhauser, G. L., & Savelsbergh, M. W. (1999). Lifted flow cover inequalities for mixed 0-1 integer programs. Mathematical Programming, 85(3), 439-467.
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
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 7084 of file cuts.c.
References allocSNFRelaxation(), calcEfficacy(), constructSNFRelaxation(), destroySNFRelaxation(), FALSE, generateLiftedFlowCoverCut(), getFlowCover(), SCIP_AggrRow::inds, LiftingData::lambda, SCIP_AggrRow::local, SCIP_AggrRow::nnz, postprocessCut(), QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_AggrRow::rank, removeZeros(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMsg, SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNCuts(), SCIPgetNLPs(), SCIPgetNVars(), SCIPsumepsilon(), and SCIP_AggrRow::vals.
Referenced by aggregation(), SCIPaggrRowGetProbvarValue(), and separateAlternativeProofs().
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.
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 7891 of file cuts.c.
References BMScopyMemoryArray, calcEfficacy(), cutsRoundStrongCG(), cutsSubstituteStrongCG(), cutsTransformStrongCG(), FALSE, SCIP_AggrRow::inds, SCIP_AggrRow::local, SCIP_AggrRow::nnz, NONZERO, SCIP_AggrRow::nrows, postprocessCutQuad(), QUAD, QUAD_ARRAY_LOAD, QUAD_ARRAY_SIZE, QUAD_ARRAY_STORE, QUAD_ASSIGN, QUAD_ASSIGN_Q, QUAD_HI, QUAD_LO, QUAD_TO_DBL, SCIP_AggrRow::rank, removeZerosQuad(), SCIP_AggrRow::rowsinds, SCIP_AggrRow::rowweights, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPdebug, SCIPdebugMessage, SCIPepsilon(), SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetNVars(), SCIPisPositive(), SCIPquadprecDivDQ, SCIPquadprecEpsFloorQ, SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQQ, SCIPround(), SCIPsumepsilon(), SCIP_AggrRow::slacksign, and SCIP_AggrRow::vals.
Referenced by createCGCutStrongCG(), SCIP_DECL_SEPAEXECLP(), and SCIPaggrRowGetProbvarValue().
gets the row of the cut
cut | cut |
Definition at line 372 of file cutpool.c.
References SCIP_Cut::row.
Referenced by copyCuts(), and takeCut().
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
cut | cut |
Definition at line 382 of file cutpool.c.
References SCIP_Cut::age.
Referenced by takeCut().
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
cut | cut |
Definition at line 396 of file cutpool.c.
References SCIP_Cut::row, SCIP_Longint, SCIP_Real, SCIProwGetActiveLPCount(), and SCIProwGetNLPsAfterCreation().
Referenced by takeCut().
SCIP_CUT** SCIPcutpoolGetCuts | ( | SCIP_CUTPOOL * | cutpool | ) |
gets array of cuts in the cut pool
cutpool | cut pool |
Definition at line 1043 of file cutpool.c.
References SCIP_Cutpool::cuts.
Referenced by SCIPgetDelayedPoolCuts(), and SCIPgetPoolCuts().
int SCIPcutpoolGetNCuts | ( | SCIP_CUTPOOL * | cutpool | ) |
get number of cuts in the cut pool
gets number of cuts in the cut pool
cutpool | cut pool |
Definition at line 1053 of file cutpool.c.
References SCIP_Cutpool::ncuts.
Referenced by SCIPgetNDelayedPoolCuts(), and SCIPgetNPoolCuts().
int SCIPcutpoolGetMaxNCuts | ( | SCIP_CUTPOOL * | cutpool | ) |
get maximum number of cuts that were stored in the cut pool at the same time
gets maximum number of cuts that were stored in the cut pool at the same time
cutpool | cut pool |
Definition at line 1063 of file cutpool.c.
References SCIP_Cutpool::maxncuts.
Referenced by SCIPprintSeparatorStatistics().
SCIP_Real SCIPcutpoolGetTime | ( | SCIP_CUTPOOL * | cutpool | ) |
gets time in seconds used for separating cuts from the pool
cutpool | cut pool |
Definition at line 1073 of file cutpool.c.
References SCIP_Cutpool::poolclock, and SCIPclockGetTime().
Referenced by SCIPprintSeparatorStatistics().
SCIP_Longint SCIPcutpoolGetNCalls | ( | SCIP_CUTPOOL * | cutpool | ) |
get number of times, the cut pool was separated
cutpool | cut pool |
Definition at line 1083 of file cutpool.c.
References SCIP_Cutpool::ncalls.
Referenced by SCIPprintSeparatorStatistics().
SCIP_Longint SCIPcutpoolGetNCutsFound | ( | SCIP_CUTPOOL * | cutpool | ) |
get total number of cuts that were separated from the cut pool
cutpool | cut pool |
Definition at line 1093 of file cutpool.c.
References SCIP_Cutpool::ncutsfound.
Referenced by SCIPprintSeparatorStatistics().
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:
scip | SCIP data structure |
sol | primal CIP solution, or NULL for current LP solution |
cut | separated cut |
Definition at line 34499 of file scip.c.
References checkStage(), FALSE, Scip::lp, SCIP_CALL_ABORT, SCIProwGetLPEfficacy(), SCIProwGetSolEfficacy(), Scip::set, Scip::stat, and TRUE.
Referenced by addCut(), computeCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), SCIP_DECL_SEPAEXECLP(), separateCuts(), and separatePoint().
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:
scip | SCIP data structure |
sol | primal CIP solution, or NULL for current LP solution |
cut | separated cut |
Definition at line 34522 of file scip.c.
References checkStage(), FALSE, Scip::lp, SCIP_CALL_ABORT, SCIProwIsLPEfficacious(), SCIProwIsSolEfficacious(), SCIPtreeGetCurrentDepth(), Scip::set, Scip::stat, Scip::tree, and TRUE.
Referenced by addBoundCutSepa(), addCut(), computeCut(), createCGCutCMIR(), createCGCutStrongCG(), generateOddCycleCut(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_SEPAEXECLP(), sepaImplBoundCutsSOS1(), separateCuts(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), and sepaSubtour().
checks, if the given cut's efficacy is larger than the minimal cut efficacy
scip | SCIP data structure |
efficacy | efficacy of the cut |
Definition at line 34540 of file scip.c.
References SCIPsetIsEfficacious(), SCIPtreeGetCurrentDepth(), Scip::set, and Scip::tree.
Referenced by addCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), extendToCover(), generateClusterCuts(), generateZerohalfCut(), LOPseparate(), SCIP_DECL_SEPAEXECLP(), SCIPcutGenerationHeuristicCMIR(), SCIPseparateCoversOrbisack(), separateCons(), separateIndicators(), separateOrbisack(), separateOrbisackCovers(), separatePerspective(), separateSCIs(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), separateSymresackCovers(), solCutIsViolated(), and TCLIQUE_NEWSOL().
calculates the efficacy norm of the given vector, which depends on the "separating/efficacynorm" parameter
scip | SCIP data structure |
vals | array of values |
nvals | number of values |
Definition at line 34554 of file scip.c.
References FALSE, MAX, REALABS, SCIP_Real, SCIPerrorMessage, SCIPisZero(), SCIP_Set::sepa_efficacynorm, and Scip::set.
Referenced by calcEfficacy(), and SCIP_DECL_SEPAEXECLP().
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:
scip | SCIP data structure |
cut | separated cut |
Definition at line 34612 of file scip.c.
References checkStage(), FALSE, SCIP_CALL_ABORT, SCIPsepastoreIsCutApplicable(), Scip::set, and TRUE.
Referenced by generateCutSol(), processCut(), and separatePoint().
SCIP_RETCODE SCIPaddCut | ( | SCIP * | scip, |
SCIP_SOL * | sol, | ||
SCIP_ROW * | cut, | ||
SCIP_Bool | forcecut, | ||
SCIP_Bool * | infeasible | ||
) |
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:
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 34632 of file scip.c.
References checkStage(), FALSE, SCIP_CALL, SCIP_UNUSED, SCIPaddRow(), and TRUE.
SCIP_RETCODE SCIPaddRow | ( | SCIP * | scip, |
SCIP_ROW * | row, | ||
SCIP_Bool | forcecut, | ||
SCIP_Bool * | infeasible | ||
) |
adds row to separation storage
scip
is in one of the following stages:
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 34655 of file scip.c.
References checkStage(), SCIP_Row::cols, Scip::eventfilter, Scip::eventqueue, FALSE, SCIP_Row::lhs, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_Row::rhs, SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_OKAY, SCIP_Real, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPanalyzeConflict(), SCIPcolGetVar(), SCIPgetDepth(), SCIPinitConflictAnalysis(), SCIPisConflictAnalysisApplicable(), SCIPisGT(), SCIPisInfinity(), SCIPisLT(), SCIPisZero(), SCIPprobAllColsInLP(), SCIProwGetMaxActivity(), SCIProwGetMinActivity(), SCIProwGetNNonz(), SCIPsepastoreAddCut(), SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), Scip::sepastore, Scip::set, Scip::stat, Scip::transprob, Scip::tree, TRUE, and SCIP_Row::vals.
Referenced by addBoundCutSepa(), addCut(), addCuts(), addLinearizationCuts(), addOrbisackCover(), addOrbisackInequality(), addRelaxation(), addSymresackInequality(), computeCut(), createCapacityRestrictionIntvars(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), extendToCover(), generateOddCycleCut(), initLP(), initsepaBoundInequalityFromCardinality(), initsepaBoundInequalityFromSOS1Cons(), LOPseparate(), processCut(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSINITLP(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_SEPAEXECLP(), SCIPaddCut(), SCIPseparateCoversOrbisack(), sepaImplBoundCutsSOS1(), separateCons(), separateConsBinaryRepresentation(), separateCoverCutsCons(), separateCuts(), separateIndicators(), separatePerspective(), separatePoint(), separateSCIs(), separateSequLiftedExtendedWeightInequality(), separateSequLiftedMinimalCoverInequality(), separateSupLiftedMinimalCoverInequality(), and sepaSubtour().
checks if cut is already existing in global cutpool
scip
is in one of the following stages:
scip | SCIP data structure |
row | cutting plane to add |
Definition at line 34748 of file scip.c.
References checkStage(), Scip::cutpool, FALSE, SCIP_CALL_ABORT, SCIPcutpoolIsCutNew(), Scip::set, and TRUE.
Referenced by addCut(), generateZerohalfCut(), and SCIP_DECL_SEPAEXECLP().
SCIP_RETCODE SCIPaddPoolCut | ( | SCIP * | scip, |
SCIP_ROW * | row | ||
) |
if not already existing, adds row to global cut pool
scip
is in one of the following stages:
scip | SCIP data structure |
row | row to remove |
Definition at line 34766 of file scip.c.
References checkStage(), Scip::cutpool, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolAddRow(), Scip::set, Scip::stat, and TRUE.
Referenced by addCut(), addLinearizationCuts(), computeCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), extendToCover(), generateOddCycleCut(), newsolCliqueAddRow(), SCIP_DECL_EVENTEXEC(), and SCIP_DECL_SEPAEXECLP().
SCIP_RETCODE SCIPdelPoolCut | ( | SCIP * | scip, |
SCIP_ROW * | row | ||
) |
removes the row from the global cut pool
scip
is in one of the following stages:
scip | SCIP data structure |
row | cutting plane to add |
Definition at line 34786 of file scip.c.
References checkStage(), Scip::cutpool, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolDelRow(), Scip::set, Scip::stat, and TRUE.
gets current cuts in the global cut pool
scip
is in one of the following stages:
scip | SCIP data structure |
Definition at line 34807 of file scip.c.
References checkStage(), Scip::cutpool, FALSE, SCIP_CALL_ABORT, SCIPcutpoolGetCuts(), and TRUE.
Referenced by SCIPcopyCuts().
int SCIPgetNPoolCuts | ( | SCIP * | scip | ) |
gets current number of rows in the global cut pool
scip
is in one of the following stages:
scip | SCIP data structure |
Definition at line 34825 of file scip.c.
References checkStage(), Scip::cutpool, FALSE, SCIP_CALL_ABORT, SCIPcutpoolGetNCuts(), and TRUE.
Referenced by SCIP_DECL_DISPOUTPUT(), and SCIPcopyCuts().
SCIP_CUTPOOL* SCIPgetGlobalCutpool | ( | SCIP * | scip | ) |
gets the global cut pool used by SCIP
scip
is in one of the following stages:
scip | SCIP data structure |
Definition at line 34843 of file scip.c.
References checkStage(), Scip::cutpool, FALSE, SCIP_CALL_ABORT, and TRUE.
SCIP_RETCODE SCIPcreateCutpool | ( | SCIP * | scip, |
SCIP_CUTPOOL ** | cutpool, | ||
int | agelimit | ||
) |
creates a cut pool
scip
is in one of the following stages:
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 34867 of file scip.c.
References checkStage(), FALSE, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolCreate(), Scip::set, and TRUE.
SCIP_RETCODE SCIPfreeCutpool | ( | SCIP * | scip, |
SCIP_CUTPOOL ** | cutpool | ||
) |
frees a cut pool
scip
is in one of the following stages:
scip | SCIP data structure |
cutpool | pointer to store cut pool |
Definition at line 34898 of file scip.c.
References checkStage(), FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolFree(), Scip::set, and TRUE.
SCIP_RETCODE SCIPaddRowCutpool | ( | SCIP * | scip, |
SCIP_CUTPOOL * | cutpool, | ||
SCIP_ROW * | row | ||
) |
if not already existing, adds row to a cut pool and captures it
scip
is in one of the following stages:
scip | SCIP data structure |
cutpool | cut pool |
row | cutting plane to add |
Definition at line 34919 of file scip.c.
References checkStage(), FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolAddRow(), Scip::set, Scip::stat, and TRUE.
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
scip
is in one of the following stages:
scip | SCIP data structure |
cutpool | cut pool |
row | cutting plane to add |
Definition at line 34941 of file scip.c.
References checkStage(), FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolAddNewRow(), Scip::set, Scip::stat, and TRUE.
SCIP_RETCODE SCIPdelRowCutpool | ( | SCIP * | scip, |
SCIP_CUTPOOL * | cutpool, | ||
SCIP_ROW * | row | ||
) |
removes the LP row from a cut pool
scip
is in one of the following stages:
scip | SCIP data structure |
cutpool | cut pool |
row | row to remove |
Definition at line 34964 of file scip.c.
References checkStage(), FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolDelRow(), Scip::set, Scip::stat, and TRUE.
SCIP_RETCODE SCIPseparateCutpool | ( | SCIP * | scip, |
SCIP_CUTPOOL * | cutpool, | ||
SCIP_RESULT * | result | ||
) |
separates cuts from a cut pool
scip
is in one of the following stages:
scip | SCIP data structure |
cutpool | cut pool |
result | pointer to store the result of the separation call |
Definition at line 34985 of file scip.c.
References checkStage(), Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcutpoolSeparate(), SCIPerrorMessage, SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), SCIPtreeHasCurrentNodeLP(), Scip::sepastore, Scip::set, Scip::stat, Scip::tree, and TRUE.
SCIP_RETCODE SCIPseparateSolCutpool | ( | SCIP * | scip, |
SCIP_CUTPOOL * | cutpool, | ||
SCIP_SOL * | sol, | ||
SCIP_RESULT * | result | ||
) |
separates cuts w.r.t. given solution from a cut pool
scip
is in one of the following stages:
scip | SCIP data structure |
cutpool | cut pool |
sol | solution to be separated |
result | pointer to store the result of the separation call |
Definition at line 35015 of file scip.c.
References checkStage(), Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcutpoolSeparate(), SCIPerrorMessage, SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), SCIPtreeHasCurrentNodeLP(), Scip::sepastore, Scip::set, Scip::stat, Scip::tree, and TRUE.
SCIP_RETCODE SCIPaddDelayedPoolCut | ( | SCIP * | scip, |
SCIP_ROW * | row | ||
) |
if not already existing, adds row to the delayed global cut pool
scip
is the stages SCIP_STAGE_SOLVINGif not already existing, adds row to delayed global cut pool
scip
is the stages SCIP_STAGE_SOLVING scip | SCIP data structure |
row | cutting plane to add |
Definition at line 35045 of file scip.c.
References checkStage(), Scip::delayedcutpool, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolAddRow(), Scip::set, Scip::stat, and TRUE.
Referenced by SCIP_DECL_SEPAEXECLP().
SCIP_RETCODE SCIPdelDelayedPoolCut | ( | SCIP * | scip, |
SCIP_ROW * | row | ||
) |
removes the row from the delayed global cut pool
scip
is the stages SCIP_STAGE_SOLVING scip | SCIP data structure |
row | cutting plane to add |
Definition at line 35064 of file scip.c.
References checkStage(), Scip::delayedcutpool, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcutpoolDelRow(), Scip::set, Scip::stat, and TRUE.
gets current cuts in the delayed global cut pool
scip
is the stages SCIP_STAGE_SOLVING scip | SCIP data structure |
Definition at line 35083 of file scip.c.
References checkStage(), Scip::delayedcutpool, FALSE, SCIP_CALL_ABORT, SCIPcutpoolGetCuts(), and TRUE.
Referenced by SCIPcopyCuts().
int SCIPgetNDelayedPoolCuts | ( | SCIP * | scip | ) |
gets current number of rows in the delayed global cut pool
scip
is the stages SCIP_STAGE_SOLVING scip | SCIP data structure |
Definition at line 35099 of file scip.c.
References checkStage(), Scip::delayedcutpool, FALSE, SCIP_CALL_ABORT, SCIPcutpoolGetNCuts(), and TRUE.
Referenced by SCIPcopyCuts().
SCIP_CUTPOOL* SCIPgetDelayedGlobalCutpool | ( | SCIP * | scip | ) |
gets the delayed global cut pool used by SCIP
scip
is the stages SCIP_STAGE_SOLVING scip | SCIP data structure |
Definition at line 35115 of file scip.c.
References checkStage(), Scip::delayedcutpool, FALSE, SCIP_CALL_ABORT, and TRUE.
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
scip
is in one of the following stages:
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 35139 of file scip.c.
References checkStage(), Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::messagehdlr, Scip::primal, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPseparationRound(), SCIPtreeGetCurrentDepth(), Scip::sepastore, Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by SCIP_DECL_SEPAEXECLP().
gets the array of cuts currently stored in the separation storage
scip
is in one of the following stages:
scip | SCIP data structure |
Definition at line 35172 of file scip.c.
References checkStage(), FALSE, SCIP_CALL_ABORT, SCIPsepastoreGetCuts(), Scip::sepastore, and TRUE.
int SCIPgetNCuts | ( | SCIP * | scip | ) |
get current number of cuts in the separation storage
scip
is in one of the following stages:
scip | SCIP data structure |
Definition at line 35190 of file scip.c.
References checkStage(), FALSE, SCIP_CALL_ABORT, SCIPsepastoreGetNCuts(), Scip::sepastore, and TRUE.
Referenced by SCIP_DECL_SEPAEXECLP(), and SCIPcalcFlowCover().
SCIP_RETCODE SCIPclearCuts | ( | SCIP * | scip | ) |
clears the separation storage
scip
is in one of the following stages:
scip | SCIP data structure |
Definition at line 35207 of file scip.c.
References checkStage(), Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPsepastoreClearCuts(), Scip::sepastore, Scip::set, and TRUE.
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
scip
is in one of the following stages:
scip | SCIP data structure |
Definition at line 35226 of file scip.c.
References checkStage(), Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_Bool, SCIP_CALL, SCIP_EFFICIACYCHOICE_LP, SCIP_OKAY, SCIPsepastoreRemoveInefficaciousCuts(), SCIPtreeGetCurrentDepth(), Scip::sepastore, Scip::set, Scip::stat, Scip::tree, and TRUE.
Referenced by SCIP_DECL_SEPAEXECLP().