flds929.gms : Princeton Bilevel Optimization Example 9.2.9

Description

Test problem 9.3.10 in Handbook of Test Problems in Local and Global Optimization
Test problem 9.2.9 on http://titan.princeton.edu/TestProblems/chapter9.html

References:

Floudas, C A, Pardalos, P M, Adjiman, C S, Esposito, W R, Gumus, Z H, Harding,
S T, Klepeis, J L, Meyer, C A, and Schweiger, C A, Handbook of Test Problems in
Local and Global Optimization. Kluwer Academic Publishers, 1999

Bard J F, Some properties of the bilevel programming problem, Journal of
Optimization Theory and Applications, v.68 n.2, p.371-378, Feb. 1991

Contributor: Jan-H. Jagla, January 2010


Small Model of Type : BP


Category : GAMS EMP library


Main file : flds929.gms

$title Princeton Bilevel Optimization Example 9.2.9 (FLDS929,SEQ=44)

$onText

  Test problem 9.3.10 in Handbook of Test Problems in Local and Global Optimization
  Test problem 9.2.9 on http://titan.princeton.edu/TestProblems/chapter9.html

References:

Floudas, C A, Pardalos, P M, Adjiman, C S, Esposito, W R, Gumus, Z H, Harding,
S T, Klepeis, J L, Meyer, C A, and Schweiger, C A, Handbook of Test Problems in
Local and Global Optimization. Kluwer Academic Publishers, 1999

Bard J F, Some properties of the bilevel programming problem, Journal of
Optimization Theory and Applications, v.68 n.2, p.371-378, Feb. 1991

Contributor: Jan-H. Jagla, January 2010

$offText

*Solution of problem 9.2.8 on the web
scalar  x_l  /   2 /
        y1_l /   6 /
        y2_l /   0 /
        tol / 1e-6 /;

variables z, z_in, y1, y2; positive variable x;
equations ob, c0, c1, c2, c3;

ob.. x        + y2        =e=  z;

c0..     2*y1      + x*y2 =e= z_in;
c1.. x - y1   - y2        =l= -4;
c2..   - y1               =l=  0;
c3..          - y2        =l=  0;

model bilevel / all /;

$echo bilevel x min z_in y1 y2 c0 c1 c2 > "%emp.info%"

*Start from reported solution
x.l  =  x_l;
y1.l = y1_l;
y2.l = y2_l;

solve bilevel using EMP minimizing z;

abort$(   (abs( x.l -  x_l) > tol)
       or (abs(y1.l - y1_l) > tol)
       or (abs(y2.l - y2_l) > tol) ) 'Deviated from reported solution';