[Scip] scipoptsuite-3.0.0 and ziboptsuite2.1.1 give different results

Stefan Heinz heinz at zib.de
Fri Nov 30 10:00:39 MET 2012


Hi everybody,

find attached a patch which fixes that issue. Thanks again, to those who 
point out that issue to us.

All the best
Stefan

On 11/30/12 09:51, Timo Berthold wrote:
> tl;dr: Known bug in SCIP 3.0 with ranged rows which are parallel to 
> objective function
>
> Dear Hélène,
>
> > I have recently upgraded my ziboptsuite version from 2.1.1 to 3.0.0.. I run 
> a column generation program using version 2.1.1 and version 3.0.0. and 
> I obtained
> > different results (I have changed nothing in my code).
>
> I think that is a known bug of SCIP 3.0.
>
> What happens is that in presolving, the sub-problem gets reduced to
> min -y20-y21-y24
> s.t.
> 1 <= y20+y21+y24 <= 2
>
> The SCIP 3.0 release has a known problem with instances for which the 
> objective function is parallel to a ranged row.
>
> @Stefan: Could you send Hélène a patch for this?
>
> Actually, the output LP-file was wrong for the same reason (the 
> constraint is incorrectly marked as "unnecessary").
>
> Best regards
> Gregor and Timo
>
> Am 29.11.2012 13:58, schrieb Hélène Toussaint:
>>
>> Dear all,
>>
>> I have recently upgraded my ziboptsuite version from 2.1.1 to 3.0.0.. 
>> I run a column generation program using version 2.1.1 and version 
>> 3.0.0. and I obtained different results (I have changed nothing in my 
>> code).
>>
>> During the column generation, I have written one of my pricing 
>> problems into a file (before SCIPsolve) using SCIPwriteOrigProblem 
>> and the transformed sub problem (after SCIPsolve()) using 
>> SCIPwriteTransProblem. I have obtained the enclosed files subPb.lp 
>> and subPbTrans.lp. In the transformed sub problem the constraints 
>> have disappeared and so the solution found by SCIP (in solSubPb.txt) 
>> does not respect the original constraints (all variables are set to 1).
>>
>> If I use SCIPreadProb to read the file written by 
>> SCIPwriteOrigProblem and solve it with SCIPsolve then scip give me 
>> the exact result !!
>>
>> Could you please help me to understand what happens ?
>>
>> Best regards,
>>
>> Hélène
>>
>>
>>
>> _______________________________________________
>> 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 --------------
--- a/src/scip/cons_linear.c
+++ b/src/scip/cons_linear.c
@@ -6533,11 +6530,22 @@ SCIP_RETCODE updateCutoffbound(
    }
    else
    {
-      /* in case the cutoff bound is worse then currently known one we avoid additionaly enforcement and
-       * propagation
+      SCIP_CONSDATA* consdata;
+
+      consdata = SCIPconsGetData(cons);
+      assert(consdata != NULL);
+
+      /* we cannot disable the enforcement and propagation on ranged rows, because the cutoffbound could only have
+       * resulted from one side
        */
-      SCIP_CALL( SCIPsetConsEnforced(scip, cons, FALSE) );
-      SCIP_CALL( SCIPsetConsPropagated(scip, cons, FALSE) );
+      if( SCIPisInfinity(scip, -consdata->lhs) || SCIPisInfinity(scip, consdata->rhs) )
+      {
+         /* in case the cutoff bound is worse then the currently known one, we additionally avoid enforcement and
+          * propagation
+          */
+         SCIP_CALL( SCIPsetConsEnforced(scip, cons, FALSE) );
+         SCIP_CALL( SCIPsetConsPropagated(scip, cons, FALSE) );
+      }
    }
 
    return SCIP_OKAY;


More information about the Scip mailing list