branch_inference.c
Go to the documentation of this file.
23 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 52 #define DEFAULT_RELIABLESCORE 0.001 /**< score which is seen to be reliable for a branching decision */ 53 #define DEFAULT_FRACTIONALS TRUE /**< should branching on LP solution be restricted to the fractional variables? */ 54 #define DEFAULT_USEWEIGHTEDSUM TRUE /**< should a weighted sum of inference, conflict and cutoff weights be used? */ 65 SCIP_Bool fractionals; /**< should branching on LP solution be restricted to the fractional variables? */ 66 SCIP_Bool useweightedsum; /**< should a weighted sum of inference, conflict and cutoff weights be used? */ 69 /** evaluate the given candidate with the given score against the currently best know candidate */ 79 SCIP_BRANCHDIR* bestbranchdir /**< pointer to store the branching direction relative to the branching point */ 99 /* the candidate has the same score as the best known candidate; therefore we use a second and third 102 * - the second criteria prefers the candidate with a larger absolute value of its objective coefficient 104 * - if the absolute values of the objective coefficient are equal the variable index is used to define a 107 * @note It is very important to select a unique best candidate. Otherwise the solver might vary w.r.t. the 108 * performance to much since the candidate array which is used here (SCIPgetPseudoBranchCands() or 110 * starting a probing mode might already change the order of these arrays. To be independent of that 111 * the selection should be unique. Otherwise, to selection process can get influenced by starting a 114 if( bestobj < candobj || (bestobj == candobj && SCIPvarGetIndex(*bestcand) < SCIPvarGetIndex(cand)) ) /*lint !e777*/ 123 /** evaluate the given candidate with the given score against the currently best know candidate */ 150 /* the candidate has the same score as the best known candidate; therefore we use a second and third 153 * - the second criteria prefers the candidate with a larger absolute value of its objective coefficient 155 * - if the absolute values of the objective coefficient are equal the variable index is used to define a 158 * @note It is very important to select a unique best candidate. Otherwise the solver might vary w.r.t. the 159 * performance to much since the candidate array which is used here (SCIPgetPseudoBranchCands() or 161 * starting a probing mode might already change the order of these arrays. To be independent of that 162 * the selection should be unique. Otherwise, to selection process can get influenced by starting a 165 if( bestobj < candobj || (bestobj == candobj && SCIPvarGetIndex(*bestcand) < SCIPvarGetIndex(cand)) ) /*lint !e777*/ 173 /** check if the score for the given domain value and variable domain value is better than the current best know one */ 184 SCIP_BRANCHDIR* branchdir /**< pointer to store the branching direction relative to the branching point */ 194 /* in case the conflict score is below the reliable score we set it to zero since it is seen to be 200 /* in case the cutoff score is below the reliable score we set it to zero since it is seen to be unreliable */ 215 /** return an aggregated score for the given variable using the conflict score and cutoff score */ 232 /* in case the conflict score is below the reliable score we set it to zero since it is seen to be 238 /* in case the cutoff score is below the reliable score we set it to zero since it is seen to be unreliable */ 246 /** return an aggregated score for the given variable using the conflict score and cutoff score */ 255 SCIP_BRANCHDIR* branchdir /**< pointer to store the branching direction relative to the branching point */ 293 checkValueScore(value, histories[v], SCIP_BRANCHDIR_DOWNWARDS, conflictweight, cutoffweight, reliablescore, &bestscore, branchpoint, branchdir); 296 checkValueScore(value, histories[v], SCIP_BRANCHDIR_UPWARDS, conflictweight, cutoffweight, reliablescore, &bestscore, branchpoint, branchdir); 315 SCIP_Bool useweightedsum, /**< should a weighted sum of inference, conflict and cutoff weights be used? */ 340 /* check if the weighted sum between the average inferences and conflict score should be used */ 354 bestvaluescore = getValueScore(scip, cands[0], conflictweight, cutoffweight, reliablescore, &bestbranchpoint, &bestbranchdir); 356 SCIPvarGetName(bestvaluecand), SCIPvarGetLbLocal(bestvaluecand), SCIPvarGetUbLocal(bestvaluecand), 363 bestaggrscore = getAggrScore(scip, cands[0], conflictweight, inferenceweight, cutoffweight, reliablescore); 383 valuescore = getValueScore(scip, cand, conflictweight, cutoffweight, reliablescore, &branchpoint, &branchdir); 386 evaluateValueCand(cand, valuescore, branchpoint, branchdir, &bestvaluecand, &bestvaluescore, &bestbranchpoint, &bestbranchdir); 389 SCIPvarGetName(bestvaluecand), SCIPvarGetLbLocal(bestvaluecand), SCIPvarGetUbLocal(bestvaluecand), 396 aggrscore = getAggrScore(scip, cand, conflictweight, inferenceweight, cutoffweight, reliablescore); 398 SCIPdebugMessage(" -> cand <%s>: prio=%d, solval=%g, score=%g\n", SCIPvarGetName(cand), SCIPvarGetBranchPriority(cand), 436 /* in case the average inferences score is below the reliable score we set it to zero since it is seen to be 442 SCIPdebugMessage(" -> cand <%s>: prio=%d, solval=%g, score=%g\n", SCIPvarGetName(cand), SCIPvarGetBranchPriority(cand), 452 SCIPdebugMessage(" -> %d candidates, selected variable <%s>[%g,%g] (prio=%d, solval=%.12f, score=%g, conflict=%g cutoff=%g, inference=%g)\n", 453 ncands, SCIPvarGetName(bestaggrcand), SCIPvarGetLbLocal (bestaggrcand), SCIPvarGetUbLocal(bestaggrcand), SCIPvarGetBranchPriority(bestaggrcand), 454 bestval == SCIP_UNKNOWN ? SCIPgetVarSol(scip, bestaggrcand) : bestval, bestaggrscore, /*lint !e777*/ 455 SCIPgetVarConflictScore(scip, bestaggrcand), SCIPgetVarAvgInferenceCutoffScore(scip, bestaggrcand, cutoffweight), 461 SCIP_CALL( SCIPbranchVarVal(scip, bestaggrcand, SCIPgetBranchingPoint(scip, bestaggrcand, bestval), &downchild, &eqchild, &upchild) ); 511 SCIPdebugMessage("branch on variable <%s> and value <%g>\n", SCIPvarGetName(bestvaluecand), bestbranchpoint); 612 SCIP_CALL( SCIPgetExternBranchCands(scip, &cands, &candsols, NULL, &ncands, NULL, NULL, NULL, NULL) ); 665 SCIP_CALL( SCIPincludeBranchruleBasic(scip, &branchrule, BRANCHRULE_NAME, BRANCHRULE_DESC, BRANCHRULE_PRIORITY, 681 &branchruledata->conflictweight, TRUE, DEFAULT_CONFLICTWEIGHT, 0.0, SCIP_REAL_MAX, NULL, NULL) ); 685 &branchruledata->inferenceweight, TRUE, DEFAULT_INFERENCEWEIGHT, SCIP_REAL_MIN, SCIP_REAL_MAX, NULL, NULL) );
SCIP_RETCODE SCIPgetLPBranchCands(SCIP *scip, SCIP_VAR ***lpcands, SCIP_Real **lpcandssol, SCIP_Real **lpcandsfrac, int *nlpcands, int *npriolpcands, int *nfracimplvars) Definition: scip.c:33125 static void checkValueScore(SCIP_Real value, SCIP_HISTORY *history, SCIP_BRANCHDIR dir, SCIP_Real conflictweight, SCIP_Real cutoffweight, SCIP_Real reliablescore, SCIP_Real *bestscore, SCIP_Real *branchpoint, SCIP_BRANCHDIR *branchdir) Definition: branch_inference.c:175 SCIP_RETCODE SCIPgetExternBranchCands(SCIP *scip, SCIP_VAR ***externcands, SCIP_Real **externcandssol, SCIP_Real **externcandsscore, int *nexterncands, int *nprioexterncands, int *nprioexternbins, int *nprioexternints, int *nprioexternimpls) Definition: scip.c:33241 SCIP_RETCODE SCIPbranchVar(SCIP *scip, SCIP_VAR *var, SCIP_NODE **downchild, SCIP_NODE **eqchild, SCIP_NODE **upchild) Definition: scip.c:33734 Definition: struct_scip.h:53 static SCIP_Real getValueScore(SCIP *scip, SCIP_VAR *var, SCIP_Real conflictweight, SCIP_Real cutoffweight, SCIP_Real reliablescore, SCIP_Real *branchpoint, SCIP_BRANCHDIR *branchdir) Definition: branch_inference.c:248 Definition: struct_var.h:196 const char * SCIPbranchruleGetName(SCIP_BRANCHRULE *branchrule) Definition: branch.c:1877 static SCIP_DECL_BRANCHCOPY(branchCopyInference) Definition: branch_inference.c:536 SCIP_RETCODE SCIPsetBranchruleCopy(SCIP *scip, SCIP_BRANCHRULE *branchrule, SCIP_DECL_BRANCHCOPY((*branchcopy))) Definition: scip.c:8290 SCIP_Real SCIPhistoryGetVSIDS(SCIP_HISTORY *history, SCIP_BRANCHDIR dir) Definition: history.c:513 SCIP_RETCODE SCIPsetBranchruleFree(SCIP *scip, SCIP_BRANCHRULE *branchrule, SCIP_DECL_BRANCHFREE((*branchfree))) Definition: scip.c:8306 static void evaluateValueCand(SCIP_VAR *cand, SCIP_Real score, SCIP_Real branchpoint, SCIP_BRANCHDIR branchdir, SCIP_VAR **bestcand, SCIP_Real *bestscore, SCIP_Real *bestbranchpoint, SCIP_BRANCHDIR *bestbranchdir) Definition: branch_inference.c:71 SCIP_RETCODE SCIPsetBranchruleExecPs(SCIP *scip, SCIP_BRANCHRULE *branchrule, SCIP_DECL_BRANCHEXECPS((*branchexecps))) Definition: scip.c:8420 static SCIP_DECL_BRANCHEXECEXT(branchExecextInference) Definition: branch_inference.c:598 Definition: struct_history.h:50 Definition: struct_tree.h:122 SCIP_RETCODE SCIPincludeBranchruleInference(SCIP *scip) Definition: branch_inference.c:654 static SCIP_Real getAggrScore(SCIP *scip, SCIP_VAR *var, SCIP_Real conflictweight, SCIP_Real inferenceweight, SCIP_Real cutoffweight, SCIP_Real reliablescore) Definition: branch_inference.c:217 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) Definition: scip.c:3547 SCIP_RETCODE SCIPsetBranchruleExecLp(SCIP *scip, SCIP_BRANCHRULE *branchrule, SCIP_DECL_BRANCHEXECLP((*branchexeclp))) Definition: scip.c:8388 int SCIPvaluehistoryGetNValues(SCIP_VALUEHISTORY *valuehistory) Definition: history.c:348 SCIP_RETCODE SCIPincludeBranchruleBasic(SCIP *scip, SCIP_BRANCHRULE **branchruleptr, const char *name, const char *desc, int priority, int maxdepth, SCIP_Real maxbounddist, SCIP_BRANCHRULEDATA *branchruledata) Definition: scip.c:8253 Definition: type_result.h:35 void SCIPbranchruleSetData(SCIP_BRANCHRULE *branchrule, SCIP_BRANCHRULEDATA *branchruledata) Definition: branch.c:1765 static SCIP_DECL_BRANCHFREE(branchFreeInference) Definition: branch_inference.c:550 SCIP_RETCODE SCIPgetPseudoBranchCands(SCIP *scip, SCIP_VAR ***pseudocands, int *npseudocands, int *npriopseudocands) Definition: scip.c:33464 Definition: struct_history.h:35 Definition: type_retcode.h:33 Definition: type_result.h:42 Definition: struct_branch.h:68 SCIP_RETCODE SCIPsetBranchruleExecExt(SCIP *scip, SCIP_BRANCHRULE *branchrule, SCIP_DECL_BRANCHEXECEXT((*branchexecext))) Definition: scip.c:8404 SCIP_Real SCIPgetVarConflictScore(SCIP *scip, SCIP_VAR *var) Definition: scip.c:23645 SCIP_VALUEHISTORY * SCIPvarGetValuehistory(SCIP_VAR *var) Definition: var.c:17499 SCIP_Real SCIPgetBranchingPoint(SCIP *scip, SCIP_VAR *var, SCIP_Real suggestion) Definition: scip.c:33628 SCIP_RETCODE SCIPchgVarLbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound) Definition: scip.c:19898 SCIP_Real SCIPhistoryGetCutoffSum(SCIP_HISTORY *history, SCIP_BRANCHDIR dir) Definition: history.c:655 Definition: type_history.h:34 Definition: type_history.h:35 SCIP_BRANCHRULEDATA * SCIPbranchruleGetData(SCIP_BRANCHRULE *branchrule) Definition: branch.c:1755 SCIP_Real * SCIPvaluehistoryGetValues(SCIP_VALUEHISTORY *valuehistory) Definition: history.c:368 static SCIP_RETCODE performBranching(SCIP *scip, SCIP_VAR **cands, SCIP_Real *candsols, int ncands, SCIP_Real conflictweight, SCIP_Real inferenceweight, SCIP_Real cutoffweight, SCIP_Real reliablescore, SCIP_Bool useweightedsum, SCIP_RESULT *result) Definition: branch_inference.c:306 static SCIP_DECL_BRANCHEXECLP(branchExeclpInference) Definition: branch_inference.c:564 SCIP_HISTORY ** SCIPvaluehistoryGetHistories(SCIP_VALUEHISTORY *valuehistory) Definition: history.c:358 SCIP_RETCODE SCIPchgVarUbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound) Definition: scip.c:19931 static void evaluateAggrCand(SCIP_VAR *cand, SCIP_Real score, SCIP_Real val, SCIP_VAR **bestcand, SCIP_Real *bestscore, SCIP_Real *bestval) Definition: branch_inference.c:125 inference history branching rule static SCIP_DECL_BRANCHEXECPS(branchExecpsInference) Definition: branch_inference.c:625 Definition: type_result.h:45 SCIP_RETCODE SCIPcreateChild(SCIP *scip, SCIP_NODE **node, SCIP_Real nodeselprio, SCIP_Real estimate) Definition: scip.c:33701 SCIP_Real SCIPgetVarAvgInferenceScore(SCIP *scip, SCIP_VAR *var) Definition: scip.c:23877 SCIP_Real SCIPcalcChildEstimate(SCIP *scip, SCIP_VAR *var, SCIP_Real targetvalue) Definition: scip.c:33678 Definition: objbranchrule.h:33 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) Definition: scip.c:3629 SCIP_Real SCIPgetVarAvgInferenceCutoffScore(SCIP *scip, SCIP_VAR *var, SCIP_Real cutoffweight) Definition: scip.c:24194 SCIP_RETCODE SCIPbranchVarVal(SCIP *scip, SCIP_VAR *var, SCIP_Real val, SCIP_NODE **downchild, SCIP_NODE **eqchild, SCIP_NODE **upchild) Definition: scip.c:33810 |