I have a rather small (1105 continuous, 728 binary, similarily many constraints) but complex MILP problem (it is a Bilevel Optimization problem with the complementarity constraints reformulated as Big-M constraints and the objective function with three bilinear terms linearized by a binary expansion).
The entire algorithm is an iterative process, where an LP is solved in the beginning, some variable values are passed to the first BLP as parameters, of whose solution again some variable values are passed to the second BLP as parameters and so on. Since all problems inherit the same variables, whose values are similar (or at least in the same ball park), I wanted to use MIP Start. Though, due to the binary expansion, the solution of the LP is not an exact solution anymore and the MIP Start does not produce an incumbent solution. If I fix the passed variables, it is infeasible. Thus, I would like to use VarHint. My question is now how and if I can apply VarHint with Pyomo. In Pyomo, the MIP Start feature is easily accessed by setting the values of the variables. Is there a similar feature for VarHint?
1.) Can I check why my B&B algorithm is slow? I have tried the measures proposed here in the forum, but nothing has really helped. It takes roughly 500 iterations per node to solve the above mentioned problem, even with aggressive Cuts and Presolve. Additionally, the best bound is almost stuck. Any ideas?
2.) Is it good practice to use explicit Big-M Formulations (with a rather good estimation of the Big-M) or are SOS or different formulations better in Gurobi?
Many thanks and cheers,
EDIT: I've now achieved to set the VarHintVal attribute but I can't say that it solves the problem quicker. It seems to be equally slow. Is there a way to check if it a) worked to set the value and b) if it helped?
Please sign in to leave a comment.