[Scip] Branching decisions not enforced in master problem during a Branch-and-Price implementation
E. van der Veen
E.van.der.Veen.7 at student.rug.nl
Thu Oct 9 10:41:58 MEST 2008
Hi all,
> This looks like as if the column is added two times
>during the same pricing round. What is the value of the
>PRICER_DELAY variable in your pricer (the "delay"
>parameter of the ObjPricer() constructor in the C++
>interface)? If this is FALSE, this would explain the
>behavior. If it is indeed FALSE, I can explain what in
>more detail what this parameter means.
> If the "delay" parameter is set to TRUE, then this
>should not happen, at least if your pricer makes sure to
>not add the same column twice during the same pricing
>round.
The "delay" parameter was set to TRUE. But, after some
debugging of my pricer, it turned out the pricer did not
make sure not to add the same column twice during the same
pricing round. It turned out that I got tricked by some
numerical inaccuracy... After I replaced a '>=' by
SCIPisGE() the same column is not added again by the
pricer.
However, now in run into another issue, which I thought
should relatively easily be solved, however, I'm
unfortunately unable to do so. The issue is that, after
all profitable columns are generated SCIP does some cut
generation on set packing constraints I added to my
problem to 'store' branching decisions (these constraints
are marked as 'initial=false' and 'separate=false' such
that they are not in the basic LP, which would invalidate
my dual problem and thus my pricing problem, and also
should be forbidden to enter the LP if I understand things
correctly).
As it seems to me these cuts change the structure of my
master problem and hence invalidate the dual, and the dual
costs which are used for the pricing problem. I tried to
prevent this cut generation by changing lots of parameters
(in order to try to be on the safe side..)
scip->set->sepa_maxroundsroot = 0;
scip->set->sepa_maxcuts = 0;
scip->set->sepa_maxcutsroot = 0;
scip->set->sepa_maxroundsrootsubrun = 0;
scip->set->sepa_cutagelimit = -1;
scip->set->cons_disableenfops = true;
scip->set->cons_obsoleteage = 0;
scip->set->cons_agelimit = -1;
scip->set->sepa_poolfreq = -1;
SCIPsetIntParam(scip, "constraints/linear/maxprerounds",
0);
SCIPsetIntParam(scip, "constraints/setppc/maxprerounds",
0);
SCIPsetIntParam(scip, "constraints/setppc/sepafreq", -1);
However, none of these prevent SCIP from calling the
addCut() procedure in cons_setppc.c (I tested this by
including an output message in the addCut() procedure,
which is indeed displayed after no profitable columns are
found anymore).
I tried some other parameters too, but I'm unable to find
the one (or multiple ones) to turn the cut generation off.
Hope you understand my issue. If you need more details
please say so. I added the output of SCIPprintStatistics()
as an attachment (which was written to file after
termination of the solving process). Here you can see at
Constraints\Cuts that there are two setppc and six linear
cuts generated, which I think are the cause of my problem.
Can anyone help me?
Thanks in advance!
Best regards,
Egbert
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: RosteringLog.txt
Url: http://listserv.zib.de/mailman/private/scip/attachments/20081009/567abc11/RosteringLog.txt
More information about the Scip
mailing list