empbp06.gms : Bilevel model with phantom vars owned by leader

Description

Test handling of phantom vars (i.e. vars that disappear when KKT
conditions are formed) owned by the leader in a bilevel program.

Contributor: Steve Dirkse, February 2017


Small Model of Type : GAMS


Category : GAMS Test library


Main file : empbp06.gms

$title Bilevel model with phantom vars owned by leader (EMPBP06,SEQ=716)

$onText

Test handling of phantom vars (i.e. vars that disappear when KKT
conditions are formed) owned by the leader in a bilevel program.

Contributor: Steve Dirkse, February 2017

$offText


positive variables
  v1  'outer one'
  v2  'outer two'
  vv  'outer fluff' / LO 0.52525, L 2.52525, UP 5.52525 /
  y   'inner one'
  ;
variables
  objout 'outer objective'
  objin  'inner objective'
  ;
equations
  defout
  defin
  ;
defout.. objout =e= 1/2*sqr(v1-4/5) + 1/2*sqr(v2-1/5) + 1/2*sqr(y-1);
defin..  objin  =e= 1/2*sqr(y) - y - v1*y + 2*v2*y + 3.875 * vv;

v1.L = 0.75; v1.up = 1;
v2.L = 0.25; v2.up = 1;
 y.up = 1;

model m / all /;

$echo bilevel v1 v2 vv min objin * defin > "%emp.info%"

solve m us emp min objout;

abort$[abs(v1.L - 0.8) > 1e-4] 'bad v1.L', v1.L;
abort$[abs(v2.L - 0.2) > 1e-4] 'bad v2.L', v2.L;
abort$[abs( y.L - 1.0) > 1e-4] 'bad  y.L', y.L;
scalar innerObj;
innerObj = 1/2*sqr(y.L) - y.L - v1.L*y.L + 2*v2.L*y.L + 3.875 * vv.L;
abort$[abs(objin.L - innerObj) > 1e-4] 'bad objIn.L', objIn.L, innerObj;