I am solving a variant of the vehicle routing problem modelled as a network flow model with side constraints, using Gurobi 7.0.0. The aim is to minimise the number of vehicles used and then minimise the distance travelled. This is done by having the vehicle cost set to 10000 in a context where the total travel cost is around 2000.
In many examples the LP relaxation uses a fractional number of vehicles. For example, 4.5 vehicles with an objective value of around 46500. Gurobi takes a long time (around an hour) to branch this up to the solution of around 51500. Clearly it would be nice to branch on the total number of vehicles used. So I added an integer variable, with a constraint to define it, and set its branching priority above zero. There was absolutely no change to the run time. Then I set Presolve=0 and ran the model again from scratch. Now the run time is about 50 seconds. And it is obvious from the log file that Gurobi forces the vehicle count variable to be >= 5 during the root node processing.
In this particular case I'm not too worried - Presolve only removes a handful of variables and columns, so turning it off is a reasonable workaround. But that's not always going to be the case.
Is there any parameter I can set that will absolutely ensure high priority branching variables are not removed, without actually turning off Presolve?
If it helps I can provide an MPS file (around 25M) and command line instructions to reproduce this problem.