[Scip] SCIPaddCut vs. SCIPaddPoolCut

Gerald Gamrath gamrath at zib.de
Fri Jun 8 10:22:14 MEST 2012


Hi Daniel,

you have two stores for cuts in SCIP, the cutpool and the sepastore.

The cutpool is for storing (globally valid) cuts, and SCIP searches 
there for rows cutting off the current LP solution at the beginning of 
each separation round. A separator can add cuts there to avoid doing the 
same work multiple times, e.g., if the cut does not enter the LP in a 
separation round or if it was removed from the LP because it was not 
tight for some time.

The sepastore stores all cuts added via SCIPaddCut() in the current 
separation round (by the cutpool, by separators, constraint 
handlers,...). Not all of them enter the LP, but SCIP selects a number 
of them and adds them to the LP, taking into account how much the 
current LP solution violates the cut, the parallelism to the objective 
function and orthogonality among the cuts. All other cuts are thrown 
away (unless you add(ed) them to the cutpool). Therefore, you should 
probably add all of your cuts via SCIPaddCut(), SCIP will take care that 
the LP is not blown up and the numerics stay reasonable.

Since the cutpool separation is performed at the beginning of each 
separation round and your separator adds its cuts afterwards, it might 
happen that no cuts are added to the sepastore if you only add them to 
the cutpool and thus, no cut is added to the LP. Then, SCIP sees no 
reason for another separation round (the LP solution is the same and if 
somebody can cut it off, he should have done it last round), so the 
cutpool is not separated again at this node and the solution is not cut off.

Best,
Gerald

Am 07.06.2012 16:54, schrieb Daniel Karch:
> Hi,
>
> suppose that I have a fractional solution that I want to cut off in a 
> constraint handler in the SEPALP-callback,
> and that I find lots of cuts that could do this. Is it okay to add all 
> of them via SCIPaddPoolCut and return
> SCIP_SEPARATED as a result, or do I have to add one via SCIPaddCut?
> I ask because in the documentation it sais
>
> »Usually, a separation callback searches and produces cuts, that are 
> added with a call to SCIPaddCut().
> If the cut should be remembered in the global cut pool, it may also 
> call SCIPaddPoolCut().«
>
> Does adding a cut to the pool also guarantee that the violating 
> solution is cut off?
>
> Best regards,
>
>   Daniel
>
>
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> http://listserv.zib.de/mailman/listinfo/scip

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserv.zib.de/mailman/private/scip/attachments/20120608/de8adc08/attachment.html


More information about the Scip mailing list