[Scip] Branch on original variables
Gerald Gamrath
gamrath at zib.de
Mon Mar 30 08:51:39 CEST 2015
Dear Bahareh,
do you also add the constraint via SCIPaddCons() or (better in your
case) SCIPaddConsNode()?
Best,
Gerald
Am 30.03.2015 um 07:48 schrieb Bahareh Eghtesadi:
> Hi Gerald,
>
> Thanks for your explanation. I now understand how these constraints
> work. So they are not basically added to the subproblems causing
> additional constraints(which I was trying to avoid).
> So I am now creating two child nodes using SCIPcreatechild, then
> create the constraint of the conshdlr and add them to the node by
> SCIPaddconsnode.
> After one iteration, when one constraint is added to a node,and the
> prop is done , it goes in the pricing(to see if any cons is active and
> if so change bounds), but SCIPconshdlrGetConss(conshdlr) returns no
> constraint! I have checked the conshdlr is found by SCIPfindConshdlr,
> and it is the one attached to the node. Is there a way to check if the
> constraint is being created? because the SCIPcreatecon seems to be
> working fine, and I have no other idea why it can happen.
> I would appreciate your suggestions.
>
> Thanks.
>
> On Thu, Mar 19, 2015 at 8:00 AM, Gerald Gamrath <gamrath at zib.de
> <mailto:gamrath at zib.de>> wrote:
>
> Dear Bahareh,
>
> you say that you store corresponding bounds and other information
> in the consdata and use the CONSACTIVE method to apply them in the
> pricer data. Both of this uses a (set of) constraints, not just
> the constraint handler. Of course, within the constraint handler,
> you define how the data of a single constraint should look like
> and what should be done if the constraint is activated. So I don't
> really get your question, you are already using constraints...
>
> I don't see how you could have the information about bound changes
> for each node other than by storing them in constraints sticked to
> nodes. You might store all this in the constraint handler data,
> but you would then need to keep track of all created nodes and
> store a "copy" of the tree there, which is not convenient.
> Also the CONSACTIVE callback is not called if no constraint is
> activated...
>
> So I think there is no easy way to do this without creating
> constraints.
>
> Best,
> Gerald
>
>
> Am 18.03.2015 um 19:02 schrieb Bahareh Eghtesadi:
>> Hi Stephen,
>>
>> Thank you for your response.
>> Actually I have been looking at the Bin Packing example. Here is
>> what I have done so far: In my branching rule, I choose which
>> pricing variable to branch on, create two nodes and store the
>> corresponding bounds and other information in the consdata for
>> each node. In the conshdlr, in CONSACTIVE method, I change the
>> bounds stored in the pricer data.
>> Do I still have to create the constraint of constraint handler in
>> each node? Because I do not have any constraint in fact, I am
>> using the handlr to apply changes to my pricer data(bounds). I
>> set the NEEDSCONS flag to False, and was hoping that it would be
>> enough.
>> Also, in this case I would not need to check whether the "cons"
>> is active in my variable pricer. Is this right?
>> I appreciate your help. This is my first experience with SCIP,
>> and I am afraid I have oversimplified everything.
>>
>>
>> Thanks.
>>
>> On Wed, Mar 18, 2015 at 8:42 AM, Stephen J Maher <maher at zib.de
>> <mailto:maher at zib.de>> wrote:
>>
>> Hi Bahareh,
>>
>> Branching on original variables can be performed similar to
>> the way used for branching on constraints, i.e. Ryan-Foster
>> branching.
>>
>> In order to implement this type of branching you will need to
>> write your own constraint handler, branching rule and modify
>> the variable pricer. The constraint handler will take some
>> reference to the original variable and selected bounds as
>> input and determine which master problem variables satisfy
>> this constraint based on given variable bounds. In your
>> branching rule, you will decide what original variable to
>> branch on, create two branching nodes and then add a
>> constraint of your constraint handler to each with
>> appropriate bounds. In your variable pricer, it is then
>> necessary to check whether any constraints of this type exist
>> at the current node and apply the appropriate variable bounds
>> on the original variables.
>>
>> An example of Ryan-Foster branching is given in the Bin
>> Packing example included with SCIP. It should be possible to
>> use this as a guide for your own rule branching on original
>> variables.
>>
>> Cheers,
>>
>> Stephen
>>
>>
>> On 13/03/15 07:14, Bahareh Eghtesadi wrote:
>>
>> Hi all,
>>
>> I am tying to implement a branch and price algorithm. I
>> want to branch
>> on the original variables that are not present in the
>> master problem,
>> and then change their bound in the pricing problems. But
>> I am not sure
>> how to do this. I think I can't use SCIPbranchvar
>> directly from
>> mybranchrule. If I use a constraint handler, I wouldn't
>> make a
>> constraint of that type (because there is no such
>> constraint), then how
>> can I include it in my branchrule?
>>
>>
>> Thanks in advance.
>>
>>
>> _______________________________________________
>> Scip mailing list
>> Scip at zib.de <mailto:Scip at zib.de>
>> http://listserv.zib.de/mailman/listinfo/scip
>>
>> _______________________________________________
>> Scip mailing list
>> Scip at zib.de <mailto:Scip at zib.de>
>> http://listserv.zib.de/mailman/listinfo/scip
>>
>>
>>
>>
>> --
>> Regards
>> Bahareh Eghtesadi
>>
>>
>> _______________________________________________
>> Scip mailing list
>> Scip at zib.de <mailto:Scip at zib.de>
>> http://listserv.zib.de/mailman/listinfo/scip
>
>
>
>
> --
> Regards
> Bahareh Eghtesadi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20150330/f218b7b9/attachment.html>
More information about the Scip
mailing list