[Scip] assert(SCIPsetIsFeasPositive(set, rayscale));

Ambros Gleixner gleixner at zib.de
Mon Aug 29 12:23:24 MEST 2011


Hi Sebastian,

you are right: of course, I meant to deactivate the feasibility pump by
freq = -1.

Back to lazy bounds: Can it be that your lazy bounds are only enforced
because of the objective function you use? (Say, the minimisation of
these variables pushes them <= 1, for instance.) The documentation on
http://scip.zib.de/doc/html/FAQ.html says that lazy bounds are only to
be used when implicitly enforced by constraints which are in the LP.

For a workaround, you should try to deactivate all heuristics that
change the objective function in diving mode. "grep SCIPchgVarObjDive
src/scip/*c" tells me that in SCIP 2.0 these are
- feaspump
- objpscostdiving
- rootsoldiving

I hope this fixes your problem for now. For the next release we will try
to allow lazy bounds also when enforced by the objective function.

ambros



Am 29.08.2011 10:43, schrieb Sebastian Ruther:
>  Hello Ambros,
> 
> On 27/08/2011 1:29 AM, Ambros Gleixner wrote:
>> Hi Sebastian,
>>
>> so it looks like CPLEX returns an unbounded ray which SCIP finds invalid
>> because one variable is at its upper/lower bound and the ray coordinate
>> is positive/negative for this variable.  Hence, rayscale, i.e. the
>> maximum steplength along the ray until a variable or constraint hits its
>> bounds is 0. (In theory, it should be infinite, numerically it is a
>> large value.)
>>
>> If the LP contains only relaxed binary variables then the LP should
>> never be unbounded. You could try to dump the LP by adding
>>
>>     SCIP_CALL( SCIPlpiWriteLP(lp->lpi, "unbounded.lp") );
>>
>> to the top of function SCIPlpGetUnboundedSol and have a look which
>> bounds the variables have; maybe try to solve it using the CPLEX shell,
>> seeing what happens.
>>
>> If you want a workaround for now: From your log output it looks like the
>> LP causing this problem is not a node relaxation but an LP with modified
>> objective function from the feaspump heuristic. If you can do without
>> it, deactivate the feasibility pump:
>>
>>     SCIP_CALL( SCIPsetIntParam(scip, "heuristics/feaspump/freq", 0) );
> Setting it to 0 doesn't change much. When I set it to -1 some instances
> solve. Some however just move the issue to a different heuristic. The
> call stack is below. So I guess I have to resolve this issue or disable
> possibly all heuristics. I added what you proposed above. Looks like the
> .lp does not have any variable bounds. I'm sending you the file
> separately. Solving with CPLEX returns: "Primal unbounded due to dual
> bounds, variable 't_w_009_0034'.
> Presolve - Unbounded or Infeasible"
> 
> The w variables are binary and I include lazy upper bounds for them.
> Just to make sure: we only need lazy bounds for upper bounds right?
> The .lp file should display bounds right? Why aren't there any?
> 
> Cheers,
> Sebastian
> 
> 
> 
> 
>      binscip.exe!SCIPlpGetUnboundedSol()  Line 13531 + 0x34 bytes    C
>      binscip.exe!SCIPlpSolveAndEval()  Line 12259 + 0x1d bytes    C
>      binscip.exe!SCIPsolveDiveLP()  Line 15130 + 0x96 bytes    C
>      binscip.exe!heurExecRootsoldiving()  Line 476 + 0x65 bytes    C
>      binscip.exe!SCIPheurExec()  Line 396 + 0x2f bytes    C
>      binscip.exe!SCIPprimalHeuristics()  Line 220 + 0x56 bytes    C
>      binscip.exe!SCIPsolveCIP(const __int64 blkmem)  Line 3360 + 0x54
> bytes    C
>     
> binscip.exe!SCIPsolve(std::_Vector_iterator<std::_Vector_val<SCIP_Var
> *,std::allocator<SCIP_Var *> > > (__int64) scip, unsigned int restart) 
> Line 6827 + 0x11f bytes    C
>      binscip.exe!runSCIP(int argc, char * * argv)  Line 265 + 0xa
> bytes    C++
> 
> 
> 
>> ambros
>>
>>
>> Am 26.08.2011 16:34, schrieb Sebastian Ruther:
>>> Hello Ambros,
>>>
>>> I get the same error. However, before I was not able to see the
>>> values of "set" and rayscale. Now my debugger says that the two
>>> values that are compared are set->num_feastol =
>>> 9.9999999999999995e-007 and rayscale = 0.0.
>>>
>>> Sebastian ________________________________________ From: Ambros
>>> Gleixner [gleixner at zib.de] Sent: 26 August 2011 22:44 To:
>>> scip at zib.de; Sebastian Ruther Subject: Re: [Scip]
>>> assert(SCIPsetIsFeasPositive(set, rayscale));
>>>
>>> Hi Sebastian,
>>>
>>> could you try with the attached lp.c?  I added some asserts to
>>> narrow down the source of the problem.
>>>
>>> ambros
>>>
>>>
>>> Am 26.08.2011 14:22, schrieb Sebastian Ruther:
>>>> Hello,
>>>>
>>>> I have had this error for a long time now but usually had more
>>>> pressuring issues. However now I get stuck at this. Almost all of
>>>> my instances produce this error.
>>>>
>>>> assert(SCIPsetIsFeasPositive(set, rayscale)); line 13531 in lp.c
>>>>
>>>> Note that I am using SCIP 2.0.0 with CPLEX 12.3.
>>>>
>>>> I dumped the master problem and solved it with CPLEX and that works
>>>> fine.
>>>>
>>>> The variables are all binary (but of course they do get relaxed),
>>>> all constraint coefficients are 1, rhs between 0 and 30 and
>>>> objective function coefficients range from 100 to 9555.
>>>>
>>>> The call stack is:
>>>>
>>>> msvcr100d.dll!_wassert(const wchar_t * expr=0x0000000140990630,
>>>> const wchar_t * filename=0x0000000140990610, unsigned int
>>>> lineno=13531) Line 153    C binscip.exe!SCIPlpGetUnboundedSol()
>>>> Line 13531 + 0x34 bytes    C binscip.exe!SCIPlpSolveAndEval()  Line
>>>> 12259 + 0x1d bytes    C
>>>>> binscip.exe!SCIPsolveDiveLP()  Line 15130 + 0x96 bytes    C
>>>> binscip.exe!heurExecFeaspump()  Line 943 + 0x1c bytes    C
>>>> binscip.exe!SCIPheurExec()  Line 396 + 0x2f bytes    C
>>>> binscip.exe!SCIPprimalHeuristics()  Line 220 + 0x56 bytes    C
>>>> binscip.exe!priceAndCutLoop(const __int64 blkmem=7386848)  Line
>>>> 1600 + 0x50 bytes    C binscip.exe!solveNodeLP(const __int64
>>>> blkmem=7386848)  Line 1992 + 0xef bytes    C
>>>> binscip.exe!solveNode()  Line 2647 + 0xef bytes    C
>>>> binscip.exe!SCIPsolveCIP(const __int64 blkmem=7386848)  Line 3264 +
>>>> 0x101 bytes    C
>>>>
>>>> binscip.exe!SCIPsolve(std::_Vector_iterator<std::_Vector_val<SCIP_Var
>>>>
>>>>
>> *,std::allocator<SCIP_Var *>  >  >  (__int64) scip=0x000000000031f3f0,
>>>> unsigned int restart=0)  Line 6827 + 0x11f bytes    C
>>>> binscip.exe!runSCIP(int argc=1, char * * argv=0x0000000000707a20)
>>>> Line 264 + 0xa bytes    C++ binscip.exe!main(int argc=1, char * *
>>>> argv=0x0000000000707a20) Line 356 + 0x14 bytes    C++
>>>> binscip.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes    C
>>>> binscip.exe!mainCRTStartup()  Line 371    C
>>>>
>>>>
>>>> Thank you for your help.
>>>>
>>>> Sebastian
>>>>
>>>> _______________________________________________ Scip mailing list
>>>> Scip at zib.de http://listserv.zib.de/mailman/listinfo/scip
>>> -- ____________________________________________________________
>>> Ambros M. Gleixner Zuse Institute Berlin - Matheon - Berlin
>>> Mathematical School http://www.zib.de/gleixner
>>>
> 

-- 
____________________________________________________________
Ambros M. Gleixner
Zuse Institute Berlin - Matheon - Berlin Mathematical School
http://www.zib.de/gleixner


More information about the Scip mailing list