I want to implement a (simple) branching heuristic through a CPLEX generic callback. There are multiple overloads of the makeBranch method in CPLEX's C++ API, see here:

CPXLONG makeBranch(IloNumVar const & branchVar, IloNum bound, IloCplex::BranchDirection dir, IloNum estimate) const

The function argument of interest is estimate, which is an estimate for the objective value of the new child's relaxation. According to the docs, it is often a reasonable choice to use the objective value of the current node's relaxation. Unfortunately, I could not find any information on how CPLEX handles this estimate.

Assuming I can cheaply calculate an accurate objective estimate for the newly created node's relaxation. Is it guaranteed that CPLEX processes the node with the best estimate first? In other words, is it possible to control the B&B search strategy via estimate?


1 Answer 1


The answer is basically no. You will find interesting information here related to node evaluation and here related to node selection in the CPLEX B&B. In particular, by setting the parameter Cplex.NodeSelect to the value BestEst, you will activate the so-called Best-Estimate Search.

As a competitor of CPLEX, we know CPLEX quite well :-) Now, the best would be to have an answer from CPLEX people themselves, of course. In the meantime, I hope that these pointers will help you.

  • 1
    $\begingroup$ Thanks, this helps! :) The NodeSelect parameter seems to be what I was looking for. AFAIK the linked node evaluators can only be used within IloCplex goals (single-threaded) instead of generic callbacks (multi-threaded). $\endgroup$
    – joni
    Mar 22, 2021 at 14:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.