empdisj7.gms : Test disjunctions using negated variables in disjunctive terms

Description

This test is based on bug found in EMP from GAMS 23.9.5.

The disjunctive program to solve is
minimize 10*y1 + 10*y2 + y3
such that y1 or y2 or not y3

An optimal solution is clearly y3 = 0.
However, due to a bug, a 'not y3' in a disjunctive term was
not handled correctly.

Contributor: Stefan Vigerske, November 2012


Small Model of Type : GAMS


Category : GAMS Test library


Main file : empdisj7.gms

$title Test EMP Disjunction - Negated variables in disjunctive terms (EMPDISJ7,SEQ=583)

$onText
This test is based on bug found in EMP from GAMS 23.9.5.

The disjunctive program to solve is
minimize 10*y1 + 10*y2 + y3
such that y1 or y2 or not y3

An optimal solution is clearly y3 = 0.
However, due to a bug, a 'not y3' in a disjunctive term was
not handled correctly.

Contributor: Stefan Vigerske, November 2012
$offText

$if not set TESTTOL $set TESTTOL 1e-6

Set i /1*3/;
Binary Variable y(i);
Variable z;

Equation dummy(i);
Equation obj;

dummy(i).. y(i) =g= 0;

obj.. z =e= 10 * y('1') + 10 * y('2') + y('3');

model m / all /;

option optcr = 0;

set forms / chull, bigm, indic /;

file empinfo / '%emp.info%' /;
loop(forms,
 put empinfo;
 put 'default ' forms.tl /;
 put "disjunction y('1') dummy('1') ELSEIF y('2') dummy('2') ELSEIF not y('3') dummy('3')" /;
 putclose;

 solve m us emp min z;

 abort$(abs(z.l) > %TESTTOL%) "wrong optimal value, expected 0"
);