[SCIP] SCIP finding efficacious cuts as non-efficacious

Naga Venkata Chaitanya Gudapati - nagavenkata.gudapati@studio.unibo.it nagavenkata.gudapati at studio.unibo.it
Sun Nov 29 11:04:08 CET 2020


Thanks a lot, Ambros.

Your answer helped me. I am able to add cuts which are much closer 1.  I have another set of parameters to play with now. Thanks again.


________________________________________
From: Scip <scip-bounces at zib.de> on behalf of Ambros Gleixner <gleixner at zib.de>
Sent: Saturday, November 28, 2020 7:41 PM
To: scip at zib.de
Subject: Re: [SCIP] SCIP finding efficacious cuts as non-efficacious

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
>
_______________________________________________
Scip mailing list
Scip at zib.de
https://listserv.zib.de/mailman/listinfo/scip



More information about the Scip mailing list