[Scip] Assertion failed: branchcand->pseudocands[var->pseudocandindex] == var, file src\scip\branch.c, line 928

Sebastian Ruther Sebastian.Ruther at uon.edu.au
Thu Apr 7 11:42:43 MEST 2011


  Hello,

I went back to an early version of my code to see if this indeed has 
something to do with the branching rule and the constraint handler. So 
this version does not include them at all, instead uses the default 
plugins. When I set the node limit to 1 I get the following error after 
the first round of pricing. Note it should have executed 110 iterations 
in the root node. So this is the output for the master problem after 
iteration 1:

  time | node  | left  |LP iter|LP it/n| mem |mdpt |frac |vars |cons 
|cols |rows |cuts |confs|strbr|  dualbound   | primalbound  |  gap
t 2.9s|     1 |     0 |     6 |     - | 652k|   0 |   0 | 159 | 259 | 
159 | 259 |   0 |   0 |   0 |      --      |1.500000e+004 |    Inf
[src\scip\solve.c:1312] Warning: pricing has been interrupted -- LP of 
current node is invalid
   2.9s|     1 |     0 |     6 |     - | 652k|   0 |   0 | 159 | 259 | 
159 | 259 |   0 |   0 |   0 |      --      |1.500000e+004 |    Inf
* 2.9s|     1 |     0 |     6 |     - | 654k|   0 |   - | 159 | 259 | 
159 | 259 |   0 |   0 |   0 |      --      |1.270000e+004 |    Inf
Assertion failed: SCIPlpGetSolstat(lp) == SCIP_LPSOLSTAT_OPTIMAL || 
SCIPlpGetSolstat(lp) == SCIP_LPSOLSTAT_UNBOUNDEDRAY, file 
src\scip\branch.c, line 200

I don't know if this is a different problem or if whatever causes the 
other problem causes this one as well. Why is the LP invalid? I don't 
have Valgrind as I run Windows 7. Is there anything else I can do before 
trying to set up something for Valgrind? What other information do you need?

Thanks
Sebastian

On 6/04/2011 10:57 PM, Stefan Vigerske wrote:
> Hi,
>
>> The call stack reads
>> SCIPsolve
>> SCIPsolveCIP scip.c line 3229
>> SCIPnodeFocus(...) solve.c line 3229
>> treeSwitchPath(tree, blkmem, set, stat, prob, primal, lp, branchcand, conflict, eventfilter, eventqueue, fork, *node, cutoff) tree.c line 3984
>> SCIPeventqueueProcess(eventqueue, blkmem, set, primal, lp, branchcand, eventfilter) tree.c line 2768
>> SCIPeventProcess(event, set, primal, lp, branchcand, eventfilter) event.c line 2174
>> SCIPbranchcandUpdateVar(branchcand, set, var) event.c line 1390
>> SCIPbranchcandRemoveVar(branchcand, var) branch.c line 1053
>> branchcandRemovePseudoCand(branchcand, var)  branch.c line 1012
>> assert(branchcand->pseudocands[branchcand->npseudocands-1] != NULL); branch.c line 928
>>
>> I've isolated the problem somewhat. However, whether these actions cause or just trigger detection of the problem I don't know:
>> The way I implemented the branching is that the scip_activate of the constraint handler removes some arcs (i.e. variables) from the sub problem. For this it sets the upper bound to 0 by calling SCIPchgVarUbNode. I got an error here before saying ERROR: original variable has no transformed variable attached. I guess that's because no transformed sub problem exists at this point.
> If there is no transformed problem, then SCIPchgVarUbNode is not the
> function to call. Probably you want to use SCIPchgVarUb.
>
> Also try running your code through valgrind.
>
> Stefan
>
>> The pricing problems are generated in the Objpricer::init_sol and I only update the cost coefficients in the scip_redcost function. What happens is that the scip_redcost destroys the transformed problem after it's finished. So every time scip_redcost is executed it needs to transform the original problem. Because the constraint handler is called before scip_redcost I call SCIPtransformProb in the constraint handler. Probably not the most elegant implementation but apart from that, is there any problem with calling it here?
>>
>> Cheers,
>> Sebastian
>> ________________________________________
>> From: Stefan Vigerske [stefan at math.hu-berlin.de]
>> Sent: 04 April 2011 21:10
>> To: Sebastian Ruther
>> Cc: scip at zib.de
>> Subject: Re: [Scip] Assertion failed: branchcand->pseudocands[var->pseudocandindex] == var, file src\scip\branch.c, line 928
>>
>> Hi,
>>
>>>     Hello,
>>>
>>> I'm currently implementing a follow-on branching rule and I get the
>>> following error:
>>> Assertion failed: branchcand->pseudocands[var->pseudocandindex] == var,
>>> file src\scip\branch.c, line 928
>>> What does this error mean? What are these pseudocands?
>> Die pseudocands are branching candidates for pseudo branching, in
>> principle the binary or integer variables that are not fixed in the
>> current node.
>> If you get this assertion, then I guess some datastructures have been
>> corrupted.
>>
>>> The error occurs after i execute the ObjConshdlr::scip_activate.
>>> I've implemented the ObjBranchrule::scip_execlp. I have not imlemented
>>> the ObjBranchrule::scip_execps but it looks like it is not entered. I
>>> think the error is because of something in the constraint handler I
>>> implemented because when I comment out those calls I don't get any errors.
>> To give some helpful comments, it would be useful to get more
>> information about what you are doing and when this problem exactly happens.
>> Can you provide a backtrace from running in a debugger?
>> Which SCIP functions does your code call?
>>
>> Stefan
>>
>>> Thanks
>>> Sebastian
>>>
>>>
>>> _______________________________________________
>>> Scip mailing list
>>> Scip at zib.de
>>> http://listserv.zib.de/mailman/listinfo/scip
>>>
>>
>> --
>> Stefan Vigerske
>> Humboldt University Berlin, Numerical Mathematics
>> http://www.math.hu-berlin.de/~stefan
>>
> .
>


More information about the Scip mailing list