2

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?

Elena
  • 251
  • 1
  • 3

1 Answers1

2

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.

A.Omidi
  • 8,832
  • 2
  • 13
  • 49