I' implementing custom branching heuristics for Cplex in python. I have a way to choose a (binary) variable to branch on, so use the following code to create two branches from BranchCallback (following one of the Cplex examples):
self.make_branch(self.get_objective_value(), [(var_to_branch, "U", 0)])
self.make_branch(self.get_objective_value(), [(var_to_branch, "L", 1)])
I'd like to understand if I should be more clever with the objective value estimate as I noticed that Cplex explores the tree by first trying the branches with all variables assigned value 0, which works worse than the default behaviour of Cplex. In case I need to provide better estimates, are there efficient ways of getting them other than solving relaxations myself?