ferris43.gms : Educational embedded complemenarity system model

Description

Embedded Complementarity System
-------------------------------

The problem to solve is:
  min_x  f(x,y)  st  g(x,y) <= 0
plus the constraint that
  H(x,y,lambda) = 0
where lambda is the multiplier on the g(x,y) <= 0 constraint.

We use EMP to specify that the variable lambda appearing in the
algebra is not a decision variable in any agent's model, but rather
it is the dual variable to equation g.  N.B.: the equation g should
be a typical constraint owned by an optimizing agent.

We can describe the optimization model in two ways.  The "top-down"
approach starts with a long-form solve statement and one minimizing
agent owning all vars and equs.  The dualequ keyword removes H and y
from this agent.  The "bottom-up" approach starts with an
equilibrium system, adds a minimizing agent owning just the right
equations and vars, and includes H and y as part of a separate VI
agent.

dualequ H y
dualvar lambda g

References:
Ferris et al, An extended mathematical programming framework,
Computers and Chemical Engineering 33, p.1973-1982, 2009

Contributors: Jan-H. Jagla, November 2009.  Steve, 2017


Small Model of Type : ECS


Category : GAMS EMP library


Main file : ferris43.gms

$title Educational embedded complementarity system model (FERRIS43,SEQ=24)

$ontext

  Embedded Complementarity System
  -------------------------------

  The problem to solve is:
    min_x  f(x,y)  st  g(x,y) <= 0
  plus the constraint that
    H(x,y,lambda) = 0
  where lambda is the multiplier on the g(x,y) <= 0 constraint.

  We use EMP to specify that the variable lambda appearing in the
  algebra is not a decision variable in any agent's model, but rather
  it is the dual variable to equation g.  N.B.: the equation g should
  be a typical constraint owned by an optimizing agent.

  We can describe the optimization model in two ways.  The "top-down"
  approach starts with a long-form solve statement and one minimizing
  agent owning all vars and equs.  The dualequ keyword removes H and y
  from this agent.  The "bottom-up" approach starts with an
  equilibrium system, adds a minimizing agent owning just the right
  equations and vars, and includes H and y as part of a separate VI
  agent.

  dualequ H y
  dualvar lambda g

References:
Ferris et al, An extended mathematical programming framework,
Computers and Chemical Engineering 33, p.1973-1982, 2009

Contributors: Jan-H. Jagla, November 2009.  Steve, 2017

$offtext

variables obj, x, y;
positive variable lambda;
equations defobj, g, H;

defobj.. obj =e= sqr(x-y);
g.. y =g= x + 1;

H.. y + lambda =e= 2;

model ecs / defobj, g, H /;
file empinfo / '%emp.info%' /;

*-----------------------------------------------------------------------------
* Use long-form solve statement and peel off H and y via the dualequ directive
putclose empinfo
'dualequ H y' /
'dualvar lambda g' /
;
solve ecs using emp minimizing obj;


*------------------------------------------------------------------------
* Use short-form solve statement and build the equilibrium model in EMP,
* so H and y never get into minimizing agent's model
putclose empinfo
'equilibrium' /
' min obj x g defobj' /
' vi H y' /
' dualvar lambda g' /
;
solve ecs using EMP;


*------------------------------------------------------
* Write this model down manually and verify solution
equation dLdx;

dLdx.. ( - 2*(x - y))/(-1) + lambda =N= 0;

model mcp / g.lambda,dLdx.x,H.y /;
mcp.iterlim = 0;
solve mcp using MCP;
abort$(mcp.objval > 1e-6) 'Solutions not the same';