[Scip] Assertion failed: branchcand->pseudocands[var->pseudocandindex] == var, file src\scip\branch.c, line 928
Sebastian Ruther
Sebastian.Ruther at uon.edu.au
Mon Apr 18 16:09:58 MEST 2011
Hello again,
so I got it all running in Linux and used Valgrind. It comes up with
some "Conditional jump or move depends on uninitialised values" and has
lot's of lost memory, which is expected as I haven't coded anything that
frees memory yet. See attached file.
However, memory leak shouldn't be the issue.
So that leads me back to my earlier question: Why is the LP invalid? I
investigated some more when this problem occurs and got some strange
behavior. But first let me repeat what I'm actually doing.
I'm implementing a branch and price algorithm and so far I implemented a
reader and a pricer, but (at least in this version) no branching rule or
constraint handler (for the branching). I do have multiple subproblems
that all get called in one iteration of a pricer. However, in the
following I deactivate all but one subproblem.
I load the default plugins and then for the master problem
SCIP_CALL( SCIPsetIntParam(scip,"presolving/maxrestarts",0) );
SCIP_CALL( SCIPsetIntParam(scip, "presolving/maxrounds", 0) );
SCIP_CALL( SCIPsetIntParam(scip, "propagating/maxrounds", 0) );
SCIP_CALL( SCIPsetIntParam(scip, "propagating/maxroundsroot", 0) );
And for the subproblem
SCIP_CALL( SCIPsetIntParam(subscip, "presolving/maxrounds", 0)
); disabling the presolver is quicker.
SCIP_CALL( SCIPsetIntParam(subscip, "presolving/maxrestarts",
0) );
SCIP_CALL( SCIPsetRealParam(subscip, "limits/gap", 0.01) );
First, if I don't inlcude SCIP_CALL(
SCIPsetLongintParam(scip,"limits/nodes", 1) ); then everything is fine,
so from now on this option is always included.
Then, in the beginning of pricer::scip_redcost I call
SCIP_CALL(SCIPprintStatistics(scip, file)); (if I
deactivate this I don't have any problems)
And this causes problems. After the pricing round but before I enter
scip again I get:
[src/scip/solve.c:1341] Warning: pricing has been interrupted -- LP of
current node is invalid
6.7s| 1 | 0 | 2 | - | 0 | 0 | - | 152 | 259 |
152 | 259 | 0 | 0 | 0 | -- | 1.270000e+04 | Inf
6.8s| 1 | 2 | 2 | - | 0 | 0 | 0 | 152 | 259 |
152 | 259 | 0 | 0 | 0 | -- | 1.270000e+04 | Inf
SCIP Status : solving was interrupted [node limit reached]
Solving Time (sec) : 6.78
Solving Nodes : 1
Primal Bound : +1.27000000000000e+04 (4 solutions)
Dual Bound : -1.00000000000000e+20
Gap : infinite
this is on a linux machine. I attached the valgrind output.
On a windows machine I get the same problem. However, if I add either
SCIP_CALL( SCIPprintBestSol(scip, file, FALSE) );
or
SCIP_CALL( SCIPprintTransProblem(scip, file, NULL, FALSE) );
or both I now get an assert:
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
The call stack is
> msvcr100d.dll!_NMSG_WRITE(int rterrnum=10) Line 217
msvcr100d.dll!abort() Line 71
msvcr100d.dll!_wassert(const wchar_t * expr=0x000000014021a4b0, const wchar_t * filename=0x000000014021a488, unsigned int lineno=200) Line 153
binscip.exe!branchcandCalcLPCands(std::basic_ostream<char,std::char_traits<char> > & (char) branchcand=0x000000000013f010) Line 200 + 0x3e bytes
binscip.exe!SCIPbranchcandGetLPCands() Line 344 + 0x19 bytes
binscip.exe!solveNode() Line 2849 + 0x56 bytes
binscip.exe!SCIPsolveCIP() Line 3264 + 0x101 bytes
binscip.exe!SCIPsolve() Line 6827 + 0x11f bytes
binscip.exe!runSCIP(int argc=1, char * * argv=0x00000000004776f0) Line 181 + 0xa bytes
binscip.exe!main(int argc=1, char * * argv=0x00000000004776f0) Line 238 + 0xe bytes
binscip.exe!__tmainCRTStartup() Line 555 + 0x19 bytes
binscip.exe!mainCRTStartup() Line 371
kernel32.dll!0000000076e3f56d()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!0000000076f72cc1()
so none of the calls I mentioned above are used.
Any help is appreciated.
Sebastian
On 7/04/2011 7:42 PM, Sebastian Ruther wrote:
> 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
>>>
>> .
>>
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> http://listserv.zib.de/mailman/listinfo/scip
> .
>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: cout node limit.log
Url: http://listserv.zib.de/mailman/private/scip/attachments/20110418/d45ebd38/coutnodelimit.ksh
More information about the Scip
mailing list