[Scip] Calling SCIPreleaseCons() before terminating the program
Hélène Toussaint
helene.toussaint at isima.fr
Tue Oct 29 14:47:47 CET 2013
Dear Gerald,
Thank you very much for your answer. It solves my problem.
Best,
Hélène
Le 29/10/2013 13:01, Gerald Gamrath a écrit :
> Dear Hélène,
>
> first, I would recommend that you also set the stickingatnode flag for
> the constraints to TRUE, because they should stay at the node where
> you add them and not be moved to more global nodes (even though I'm
> not sure this could happen with your constraints).
>
> Then, the problem you run into is the following: The constraints are
> captured once when you create them (to ensure that you can store
> pointers to them) and then the second time when you add them to the
> problem or (in your case) to a local node. In the queens example, the
> first capture is released by the user before calling SCIPfree(), where
> then the problem is free'd and also the internal captures to all
> globally valid constraints are released. In your case, the internal
> capture is already released when the node to which a constraint was
> added is freed during the branch-and-bound search and you have the
> last remaining pointer to the constraint. When you release it now, the
> constraint itself is deleted (because its number of captures goes down
> to 0) and this also frees the row corresponding to the constraint.
> However, this is currently not allowed in the problem solved stage.
>
> Normally, releasing constraints should be done by the same plugin
> which created or stored the constraints. In your case, probably your
> branching rule created these local constraints and perhaps stored the
> pointers to them in the problem data? Both of them have an
> exitsol-callback: SCIP_DECL_BRANCHEXITSOL and SCIP_DECL_PROBEXITSOL.
> In there, you could release the pointers to the locally valid constraints.
>
> Alternatively, you could try whether everything works fine if you
> change the fourth-last argument of the checkStage() method call in
> SCIPreleaseRow() from FALSE to TRUE. This method is used to make sure
> that methods are only called in certain stages, however, we mostly
> start with strict restrictions and allow new stages only when needed.
> This could be a case where it would make sense to allow a new stage.
>
> Best,
> Gerald
>
> On 29.10.2013 10:22, Hélène Toussaint wrote:
>>
>> Dear SCIP team,
>>
>> I solve a problem using a Branch and Price in which I add some
>> constraints at each node besides the branching constraints. These
>> constraints are valid in the current node and its children only. I
>> create them using SCIPcreateCons() with:
>> initial =separate = enforce = check = propagate = local = modifiable
>> = TRUE and
>> dynamic = removable =stickingatnode = FALSE.
>> and I store the SCIP_Cons pointer.
>>
>> I don't call SCIPreleaseCons() right after adding a constraint but
>> just before terminating the program ( before SCIPfree( ) ) as it is
>> done in the queens example. I have the following errors in debug mode:
>>
>> [src/scip/scip.c:390] ERROR: cannot call method <SCIPreleaseRow> in
>> problem solved stage
>>
>> [src/scip/scip.c:22911] ERROR: Error <-8> in function call
>>
>> [src/scip/cons_linear.c:927] ERROR: Error <-8> in function call
>>
>> [src/scip/cons_linear.c:9855] ERROR: Error <-8> in function call
>>
>> Could you please tell me if I set the flags properly? and How can I
>> release these constraints?
>>
>>
>> Best regards,
>>
>> Hélène
>>
>>
>>
>> _______________________________________________
>> 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/pipermail/scip/attachments/20131029/5d09e7c4/attachment.html>
More information about the Scip
mailing list