[Coin-discuss] Re: How to cut off "optimal" solution in CBC

Francois Margot fmargot at andrew.cmu.edu
Thu Aug 25 09:11:17 EDT 2005


>
> As Francois pointed out, SYMPHONY has a separate feasibility check, but
> in hindsight, I'm not sure that was quite the right way to go. As Mike
> pointed out, there is no way for the solver to continue if the current
> solution is integral and not feasible unless the user either generates a
> cut or implements a special branching rule for this case. There may be
> efficiency gains in combining the feasibility check and cut generation
> steps. In cases where the feasibility check generates a cut as a natural
> by-product, the user will be forced to regenerate that same cut later
> (either from scratch or by retrieving a cached copy) if the two are
> separated. By combining the two functions, this is avoided. Right now, I
> cannot really see a good reason to have them separated.
>

I dislike the fact to have generate cuts or branching rules in a feasibility
check procedure or vice-versa. I would like to write cutting code in the 
cutting procedure, branching code in the branching procedure, and 
feasibility check code in the feasibility check procedure.

The problem is that the ordering of the feasibility check,
and cutting steps is not reconfigurable by the user. Depending
on the application, the logical way of doing things differ. One way around
this is to have two feasibility check procedures.

Consider the following three typical applications (these cover all the cases 
that I have met; there are complications when multi-objectives are involved, 
but I have never looked at these problems):

Let x be the optimal solution of the LP relaxation at a node.

Application I): If x is integer, then x is optimal for the subproblem.

Application II) If x is integer but not "really" feasible, I have a cut 
generator that always generates a cut for x.

Application III): If x is integer but is not "really" feasible, I have a cut 
generator that may generate a cut for x, but not always. When the cut 
generator fails, I would like to have the possibility of labeling x as 
infeasible and continue.

In Application I), I would like the order to be:
feasibility check, cutting, branching.

In Application II), I would like the order to be:
cutting, feasibility check, branching.

In Application III), I would like the order to be:
either the order for I or the order for II, or even
feasibility check A, cutting, feasibility check B, branching

My preference is for having two feasibility check procedures, one
before cutting and one after cutting. The return value of these
checking procedures is either "feasible" or "infeasible". In the first
case, the solver grabs x, compares it with the currently best known solution
and fathom the node. In the second case, the solver continues. To handle
the case where an integer x is labeled infeasible, but no cuts were 
generated, a special branching rule is used (for example, the one Tobias 
suggested) or an error is raised by the solver (if the user is responsible 
for implementing the exotic branching and did not).

Francois










More information about the Coin-discuss mailing list