[SCIP] Error: constraint is not linear

Gerald Gamrath gamrath at zib.de
Sun Jun 30 14:08:10 CEST 2019


Dear Mahdi,

I am very sure now that it is a coding issue. ;-)

I guess "return AddImpPaths(scip, Paths);" should rather be "SCIP_CALL( 
AddImpPaths(scip, Paths) );" in order to not return there and to not 
skip the remainder of the method.

Best,
Gerald

On 30.06.19 08:49, mahdi noorizadegan wrote:
> Dear Gerald,
>
> Thanks for your reply.
> The .lp file is not created at all for SCIPwriteTransProblem().
> I am not sure if it is a coding issue. The problem is similar to VRP.
> Here is the piece of the code.
>
> In the below code the last line before Return SCIP_OKAY; (highlighted 
> in green) in " SCIP_RETCODE ObjPricerGTE::AddImpPaths" is printed but 
> the line after  "return AddImpPaths(scip, Paths)" (highlighted in 
> red)  is not.
>
> When I add " SCIP_CALL( SCIPwriteTransProblem(scip, "GTEPricing.lp", 
> "lp", FALSE) ); " to the adding variable procedure i.e. " SCIP_RETCODE 
> ObjPricerGTE::AddImpPaths", the .lp file is created.
> As you see there is no if  condition that can affect the output.
>
>
> Regards,
> Mahdi
>
>   SCIP_Real reduced_cost =FindShortestPath(pi, lambda, alpha, Paths);
>    if (  reduced_cost>0.001 )  {
>            return AddImpPaths(scip, Paths);
>  cout<<"\n reduced_cost";
>    }
>    SCIP_CALL( SCIPwriteTransProblem(scip, "GTEPricing.lp", "lp", FALSE) );
>
> .
> .
> .
> SCIP_RETCODE ObjPricerGTE::AddImpPaths(
>    SCIP*                 scip,
>     vector<list<list<int> > >&  ImpPaths
>    ) const{
> .....
>   cout<<"\n gen LP";
>             return SCIP_OKAY;
>    }
>
> On Fri, 28 Jun 2019 at 01:26, Gerald Gamrath <gamrath at zib.de 
> <mailto:gamrath at zib.de>> wrote:
>
>     Dear Mahdi,
>
>     I am sorry, but I did not really understand what is going wrong,
>     you need to give more detail. When do you call
>     SCIPwriteTransProblem()? It does not write anything or are
>     variables missing in the .lp file?
>
>     If I understand you correctly, you have a function that adds the
>     priced variables and that should write the problem, which does not
>     happen, and also some output that you would expect which should be
>     printed at the end of the function is not printed. I can only
>     guess that you have some if conditions in the function that return
>     earlier and thus, you do not reach the end of the function. But I
>     cannot help you debug your code. You could compile in debug mode
>     and run it with gdb to set break points and go step-by-step to see
>     what happens, if you cannot identify it just by looking at the code.
>
>     Best,
>     Gerald
>
>     On 26.06.19 08:31, mahdi noorizadegan wrote:
>>     Hi Gerald,
>>
>>     I have a pricing procedure which finds variables with negative
>>     reduced cost.
>>     Once they are found they are added to the master problem.
>>     However, the .lp file via SCIPwriteTransProblem is not created
>>     after addition. It is set to create .lp file after addition of
>>     variables.
>>
>>     I do cout "check" at the end of the variable adding function
>>     (before return SCIP_OKAY) and also after call for this function.
>>     While it leaves the function and starts the pricing procedure, it
>>     does not print the check point after the var adding function.
>>     Therefore no .lp file is created.
>>     Could you please let me know what I have done wrong?
>>
>>     Regards,
>>     Mahdi
>>
>>
>>     On Sat, 25 May 2019 at 12:58, Gerald Gamrath <gamrath at zib.de
>>     <mailto:gamrath at zib.de>> wrote:
>>
>>         Dear Mahdi,
>>
>>         even if you create a model with only linear constraints, SCIP
>>         might upgrade them in presolving to specialized linear
>>         constraints like knapsack or set cover constraints. SCIP does
>>         not do this if you marked a constraint to be modifiable,
>>         which you should have done if priced variables will
>>         potentially be added to the constraint. On the other hand, if
>>         you will not add any priced variables to the constraint, you
>>         don't need to mark it to be modifiable, but you should also
>>         not need its dual value.
>>
>>         I would suggest you check what type the constraint has via
>>         SCIPconshdlrGetName(SCIPconsGetHdlr(cons)) either in gdb or
>>         in your code.
>>
>>         Best,
>>         Gerald
>>
>>         On 22.05.19 14:45, mahdi noorizadegan wrote:
>>>         Hello,
>>>
>>>         I am implementing an IP using branch and price method.
>>>         When I want to get the dual value of constraints which are
>>>         all linear, I get the following error
>>>
>>>         [src/scip/cons_linear.c:17033] ERROR: constraint is not linear
>>>
>>>         What can be wrong?
>>>
>>>         Looking forward to hearing from you,
>>>         Regards,
>>>         Mahdi
>>>
>>>         _______________________________________________
>>>         Scip mailing list
>>>         Scip at zib.de  <mailto:Scip at zib.de>
>>>         https://listserv.zib.de/mailman/listinfo/scip
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20190630/7d5eaca2/attachment.html>


More information about the Scip mailing list