[Scip] Assertion failed: branchcand->pseudocands[var->pseudocandindex] == var, file src\scip\branch.c, line 928
Sebastian Ruther
Sebastian.Ruther at uon.edu.au
Fri Apr 22 09:55:53 MEST 2011
Ok, so the same problem happens in your examples.
Add SCIP_CALL( SCIPsetLongintParam(scip,"limits/nodes", 1) ); before you
call SCIPsolve
and
SCIP_CALL(SCIPprintStatistics(scip, NULL)); in the scip_redcost function
of the Binpacking or VRP example and you'll get the invalid LP problem
after the first pricing iteration.
Cheers,
Sebastian
On 19/04/2011 1:28 PM, Sebastian Ruther wrote:
> Actually, the assert happens not only on Windows but also on Linux if
> I use OPT=dbg. Below I used OPT=noblkmem.
> Again the assertion happens only if I add
> SCIP_CALL( SCIPprintBestSol(scip, file, FALSE) );
> or
> SCIP_CALL( SCIPprintTransProblem(scip, file, NULL, FALSE) );
> or both. Otherwise I get the 'LP of current node is invalid' followed
> by 'node limit reached'
>
> Sebastian
>
> On 19/04/2011 12:09 AM, Sebastian Ruther wrote:
>> 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
>>> .
>>>
>>
>> _______________________________________________
>> Scip mailing list
>> Scip at zib.de
>> http://listserv.zib.de/mailman/listinfo/scip
>
>
> _______________________________________________
> 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/mailman/private/scip/attachments/20110422/270a8906/attachment.html
More information about the Scip
mailing list