[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