Description
This simple nonconvex example is borrowed from J. A. Mirrlees. The theory of moral hazard and unobservable bevaviour: part I. Review of Economic Studies, 66: 3-21, 1999. Contributor: Jan-H. Jagla, January 2009
Small Model of Type : BP
Category : GAMS EMP library
Main file : mirrlees.gms
$title Simple Nonconvex Bilevel Programming Example (MIRRLEES,12)
$onText
This simple nonconvex example is borrowed from
J. A. Mirrlees. The theory of moral hazard and unobservable bevaviour:
part I. Review of Economic Studies, 66: 3-21, 1999.
Contributor: Jan-H. Jagla, January 2009
$offText
Equations
outerobj
innerobj;
Variables
out
in;
Positive Variables
x
y;
Scalar coef;
outerobj.. out =e= sqr(y-2) + sqr(x-1);
innerobj.. in =e= -y*exp(-sqr(x+1)) - exp(-sqr(x-1));
model outer / outerobj /
inner / innerobj /
emp / outer, inner /;
* Solve the model by reformulating it into a
* Mathematical Programs with Equilibrium Constraints (MPEC)
Equations dLdy;
dLdy.. (1 + x)*exp(-sqr(1 + x))*y + (x - 1)*exp(-sqr(x - 1)) =N= 0;
model bilevel / outer, dLdy.y /;
solve bilevel using mpec minimizing out;
scalar out_l,x_l,y_l;
out_l = out.l;
x_l = x.l;
y_l = y.l;
* Do this reformulation automatically using EMP
$echo bilevel y min in x innerobj > "%emp.info%"
solve emp using emp minimizing out;
scalar tol /1e-6/;
abort$( abs(out_l - out.l)
+ abs(x_l - x.l)
+ abs(y_l - y.l) > tol) 'Solutions differ';