I have implemented a Benders decomposition algorithm in which the Benders subproblem (BSP) is solved using column generation.
The BSP is a conventional linear JuMP model and I use Gurobi as a solver.
After some iterations, I solve the BSP and get a termination status of infeasible. The BSP has both set packing and set partitioning constraints, and it is initialized with one dummy variable per set partitioning constraint to ensure a feasible solution, regardless of the new variables added afterwards. Therefore, the BSP should always be feasible.
The new variables added with column generation are pushed to the initial array of dummy variables.
I checked for conflicts using compute_conflict!(model)
, but the conflict status is NO_CONFLICT_EXISTS
.
I have inspected the model, and the dummy variables only have lower bounds set to zero, and no upper bounds. If I force all dummy variables to one (i.e., the initial feasible solution) and re-optimize, then I get an optimality termination status.
Actually, if I fix and re-solve one dummy variable at a time, I get infeasible solutions for the first 46 variables (out of 65) and optimal ones afterwards.
I noticed that the issue happens at the first column generation iteration of a random Benders iteration.
The only thing I modify in the BSP between Benders iterations, is the right-hand-side value of the set packing constraints, meaning that the initial solution should still be valid.
I know this may still not be enough information to diagnose the issue, but I have only been able to reproduce it with a rather large model (and after 111 Benders iterations). But please let me know what additional information can I provide.
I am mostly looking for hints on how to best debug this issue.
I have already tried the main points in Debugging · JuMP
I am using:
Julia v1.10.2
JuMP.jl v1.23.5
Gurobi.jl v1.6