maxcoefratiobonus;
153 for(
inti = 0; i < ncuts; ++i )
166cutdensities[i] = ncutcols / ncols;
170 for(
intj = 0; j < (int) ncutcols; ++j )
189l1dist =
ABS(colval - (cutalpha * cutvals[j]));
192cutlocks[i] = cutlocks[i] / ncutcols;
194 if( cutlocks[i] > maxlocks )
195maxlocks = cutlocks[i];
197 if( pscosts[i] > maxpscost )
198maxpscost = pscosts[i];
203maxlocks =
MAX(maxlocks, 1);
205 for(
inti = 0; i < ncuts; i++ )
207cutlocks[i] = cutlocks[i] / maxlocks;
209 if( cutseldata->penaliselocks )
210cutlocks[i] = 1 - cutlocks[i];
211pscosts[i] = pscosts[i] / maxpscost;
215 if( sol !=
NULL&& root )
217 for(
inti = 0; i < ncuts; i++ )
220maxdcd =
MAX(maxdcd, dcds[i]);
224 for(
inti = 0; i < ncuts; ++i )
228maxeff =
MAX(maxeff, effs[i]);
229maxexp =
MAX(maxexp, exps[i]);
233 for(
inti = 0; i < ncuts; ++i )
250intsupport *= cutseldata->intsupportweight;
253 if( ! cutseldata->penaliseobjparal )
259 density= (cutseldata->maxsparsitybonus / cutseldata->endsparsitybonus) * -1 * cutdensities[i];
260 density+= cutseldata->maxsparsitybonus;
267pscost = cutseldata->pscostweight * pscosts[i];
268cutlock = cutseldata->locksweight * cutlocks[i];
273mincutval = mincutval > 0.0 ? mincutval : 1.0;
274dynamism = cutseldata->maxcoefratiobonus >= maxcutval / mincutval ? cutseldata->goodnumericsbonus : 0.0;
277 if( sol !=
NULL&& root )
282scaleddcd = cutseldata->dircutoffdistweight *
SQR(
LOG1P(dcds[i]) /
LOG1P(maxdcd));
292scaledexp = cutseldata->expimprovweight *
SQR(
LOG1P(exps[i]) /
LOG1P(maxexp));
300 if( sol !=
NULL&& root )
301scaledeff = cutseldata->efficacyweight *
SQR(
LOG1P(effs[i]) /
LOG1P(maxeff));
303scaledeff = (cutseldata->efficacyweight + cutseldata->dircutoffdistweight) *
SQR(
LOG1P(effs[i]) /
LOG1P(maxeff));
307score = scaledeff + scaleddcd + scaledexp + objparallelism + intsupport +
density+ dynamism + pscost + cutlock;
337assert(cuts !=
NULL);
338assert(scores !=
NULL);
340bestscore = scores[0];
343 for(
inti = 1; i < ncuts; ++i )
345 if( scores[i] > bestscore )
348bestscore = scores[i];
367assert( cut !=
NULL);
368assert( ncuts == 0 || cuts !=
NULL);
369assert( ncuts == 0 || scores !=
NULL);
371 for(
inti = ncuts - 1; i >= 0; --i )
377 if( thisparallel > maxparallel )
400assert( cut !=
NULL);
401assert( ncuts == 0 || cuts !=
NULL);
402assert( ncuts == 0 || scores !=
NULL);
404 for(
inti = ncuts - 1; i >= 0; --i )
417 else if( thisparallel > maxparallel )
419scores[i] -= paralpenalty;
438assert( ncuts == 0 || cuts !=
NULL);
442 for(
inti = ncuts - 1; i >= 0; --i )
448 if( maxdensity < nvals / ncols )
469assert(cutsel !=
NULL);
502assert(cutseldata !=
NULL);
516assert(cutseldata !=
NULL);
517assert(cutseldata->randnumgen !=
NULL);
530assert(cutsel !=
NULL);
531assert(result !=
NULL);
534assert(cutseldata !=
NULL);
536 if( ncuts > cutseldata->maxcuts ||
SCIPgetNVars(
scip) > cutseldata->maxnumvars )
545maxnselectedcuts, nselectedcuts) );
570assert(cutsel !=
NULL);
585 "cutoff distance in cut score calculation", &cutseldata->dircutoffdistweight,
FALSE,
616 "(ratio of coefficients) in cut score calculation", &cutseldata->goodnumericsbonus,
FALSE,
634 "applied cuts (root). multiple num LP cols.", &cutseldata->maxnonzerorootround,
FALSE,
638 "applied cuts (tree). multiple num LP cols.", &cutseldata->maxnonzerotreeround,
FALSE,
699assert(cuts !=
NULL&& ncuts > 0);
700assert(forcedcuts !=
NULL|| nforcedcuts == 0);
701assert(nselectedcuts !=
NULL);
707 if( cutseldata->filterdensecuts )
716origscoresptr = scores;
724 for(
inti = 0; i < nforcedcuts && ncuts > 0; ++i )
726 if( cutseldata->filterparalcuts )
728 else if( cutseldata->penaliseparalcuts )
733nonzerobudget = root ? cutseldata->maxnonzerorootround : cutseldata->maxnonzerotreeround;
741selectedcut = cuts[0];
744 if( scores[0] < cutseldata->minscore )
750 if( *nselectedcuts == maxselectedcuts )
761 if( cutseldata->filterparalcuts && ncuts > 0)
763 else if( cutseldata->penaliseparalcuts && ncuts > 0 )
767 if( nonzerobudget - budgettaken < 1 && ncuts > 0 )
#define DEFAULT_SPARSITYENDBONUS
static SCIP_DECL_CUTSELEXIT(cutselExitEnsemble)
#define DEFAULT_EFFICACYWEIGHT
#define DEFAULT_MAXNONZEROTREEROUND
#define DEFAULT_OBJPARALWEIGHT
#define DEFAULT_FILTERDENSECUTS
#define DEFAULT_MAXSPARSITYBONUS
#define DEFAULT_PARALPENALTY
#define DEFAULT_PENALISEPARALCUTS
#define DEFAULT_GOODNUMERICBONUS
#define DEFAULT_PENALISELOCKS
static SCIP_DECL_CUTSELCOPY(cutselCopyEnsemble)
static SCIP_DECL_CUTSELINIT(cutselInitEnsemble)
#define DEFAULT_NLOCKSWEIGHT
static SCIP_RETCODE scoring(SCIP *scip, SCIP_ROW **cuts, SCIP_CUTSELDATA *cutseldata, SCIP_Real *scores, SCIP_Bool root, int ncuts)
static void selectBestCut(SCIP_ROW **cuts, SCIP_Real *scores, int ncuts)
static int filterWithDensity(SCIP *scip, SCIP_ROW **cuts, SCIP_Real maxdensity, int ncuts)
static int penaliseWithParallelism(SCIP *scip, SCIP_ROW *cut, SCIP_ROW **cuts, SCIP_Real *scores, int ncuts, SCIP_Real maxparallel, SCIP_Real paralpenalty)
static SCIP_DECL_CUTSELSELECT(cutselSelectEnsemble)
static int filterWithParallelism(SCIP_ROW *cut, SCIP_ROW **cuts, SCIP_Real *scores, int ncuts, SCIP_Real maxparallel)
#define DEFAULT_EXPIMPROVWEIGHT
#define DEFAULT_MAXCOEFRATIOBONUS
#define DEFAULT_DIRCUTOFFDISTWEIGHT
#define DEFAULT_MAXCUTDENSITY
#define DEFAULT_MAXNONZEROROOTROUND
static SCIP_DECL_CUTSELFREE(cutselFreeEnsemble)
#define DEFAULT_PENALISEOBJPARAL
#define DEFAULT_MAXNUMVARS
#define DEFAULT_PSCOSTWEIGHT
#define DEFAULT_FILTERPARALCUTS
#define DEFAULT_INTSUPPORTWEIGHT
static const SCIP_Real density
SCIP_RETCODE SCIPselectCutsEnsemble(SCIP *scip, SCIP_ROW **cuts, SCIP_ROW **forcedcuts, SCIP_CUTSELDATA *cutseldata, SCIP_Bool root, int ncuts, int nforcedcuts, int maxselectedcuts, int *nselectedcuts)
SCIP_RETCODE SCIPincludeCutselEnsemble(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
void SCIPswapPointers(void **pointer1, void **pointer2)
void SCIPswapReals(SCIP_Real *value1, SCIP_Real *value2)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_Real SCIPcolGetPrimsol(SCIP_COL *col)
SCIP_Real SCIPgetCutEfficacy(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
SCIP_Real SCIPgetCutLPSolCutoffDistance(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
SCIP_RETCODE SCIPsetCutselInit(SCIP *scip, SCIP_CUTSEL *cutsel, SCIP_DECL_CUTSELINIT((*cutselinit)))
SCIP_RETCODE SCIPincludeCutselBasic(SCIP *scip, SCIP_CUTSEL **cutsel, const char *name, const char *desc, int priority, SCIP_DECL_CUTSELSELECT((*cutselselect)), SCIP_CUTSELDATA *cutseldata)
SCIP_RETCODE SCIPsetCutselCopy(SCIP *scip, SCIP_CUTSEL *cutsel, SCIP_DECL_CUTSELCOPY((*cutselcopy)))
SCIP_CUTSELDATA * SCIPcutselGetData(SCIP_CUTSEL *cutsel)
SCIP_RETCODE SCIPsetCutselFree(SCIP *scip, SCIP_CUTSEL *cutsel, SCIP_DECL_CUTSELFREE((*cutselfree)))
void SCIPcutselSetData(SCIP_CUTSEL *cutsel, SCIP_CUTSELDATA *cutseldata)
const char * SCIPcutselGetName(SCIP_CUTSEL *cutsel)
SCIP_RETCODE SCIPsetCutselExit(SCIP *scip, SCIP_CUTSEL *cutsel, SCIP_DECL_CUTSELEXIT((*cutselexit)))
int SCIPgetNLPCols(SCIP *scip)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_Real SCIPgetRowMaxCoef(SCIP *scip, SCIP_ROW *row)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_Real SCIPgetRowMinCoef(SCIP *scip, SCIP_ROW *row)
SCIP_Real SCIPgetRowFeasibility(SCIP *scip, SCIP_ROW *row)
SCIP_Real SCIProwGetParallelism(SCIP_ROW *row1, SCIP_ROW *row2, char orthofunc)
int SCIProwGetNNonz(SCIP_ROW *row)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
SCIP_Real SCIProwGetNorm(SCIP_ROW *row)
SCIP_Real SCIPgetRowObjParallelism(SCIP *scip, SCIP_ROW *row)
int SCIPgetRowNumIntCols(SCIP *scip, SCIP_ROW *row)
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPepsilon(SCIP *scip)
SCIP_Real SCIPsumepsilon(SCIP *scip)
SCIP_Bool SCIPisSumLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
int SCIPvarGetNLocksDown(SCIP_VAR *var)
int SCIPvarGetNLocksUp(SCIP_VAR *var)
SCIP_Real SCIPgetVarPseudocostScore(SCIP *scip, SCIP_VAR *var, SCIP_Real solval)
void SCIPfreeRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
SCIP_RETCODE SCIPcreateRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen, unsigned int initialseed, SCIP_Bool useglobalseed)
#define BMSclearMemory(ptr)
public methods for cuts and aggregation rows
public methods for cut selector plugins
public methods for the LP relaxation, rows and columns
public methods for random numbers
struct SCIP_CutselData SCIP_CUTSELDATA
enum SCIP_Retcode SCIP_RETCODE
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4