# How does CPLEX handle objective estimates passed to the makeBranch method?

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

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.

• 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).
– joni
Mar 22, 2021 at 14:41