[Scip] How to update separators/constraint handlers in a branch and cut and price?

Gerald Gamrath gamrath at zib.de
Fri Aug 20 23:48:56 MEST 2010


Hi Nikolaj,

you do not need to implement constraint handlers, separators should be
sufficent if you just want to add some cuts to your problem.

First of all, cuts that you generate during the branch-cut-and-price
process should be defined for all variables, i.e. also for the huge set
of variables treated implicitly by the pricer. Thus, you do not have to
update your separators after creating new variables, but you have to
respect the cuts within the pricing process, that means you should
handle the dual variables corresponding to the cuts in your pricing
problem and you should add the new variables not only to the initial
constraints, but also to the cuts (by calling SCIPaddVarToRow()).

For your second question: What you describe is partially done
automatically by SCIP, so cuts are stored in a separation storage and
after each separation round, SCIP chooses the best of these cuts (wrt.
to strength and numerics), adds them to the LP and discards the others.
If you want to choose the the cuts wrt. another criterion, then you
could do two things:
Either you implement a "master separator" that has an array of rows
stored in its data and methods to add new rows to this array,  that you
can use in  the other separators instead of adding the rows to the cut
pool. The "master separator" should have a very high priority, so that
it is called after all other separators. It then chooses the "best" rows
from this array and adds them to SCIP's separation storage (note that
you can set the "forcecut" parameter in the SCIPaddCut() method to
TRUE,  so that SCIP does not select only the best cuts).
The second possibility would also need a master separator, but you could
add the cuts by SCIPaddCut() to SCIP's  separation storage and then use
the methods SCIPsepastoreGetCuts() and SCIPsepastoreGetNCuts() to access
SCIP's separation storage, SCIPsepastoreClearCuts() to remove the cuts
from the separation storage (you should capture the rows before, so that
they are not deleted) and again add the cuts with the forcecut parameter
set to TRUE.

Best,
Gerald


Am 20.08.2010 04:44, schrieb nikolaj at crt.umontreal.ca:
> Hello all,
>
> I'm implementing a branch and cut and price with SCIP. How do I update my
> separators (or do I need to implement constraint handlers?) when new
> variables are created? Another question : I would like to generate a
> certain number of cuts (SCIP_ROW) from different separators and then
> choose among them which ones I would like to give to SCIP to add to the
> model. How can I do this?
>
> Thank you in advance.
>
> Have a nice day/night,
>
> Nikolaj
>
>
>
>
>
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> http://listserv.zib.de/mailman/listinfo/scip
>   



More information about the Scip mailing list