what I want to do:
I want to observe the process data of the scip provided branching rules (i.e. strang branch and relpscost) at each node, which includes LPSolution, branching depth, branching score, lower bound, and so on. Hence, I need to collect the branching data created by scip provided rules.
what I did and tried:
I think I can use the methods described in the How to add branching rules, I have read this page and try to coding using c++, the procedure see below. While I debug this procedure, I find that I can find the relpscost rule, and the error printed which shows
Exception: EXC_BAD_ACCESS (code=1, address=0x28)
after implementing the functionbranchexeclp(scip, relpscostRule, true, result);
static
SCIP_DECL_BRANCHEXECLP(collectBranchProcessData)
{
SCIP_BRANCHRULE* relpscostRule = SCIPfindBranchrule(scip, "relpscost");
SCIP_RETCODE (*branchexeclp)(SCIP* scip, SCIP_BRANCHRULE* branchrule, SCIP_Bool allowaddcons, SCIP_RESULT* result);
branchexeclp(scip, relpscostRule, true, result);
// TODO: get the data that I want to observe by calling the SCIP APIs.
*result = SCIP_BRANCHED;
return SCIP_OKAY;
}
- how can I collect the data I want to observe?