Originally posted by: MarcoMojana
>I would like to understand some more details of your procedure.
>After decomposing the problem, I guess you are only finding lower bounds for each component and you are not solving each component to optimality, right?
Right
>Is the sum of the lower bounds a better lower bound than the LP bound, or are you just decomposing the problems because this is faster than solving the LP relaxation as a whole?
I do it just because it takes less time to solve 2 subproblems of size n that one of size 2n
>If you can solve some or all components to optimality, then you can just do this in the cut callback and then fix the variables of the solved components to their respective values.
Since I need a good LB, I don't want to solve nodes that do not affect the global LB.
If you use the decomposition to speed-up the LP relaxation solves, then you should use the solve callback, solve the component relaxations, and combine this to get a basis for the full LP relaxation. Then, install this basis in the CPLEX nodelp and solve the nodelp (which should then be done in 0 iterations).
That's not my case
If you can find tighter lower bounds with your decomposition approach but cannot find the optimal solutions of the components, then there is not that much that you can do to speed-up the solving process in CPLEX. In my experience, the lower bounds of the nodes in the search tree are not that important. Basically, the only thing that matters (apart from node selection, which is not that crucial) is whether the lower bound is above or below the incumbent value. If you find a better incumbent, then you can of course prune nodes with larger lower bounds, but since you are already having the optimal solution at hand, this will not happen in your case.
What I'm currently doing is:
if problem is decomposable
solve one of the subproblems
add a cut objfunc >= sum_i LB subproblem i
else
let CPLEX decide
end if
if problem decomposable
generate only one child identical to the parent
else
generate two children by adding a row in the LPs
end if
In this way I'm sure that a node that represents a decomposable problem is never removed (the child is identical to the parent) and that every time CPLEX want to improve a node LB the correct subproblem is solved. What do you think about this procedure?
Thank you!
M. Mojana
#CPLEXOptimizers#DecisionOptimization