54#define BRANCHRULE_NAME "pscost"
55#define BRANCHRULE_DESC "branching on pseudo cost values"
56#define BRANCHRULE_PRIORITY 2000
57#define BRANCHRULE_MAXDEPTH -1
58#define BRANCHRULE_MAXBOUNDDIST 1.0
60#define BRANCHRULE_STRATEGIES "dsuv"
61#define BRANCHRULE_STRATEGY_DEFAULT 'u'
62#define BRANCHRULE_SCOREMINWEIGHT_DEFAULT 0.8
63#define BRANCHRULE_SCOREMAXWEIGHT_DEFAULT 1.3
64#define BRANCHRULE_SCORESUMWEIGHT_DEFAULT 0.1
65#define BRANCHRULE_NCHILDREN_DEFAULT 2
66#define BRANCHRULE_NARYMAXDEPTH_DEFAULT -1
67#define BRANCHRULE_NARYMINWIDTH_DEFAULT 0.001
68#define BRANCHRULE_NARYWIDTHFAC_DEFAULT 2.0
69#define BRANCHRULE_RANDSEED_DEFAULT 47
70#define BRANCHRULE_DISCOUNTFACTOR 0.2
73#define WEIGHTEDSCORING(data, min, max, sum) \
74 ((data)->scoreminweight * (min) + (data)->scoremaxweight * (max) + (data)->scoresumweight * (sum))
77struct SCIP_BranchruleData
175 for(
i = 0;
i < nmultvars; ++
i )
190 if( multscalars[
i] > 0.0 )
196 aggrvarsol1 = (candsol - maxact) / multscalars[
i] + multvarub;
202 aggrvarsol2 = (candsol - minact) / multscalars[
i] + multvarlb;
210 aggrvarsol2 = (candsol - maxact) / multscalars[
i] + multvarlb;
216 aggrvarsol1 = (candsol - minact) / multscalars[
i] + multvarub;
229 aggrvarsol = aggrvarsol2;
234 aggrvarsol = aggrvarsol1;
236 aggrvarsol =
REALABS(aggrvarsol1) <
REALABS(aggrvarsol2) ? aggrvarsol1 : aggrvarsol2;
241 multvars[
i], candscoremin, candscoremax, candscoresum, candrndscore, aggrvarsol) );
246 for(
i = 0;
i < nmultvars; ++
i )
255 multvars[
i], candscoremin, candscoremax, candscoresum, candrndscore,
SCIP_INVALID) );
277 strategy = (branchruledata->strategy ==
'u' ? branchruledata->updatestrategy : branchruledata->strategy);
279 strategy = (branchruledata->strategy ==
'u' ?
'l' : branchruledata->strategy);
320 deltaminus = deltaplus;
340 SCIPdebugMsg(
scip,
"branching score variable <%s>[%g,%g] = %g; wscore = %g; type=%d bestbrscore=%g\n",
349 (*bestscore) = branchscore;
350 (*bestrndscore) = candrndscore;
352 (*bestbrpoint) = candbrpoint;
370 (*bestscore) = branchscore;
371 (*bestrndscore) = candrndscore;
373 (*bestbrpoint) = candbrpoint;
391 (*bestscore) = branchscore;
392 (*bestrndscore) = candrndscore;
394 (*bestbrpoint) = candbrpoint;
411 if( besttype == candtype )
417 (*bestscore) = branchscore;
418 (*bestrndscore) = candrndscore;
420 (*bestbrpoint) = candbrpoint;
432 if( besttype > candtype )
435 (*bestscore) = branchscore;
436 (*bestrndscore) = candrndscore;
438 (*bestbrpoint) = candbrpoint;
441 if( besttype < candtype )
448 if( candrndscore >= (*bestrndscore) )
450 (*bestscore) = branchscore;
451 (*bestrndscore) = candrndscore;
453 (*bestbrpoint) = candbrpoint;
505 for(
i = 0;
i < ncands; ++
i )
508 SCIPsortPtrInt((
void**)candssorted, candsorigidx, SCIPvarComp, ncands);
510 bestbranchscore = -1.0;
513 for(
i = 0;
i < ncands; ++
i )
515 cand = candssorted[
i];
522 scoremin = candsscore[candsorigidx[
i]];
525 candsol = candssol[candsorigidx[
i]];
526 for( j =
i+1 ; j < ncands &&
SCIPvarCompare(candssorted[j], cand) == 0; ++j )
528 assert(candsscore[candsorigidx[j]] >= 0.0);
529 scoresum += candsscore[candsorigidx[j]];
530 if( candsscore[candsorigidx[j]] < scoremin )
531 scoremin = candsscore[candsorigidx[j]];
532 else if( candsscore[candsorigidx[j]] > scoremax )
533 scoremax = candsscore[candsorigidx[j]];
537 candsol = candssol[candsorigidx[j]];
541 assert(candssorted[
i] == cand);
545 scoremin, scoremax, scoresum,
SCIPrandomGetReal(branchruledata->randnumgen, 0.0, 1.0), candsol) );
552 if( (*brvar) ==
NULL )
554 SCIPerrorMessage(
"no branching could be created: all external candidates have huge bounds\n");
661 bestrootdiff = rootdiff;
669 SCIPdebugMsg(
scip,
" -> %d cands, selected cand %d: variable <%s> (solval=%g, score=%g)\n",
691 int nprioexterncands;
708 assert(nprioexterncands > 0);
711 if( branchruledata->strategy ==
'u' )
728 SCIPdebugMsg(
scip,
"branching on variable <%s>: new intervals: [%g, %g] and [%g, %g]\n",
795 "strategy for utilizing pseudo-costs of external branching candidates (multiply as in pseudo costs 'u'pdate rule, or by 'd'omain reduction, or by domain reduction of 's'ibling, or by 'v'ariable score)",
799 "weight for minimum of scores of a branching candidate when building weighted sum of min/max/sum of scores",
803 "weight for maximum of scores of a branching candidate when building weighted sum of min/max/sum of scores",
807 "weight for sum of scores of a branching candidate when building weighted sum of min/max/sum of scores",
811 "number of children to create in n-ary branching",
815 "maximal depth where to do n-ary branching, -1 to turn off",
819 "minimal domain width in children when doing n-ary branching, relative to global bounds",
823 "factor of domain width in n-ary branching when creating nodes with increasing distance from branching value",
827 "discount factor for ancestral pseudo costs (0.0: disable discounted pseudo costs)",
#define BRANCHRULE_PRIORITY
#define BRANCHRULE_MAXDEPTH
#define BRANCHRULE_MAXBOUNDDIST
#define BRANCHRULE_NCHILDREN_DEFAULT
#define BRANCHRULE_DISCOUNTFACTOR
#define BRANCHRULE_NARYMAXDEPTH_DEFAULT
static SCIP_RETCODE selectBranchVar(SCIP *scip, SCIP_BRANCHRULE *branchrule, SCIP_VAR **cands, SCIP_Real *candssol, SCIP_Real *candsscore, int ncands, SCIP_VAR **brvar, SCIP_Real *brpoint)
#define BRANCHRULE_SCOREMAXWEIGHT_DEFAULT
static SCIP_RETCODE updateBestCandidate(SCIP *scip, SCIP_BRANCHRULEDATA *branchruledata, SCIP_VAR **bestvar, SCIP_Real *bestbrpoint, SCIP_Real *bestscore, SCIP_Real *bestrndscore, SCIP_VAR *cand, SCIP_Real candscoremin, SCIP_Real candscoremax, SCIP_Real candscoresum, SCIP_Real candrndscore, SCIP_Real candsol)
#define BRANCHRULE_RANDSEED_DEFAULT
#define BRANCHRULE_NARYMINWIDTH_DEFAULT
#define WEIGHTEDSCORING(data, min, max, sum)
#define BRANCHRULE_NARYWIDTHFAC_DEFAULT
#define BRANCHRULE_SCOREMINWEIGHT_DEFAULT
#define BRANCHRULE_SCORESUMWEIGHT_DEFAULT
#define BRANCHRULE_STRATEGY_DEFAULT
#define BRANCHRULE_STRATEGIES
pseudo costs branching rule
SCIP_RETCODE SCIPselectBranchVarPscost(SCIP *scip, SCIP_VAR **branchcands, SCIP_Real *branchcandssol, SCIP_Real *branchcandsscore, int nbranchcands, SCIP_VAR **var, SCIP_Real *brpoint)
SCIP_RETCODE SCIPincludeBranchrulePscost(SCIP *scip)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPaddCharParam(SCIP *scip, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
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 SCIPgetCharParam(SCIP *scip, const char *name, char *value)
SCIP_RETCODE SCIPsetBranchruleInit(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_BRANCHRULE * SCIPfindBranchrule(SCIP *scip, const char *name)
SCIP_RETCODE SCIPincludeBranchruleBasic(SCIP *scip, SCIP_BRANCHRULE **branchruleptr, const char *name, const char *desc, int priority, int maxdepth, SCIP_Real maxbounddist, SCIP_BRANCHRULEDATA *branchruledata)
const char * SCIPbranchruleGetName(SCIP_BRANCHRULE *branchrule)
SCIP_BRANCHRULEDATA * SCIPbranchruleGetData(SCIP_BRANCHRULE *branchrule)
SCIP_RETCODE SCIPsetBranchruleExecExt(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_RETCODE SCIPsetBranchruleCopy(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_RETCODE SCIPsetBranchruleExecLp(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
void SCIPbranchruleSetData(SCIP_BRANCHRULE *branchrule, SCIP_BRANCHRULEDATA *branchruledata)
SCIP_RETCODE SCIPsetBranchruleFree(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_RETCODE SCIPgetExternBranchCands(SCIP *scip, SCIP_VAR ***externcands, SCIP_Real **externcandssol, SCIP_Real **externcandsscore, int *nexterncands, int *nprioexterncands, int *nprioexternbins, int *nprioexternints, int *nprioexternimpls)
SCIP_Real SCIPgetBranchingPoint(SCIP *scip, SCIP_VAR *var, SCIP_Real suggestion)
SCIP_RETCODE SCIPbranchVarValNary(SCIP *scip, SCIP_VAR *var, SCIP_Real val, int n, SCIP_Real minwidth, SCIP_Real widthfactor, int *nchildren)
SCIP_RETCODE SCIPgetLPBranchCands(SCIP *scip, SCIP_VAR ***lpcands, SCIP_Real **lpcandssol, SCIP_Real **lpcandsfrac, int *nlpcands, int *npriolpcands, int *nfracimplvars)
SCIP_RETCODE SCIPbranchVar(SCIP *scip, SCIP_VAR *var, SCIP_NODE **downchild, SCIP_NODE **eqchild, SCIP_NODE **upchild)
SCIP_Real SCIPgetBranchScore(SCIP *scip, SCIP_VAR *var, SCIP_Real downgain, SCIP_Real upgain)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
int SCIPnodeGetDepth(SCIP_NODE *node)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisHugeValue(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisSumEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisSumGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_Real SCIPvarGetSol(SCIP_VAR *var, SCIP_Bool getlpval)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Bool SCIPvarIsImpliedIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_VAR * SCIPvarGetProbvar(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPgetVarDPseudocostScore(SCIP *scip, SCIP_VAR *var, SCIP_Real solval, SCIP_Real discountfac)
SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
SCIP_Real SCIPvarGetRootSol(SCIP_VAR *var)
SCIP_Real SCIPgetVarPseudocostVal(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta)
SCIP_Real SCIPadjustedVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real lb)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_VAR ** SCIPvarGetMultaggrVars(SCIP_VAR *var)
int SCIPvarGetMultaggrNVars(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Real SCIPcomputeVarLbLocal(SCIP *scip, SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
int SCIPvarCompare(SCIP_VAR *var1, SCIP_VAR *var2)
SCIP_Real SCIPcomputeVarUbLocal(SCIP *scip, SCIP_VAR *var)
SCIP_Real * SCIPvarGetMultaggrScalars(SCIP_VAR *var)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
void SCIPsortPtrInt(void **ptrarray, int *intarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
SCIPfreeRandom(scip, &heurdata->randnumgen)
SCIPsetRandomSeed(scip, heurdata->randnumgen,(unsigned int)(DEFAULT_INITIALSEED+SCIPgetNOrigVars(scip)+SCIPgetNOrigConss(scip)))
SCIPcreateRandom(scip, &heurdata->randnumgen, DEFAULT_RANDSEED, TRUE))
assert(minobj< SCIPgetCutoffbound(scip))
memory allocation routines
public methods for branching rules
public methods for message output
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for branch and bound tree
public methods for problem variables
public methods for branching rule plugins and branching
public methods for memory management
public methods for message handling
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for random numbers
public methods for solutions
public methods for the branch-and-bound tree
public methods for SCIP variables
#define SCIP_DECL_BRANCHEXECLP(x)
#define SCIP_DECL_BRANCHEXECEXT(x)
#define SCIP_DECL_BRANCHINIT(x)
#define SCIP_DECL_BRANCHCOPY(x)
#define SCIP_DECL_BRANCHFREE(x)
struct SCIP_Branchrule SCIP_BRANCHRULE
struct SCIP_BranchruleData SCIP_BRANCHRULEDATA
struct SCIP_RandNumGen SCIP_RANDNUMGEN
enum SCIP_Retcode SCIP_RETCODE
#define SCIP_DEPRECATED_VARTYPE_IMPLINT
@ SCIP_VARSTATUS_MULTAGGR
enum SCIP_Vartype SCIP_VARTYPE