2
$\begingroup$

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?

$\endgroup$

1 Answer 1

2
$\begingroup$

Since

branching rules are crucial for the performance of solvers they are also a very well-guarded secret. I can say from experience that some form of reliability branching is sufficient to get a reasonable solver performance (not top of the class though).

Also, there are some resources that might be helpful.

$\endgroup$

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.