Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

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

Functions

SCIP_Bool SCIPcutsTightenCoefficients (SCIP *scip, SCIP_Bool cutislocal, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, int *nchgcoefs)
 
SCIP_RETCODE SCIPaggrRowCreate (SCIP *scip, SCIP_AGGRROW **aggrrow)
 
void SCIPaggrRowFree (SCIP *scip, SCIP_AGGRROW **aggrrow)
 
void SCIPaggrRowPrint (SCIP *scip, SCIP_AGGRROW *aggrrow, FILE *file)
 
SCIP_RETCODE SCIPaggrRowCopy (SCIP *scip, SCIP_AGGRROW **aggrrow, SCIP_AGGRROW *source)
 
SCIP_RETCODE SCIPaggrRowAddRow (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_ROW *row, SCIP_Real weight, int sidetype)
 
void SCIPaggrRowCancelVarWithBound (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_VAR *var, int pos, SCIP_Bool *valid)
 
SCIP_RETCODE SCIPaggrRowAddObjectiveFunction (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_Real rhs, SCIP_Real scale)
 
SCIP_RETCODE SCIPaggrRowAddCustomCons (SCIP *scip, SCIP_AGGRROW *aggrrow, int *inds, SCIP_Real *vals, int len, SCIP_Real rhs, SCIP_Real weight, int rank, SCIP_Bool local)
 
SCIP_Real SCIPaggrRowCalcEfficacyNorm (SCIP *scip, SCIP_AGGRROW *aggrrow)
 
void SCIPaggrRowClear (SCIP_AGGRROW *aggrrow)
 
SCIP_RETCODE SCIPaggrRowSumRows (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_Real *weights, int *rowinds, int nrowinds, SCIP_Bool sidetypebasis, SCIP_Bool allowlocal, int negslack, int maxaggrlen, SCIP_Bool *valid)
 
void SCIPaggrRowRemoveZeros (SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_Bool useglbbounds, SCIP_Bool *valid)
 
int * SCIPaggrRowGetRowInds (SCIP_AGGRROW *aggrrow)
 
SCIP_RealSCIPaggrRowGetRowWeights (SCIP_AGGRROW *aggrrow)
 
SCIP_Bool SCIPaggrRowHasRowBeenAdded (SCIP_AGGRROW *aggrrow, SCIP_ROW *row)
 
void SCIPaggrRowGetAbsWeightRange (SCIP_AGGRROW *aggrrow, SCIP_Real *minabsrowweight, SCIP_Real *maxabsrowweight)
 
int * SCIPaggrRowGetInds (SCIP_AGGRROW *aggrrow)
 
int SCIPaggrRowGetNNz (SCIP_AGGRROW *aggrrow)
 
static INLINE SCIP_Real SCIPaggrRowGetValue (SCIP_AGGRROW *aggrrow, int i)
 
static INLINE SCIP_Real 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_ROWSCIPcutGetRow (SCIP_CUT *cut)
 
int SCIPcutGetAge (SCIP_CUT *cut)
 
SCIP_Real SCIPcutGetLPActivityQuot (SCIP_CUT *cut)
 
SCIP_CUT ** SCIPcutpoolGetCuts (SCIP_CUTPOOL *cutpool)
 
int SCIPcutpoolGetNCuts (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetMaxNCuts (SCIP_CUTPOOL *cutpool)
 
SCIP_Real SCIPcutpoolGetTime (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNCalls (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNRootCalls (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNCutsFound (SCIP_CUTPOOL *cutpool)
 
SCIP_Longint SCIPcutpoolGetNCutsAdded (SCIP_CUTPOOL *cutpool)
 
SCIP_Real SCIPgetCutLPSolCutoffDistance (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
 
SCIP_Real SCIPgetCutEfficacy (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
 
SCIP_Bool SCIPisCutEfficacious (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
 
SCIP_Bool SCIPisEfficacious (SCIP *scip, SCIP_Real efficacy)
 
SCIP_Real SCIPgetVectorEfficacyNorm (SCIP *scip, SCIP_Real *vals, int nvals)
 
SCIP_Bool SCIPisCutApplicable (SCIP *scip, SCIP_ROW *cut)
 
SCIP_RETCODE SCIPaddCut (SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_Bool forcecut, SCIP_Bool *infeasible)
 
SCIP_RETCODE SCIPaddRow (SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
 
SCIP_Bool SCIPisCutNew (SCIP *scip, SCIP_ROW *row)
 
SCIP_RETCODE SCIPaddPoolCut (SCIP *scip, SCIP_ROW *row)
 
SCIP_RETCODE SCIPdelPoolCut (SCIP *scip, SCIP_ROW *row)
 
SCIP_CUT ** SCIPgetPoolCuts (SCIP *scip)
 
int SCIPgetNPoolCuts (SCIP *scip)
 
SCIP_CUTPOOLSCIPgetGlobalCutpool (SCIP *scip)
 
SCIP_RETCODE SCIPcreateCutpool (SCIP *scip, SCIP_CUTPOOL **cutpool, int agelimit)
 
SCIP_RETCODE SCIPfreeCutpool (SCIP *scip, SCIP_CUTPOOL **cutpool)
 
SCIP_RETCODE SCIPaddRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row)
 
SCIP_RETCODE SCIPaddNewRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row)
 
SCIP_RETCODE SCIPdelRowCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_ROW *row)
 
SCIP_RETCODE SCIPseparateCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_RESULT *result)
 
SCIP_RETCODE SCIPseparateSolCutpool (SCIP *scip, SCIP_CUTPOOL *cutpool, SCIP_SOL *sol, SCIP_Bool pretendroot, SCIP_RESULT *result)
 
SCIP_RETCODE SCIPaddDelayedPoolCut (SCIP *scip, SCIP_ROW *row)
 
SCIP_RETCODE SCIPdelDelayedPoolCut (SCIP *scip, SCIP_ROW *row)
 
SCIP_CUT ** SCIPgetDelayedPoolCuts (SCIP *scip)
 
int SCIPgetNDelayedPoolCuts (SCIP *scip)
 
SCIP_CUTPOOLSCIPgetDelayedGlobalCutpool (SCIP *scip)
 
SCIP_RETCODE SCIPseparateSol (SCIP *scip, SCIP_SOL *sol, SCIP_Bool pretendroot, SCIP_Bool allowlocal, SCIP_Bool onlydelayed, SCIP_Bool *delayed, SCIP_Bool *cutoff)
 
SCIP_ROW ** SCIPgetCuts (SCIP *scip)
 
int SCIPgetNCuts (SCIP *scip)
 
SCIP_RETCODE SCIPclearCuts (SCIP *scip)
 
SCIP_RETCODE SCIPremoveInefficaciousCuts (SCIP *scip)
 

Function Documentation

◆ SCIPcutsTightenCoefficients()

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

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

See also cons_linear.c:consdataTightenCoefs().

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

See also cons_linear.c:consdataTightenCoefs().

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

Definition at line 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
scipSCIP data structure
aggrrowpointer 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(), runBoundHeuristic(), SCIP_DECL_SEPAEXECLP(), and setupAggregationData().

◆ SCIPaggrRowFree()

void SCIPaggrRowFree ( SCIP scip,
SCIP_AGGRROW **  aggrrow 
)

free a the aggregation row

free a aggregation row

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

Definition at line 1763 of file cuts.c.

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

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

◆ SCIPaggrRowPrint()

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

output aggregation row to file stream

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

Definition at line 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
scipSCIP data structure
aggrrowpointer to return aggregation row
sourcesource 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
scipSCIP data structure
aggrrowaggregation row
rowrow to add to aggregation row
weightscale for adding given row to aggregation row
sidetypespecify row side type (-1 = lhs, 0 = automatic, 1 = rhs)

Definition at line 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
scipSCIP data structure
aggrrowthe aggregation row
varvariable that should be removed
posposition of the variable in the aggregation row
validpointer to return whether the aggregation row is still valid

Definition at line 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
scipSCIP data structure
aggrrowthe aggregation row
rhsright-hand side of the artificial row
scalescalar

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 getDualProof().

◆ SCIPaggrRowAddCustomCons()

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

add weighted constraint to the aggregation row

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

Definition at line 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
scipSCIP data structure
aggrrowthe 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
aggrrowthe 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(), getDualProof(), and SCIPaggrRowSumRows().

◆ SCIPaggrRowSumRows()

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

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

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

Definition at line 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
scipSCIP datastructure
aggrrowthe aggregation row
useglbboundsconsider global bound although the cut is local?
validpointer to return whether the aggregation row is still valid

Definition at line 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(), getDualProof(), getFarkasProof(), and SCIPaggrRowSumRows().

◆ SCIPaggrRowGetRowInds()

int* SCIPaggrRowGetRowInds ( SCIP_AGGRROW aggrrow)

get array with lp positions of aggregated rows

get array with lp positions of rows used in aggregation

Parameters
aggrrowthe aggregation row

Definition at line 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
aggrrowthe 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
aggrrowthe aggregation row
rowrow 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
aggrrowthe aggregation row
minabsrowweightpointer to store smallest absolute value of weights used for aggregating rows
maxabsrowweightpointer to store largest absolute value of weights used for aggregating rows

◆ SCIPaggrRowGetInds()

int* SCIPaggrRowGetInds ( SCIP_AGGRROW aggrrow)

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

Parameters
aggrrowaggregation row

Definition at line 2549 of file cuts.c.

References SCIP_AggrRow::inds, and NULL.

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

◆ SCIPaggrRowGetNNz()

int SCIPaggrRowGetNNz ( SCIP_AGGRROW aggrrow)

gets the number of non-zeros in the aggregation row

Parameters
aggrrowaggregation row

Definition at line 2559 of file cuts.c.

References SCIP_AggrRow::nnz, and NULL.

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

◆ SCIPaggrRowGetValue()

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

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

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

Definition at line 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 INLINE SCIP_Real SCIPaggrRowGetProbvarValue ( SCIP_AGGRROW aggrrow,
int  probindex 
)
static

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

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

Definition at line 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(), aggrRowGetMinActivity(), conflictAnalyzeLP(), proofsetAddAggrrow(), runBoundHeuristic(), and separateAlternativeProofs().

◆ SCIPaggrRowGetRank()

int SCIPaggrRowGetRank ( SCIP_AGGRROW aggrrow)

gets the rank of the aggregation row

Parameters
aggrrowaggregation row

Definition at line 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
aggrrowaggregation 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
aggrrowaggregation row

Definition at line 2589 of file cuts.c.

References NULL, and QUAD_TO_DBL.

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

◆ SCIPaggrRowGetNRows()

int SCIPaggrRowGetNRows ( SCIP_AGGRROW aggrrow)

gets the number of row aggregations

get number of aggregated rows

Parameters
aggrrowthe aggregation row

Definition at line 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
scipSCIP data structure
solthe solution that should be separated, or NULL for LP solution
postprocessapply a post-processing step to the resulting cut?
boundswitchfraction of domain up to which lower bound is used in transformation
usevbdsshould variable bounds be used in bound transformation?
allowlocalshould local information allowed to be used, resulting in a local cut?
fixintegralrhsshould complementation tried to be adjusted such that rhs gets fractional?
boundsfortransbounds that should be used for transformed variables: vlb_idx/vub_idx, -1 for global lb/ub, -2 for local lb/ub, or -3 for using closest bound; NULL for using closest bound for all variables
boundtypesfortranstype of bounds that should be used for transformed variables; NULL for using closest bound for all variables
minfracminimal fractionality of rhs to produce MIR cut for
maxfracmaximal fractionality of rhs to produce MIR cut for
scaleadditional scaling factor multiplied to the aggrrow; must be positive
aggrrowaggrrow to compute MIR cut for
cutcoefsarray to store the non-zero coefficients in the cut if its efficacy improves cutefficacy
cutrhspointer to store the right hand side of the cut if its efficacy improves cutefficacy
cutindsarray to store the indices of non-zero coefficients in the cut if its efficacy improves cutefficacy
cutnnzpointer to store the number of non-zeros in the cut if its efficacy improves cutefficacy
cutefficacypointer to store efficacy of cut, or NULL
cutrankpointer to return rank of generated cut or NULL if it improves cutefficacy
cutislocalpointer to store whether the generated cut is only valid locally if it improves cutefficacy
successpointer to store whether the returned coefficients are a valid MIR cut and it improves cutefficacy

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

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

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

Definition at line 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
scipSCIP data structure
solthe solution that should be separated, or NULL for LP solution
postprocessapply a post-processing step to the resulting cut?
boundswitchfraction of domain up to which lower bound is used in transformation
usevbdsshould variable bounds be used in bound transformation?
allowlocalshould local information allowed to be used, resulting in a local cut?
minfracminimal fractionality of rhs to produce strong CG cut for
maxfracmaximal fractionality of rhs to produce strong CG cut for
scaleadditional scaling factor multiplied to all rows
aggrrowthe aggregation row to compute a strong CG cut for
cutcoefsarray to store the non-zero coefficients in the cut
cutrhspointer to store the right hand side of the cut
cutindsarray to store the problem indices of variables with a non-zero coefficient in the cut
cutnnzpointer to store the number of non-zeros in the cut
cutefficacypointer to store the efficacy of the cut, or NULL
cutrankpointer to return rank of generated cut
cutislocalpointer to store whether the generated cut is only valid locally
successpointer to store whether a valid cut was returned

Definition at line 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()

SCIP_ROW* SCIPcutGetRow ( SCIP_CUT cut)

gets the row of the cut

Parameters
cutcut

Definition at line 382 of file cutpool.c.

References NULL, and SCIP_Cut::row.

Referenced by copyCuts(), and takeCut().

◆ SCIPcutGetAge()

int SCIPcutGetAge ( SCIP_CUT cut)

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

Parameters
cutcut

Definition at line 392 of file cutpool.c.

References SCIP_Cut::age, and NULL.

Referenced by takeCut().

◆ SCIPcutGetLPActivityQuot()

SCIP_Real SCIPcutGetLPActivityQuot ( SCIP_CUT cut)

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

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

Definition at line 406 of file cutpool.c.

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

Referenced by takeCut().

◆ SCIPcutpoolGetCuts()

SCIP_CUT** SCIPcutpoolGetCuts ( SCIP_CUTPOOL cutpool)

gets array of cuts in the cut pool

Parameters
cutpoolcut pool

Definition at line 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
cutpoolcut 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
cutpoolcut 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
cutpoolcut 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
cutpoolcut 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
cutpoolcut 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
cutpoolcut 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
cutpoolcut pool

Definition at line 1145 of file cutpool.c.

References SCIP_Cutpool::ncutsadded, and NULL.

Referenced by SCIPprintSeparatorStatistics(), and SCIPsolve().

◆ SCIPgetCutLPSolCutoffDistance()

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

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

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

Definition at line 72 of file scip_cut.c.

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

Referenced by scoring().

◆ SCIPgetCutEfficacy()

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

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

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

Definition at line 94 of file scip_cut.c.

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

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

◆ SCIPisCutEfficacious()

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

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

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

Definition at line 117 of file scip_cut.c.

References FALSE, 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()

◆ SCIPgetVectorEfficacyNorm()

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

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

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

Definition at line 149 of file scip_cut.c.

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

Referenced by calcEfficacy().

◆ SCIPisCutApplicable()

SCIP_Bool SCIPisCutApplicable ( SCIP scip,
SCIP_ROW cut 
)

indicates whether a cut is applicable

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

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

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

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

Definition at line 207 of file scip_cut.c.

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

Referenced by SCIP_DECL_NLHDLRENFO(), 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
scipSCIP data structure
solprimal solution that was separated, or NULL for LP solution
cutseparated cut
forcecutshould the cut be forced to enter the LP?
infeasiblepointer to store whether cut has been detected to be infeasible for local bounds

Definition at line 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
scipSCIP data structure
rowrow
forcecutshould the row be forced to enter the LP?
infeasiblepointer to store whether row has been detected to be infeasible for local bounds

Definition at line 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()

SCIP_Bool SCIPisCutNew ( SCIP scip,
SCIP_ROW row 
)

checks if cut is already existing in global cutpool

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

Definition at line 343 of file scip_cut.c.

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

Referenced by addCut(), 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
scipSCIP data structure
rowrow 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(), addPathCuts(), addSubtourCuts(), addTightEstimatorCut(), addTourCuts(), computeCut(), createAndAddTransferredCut(), createCGCutCMIR(), createCGCutDirect(), createCGCutStrongCG(), doSeparation(), extendToCover(), generateAndApplyBendersIntegerCuts(), generateAndApplyBendersNogoodCut(), generateOddCycleCut(), newsolCliqueAddRow(), 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
scipSCIP data structure
rowcutting 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()

SCIP_CUT** SCIPgetPoolCuts ( SCIP scip)

gets current cuts in the global cut pool

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

Definition at line 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
scipSCIP 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
scipSCIP 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
scipSCIP data structure
cutpoolpointer to store cut pool
agelimitmaximum 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
scipSCIP data structure
cutpoolpointer 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
scipSCIP data structure
cutpoolcut pool
rowcutting 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
scipSCIP data structure
cutpoolcut pool
rowcutting 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
scipSCIP data structure
cutpoolcut pool
rowrow 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
scipSCIP data structure
cutpoolcut pool
resultpointer 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
scipSCIP data structure
cutpoolcut pool
solsolution to be separated
pretendrootshould the cut separators be called as if we are at the root node?
resultpointer to store the result of the separation call

Definition at line 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
scipSCIP data structure
rowcutting 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.

Referenced by addCut().

◆ SCIPdelDelayedPoolCut()

SCIP_RETCODE SCIPdelDelayedPoolCut ( SCIP scip,
SCIP_ROW row 
)

removes the row from the delayed global cut pool

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

Definition at line 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()

SCIP_CUT** SCIPgetDelayedPoolCuts ( SCIP scip)

gets current cuts in the delayed global cut pool

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

Definition at line 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
scipSCIP 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
scipSCIP 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
scipSCIP data structure
solprimal solution that should be separated, or NULL for LP solution
pretendrootshould the cut separators be called as if we are at the root node?
allowlocalshould the separator be asked to separate local cuts
onlydelayedshould only separators be called that were delayed in the previous round?
delayedpointer to store whether a separator was delayed
cutoffpointer to store whether the node can be cut off

Definition at line 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()

SCIP_ROW** SCIPgetCuts ( SCIP scip)

gets the array of cuts currently stored in the separation storage

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

Definition at line 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
scipSCIP 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
scipSCIP 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
scipSCIP 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().