Search code examples
juliacplexjulia-jump

Julia-JuMP Reuse Optimisation Constraints In A Subproblem


I'm writing a MILP in JuMP and am implementing a local branching search heuristic callback that performs a second optimisation problem within the callback. I'd like it to only search for solutions within the vicinity of the proposed solution in the master optimisation problem. This master problem also has a separate lazy-constraint routine.

Is there a way of extracting the problem constraints from the master solver? In particular, can one get a copy of the lazy-constraints so far generated from the master problem for use in the sub-problem?

Thanks for your help.

p.s. I'm using the CPLEX solver if that makes any difference


Solution

  • Turns out that the reason that I was struggling is that this is not the right way to do it! CPLEX has some sophisticated options for generating subMILPs during the branch & cut process, whilst still maintaining the cutpool of the original MILP.

    CPLEX has a local branching search heuristic implemented. It can be turned on by setting the CPX_PARAM_LBHEUR flag to 1 (0 is the default).

    m = Model(solver=CplexSolver(CPX_PARAM_LBHEUR = 1))

    I found a set of slides from the ILOG days of CPLEX talking about Local Branching and Relaxation Induced Neighborhood Search (RINS) search heuristics (which is also available via the appropriate flag).