[SCIP] SCIP finding efficacious cuts as non-efficacious

Ambros Gleixner gleixner at zib.de
Sat Nov 28 19:41:23 CET 2020


Hi Naga,

This is a tricky one: The efficacy is not defined as the violation (in 
your case 0.00022... > 1e-4) but as the violation divided by the norm of 
the coefficient vector (in your case sqrt(7)).  So you get something 
below 1e-4, which is the default minimum value for a cut to be 
efficacious in SCIP.

But if you would like these cuts to be treated as efficacious, you can 
either set

separating/efficacynorm = 'm'

which uses the maximum norm, in your case 1; or adjust the parameters

separating/minefficacy
separating/minefficacyroot

to something smaller than 1e-4.

Hope that helps.  Happy scipping,

Ambros


Am 21.11.20 um 14:27 schrieb Naga Venkata Chaitanya Gudapati - 
nagavenkata.gudapati at studio.unibo.it:
> Hello folks,
> 
> I am trying to add some cuts to my Branch-Cut and Price problem and 
> unfortunately SCIP is reporting that a few cuts that I am adding are 
> non-efficacious even though, I think they are efficacious. The way I 
> have designed my code is that it is impossible to add non-efficacious cuts.
> 
> I am using the code from TSP example which I modified very slightly for 
> my use case,
> 
>          if (SCIPisCutEfficacious(scip, sol, row))
>                {
>                    SCIP_Bool infeasible;
>                    SCIP_CALL(SCIPaddRow(scip, row, true, &infeasible));
>                    if (infeasible)
>                    {
>                       *result = SCIP_CUTOFF;
>                       std::cout << "Added cut is infeasible" << "\n";
>                    }
>                    else
>                    {
>                       *result = SCIP_SEPARATED;
>                    }
>                 }
>                 else
>                 {
>                    SCIP_CALL(SCIPprintRow(scip, row, nullptr));
>                    SCIP_CALL(SCIPreleaseRow(scip, &row));
>                    SCIPprintSol(scip, sol, nullptr, 0);
>                    std::cout << "The cut is not Efficacious " << \n";
>                 }
> 
> This is one such cut I am trying to add
> 
> *sepa_con_1_CUT_IF158:*1 <= +1<t_z[13,4]> +1<t_z[17,4]> +1<t_z[4,36]> 
> +1<t_z[4,15]> -1<x[2][1]> -1<x[72][2]> -1<x[107][3]> <= 1e+20
> 
> and the result of +1<t_z[13,4]> +1<t_z[17,4]> +1<t_z[4,36]> 
> +1<t_z[4,15]> -1<x[2][1]> -1<x[72][2]> -1<x[107][3]> is 0.999777059 and 
> I think it is above the SCIP tolerance and should be added. The values 
> of the above variables are given here
> 
> z[13,4]                             0.626832074793241 (obj:65)
> z[17,4]                             0.577612369651203 (obj:54)
> z[4,36]                             0.239442646530025 (obj:70)
> z[4,15]                             0.612387630348795 (obj:69)
> x[2][1]                             0.239442646530025 (obj:18)
> x[72][2]                            0.577612369651203 (obj:22)
> x[107][3]                           0.239442646530025 (obj:29)
> 
> I am attaching the output of SCIPprintSol, just in case if someone is 
> wondering. I feel like I am missing something very trivial (and I hope 
> it is not a calculation error). I am wondering if someone can help me 
> debug this.
> 
> Regards,
> Naga
> 
> 
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> https://listserv.zib.de/mailman/listinfo/scip
> 


More information about the Scip mailing list