[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