mcp08.gms : Test MCP that turfs up PATH proprocessing error

Description

This model turfed up a bug in the PATH preprocessor.  The bug is known
to exist in the 4.7.00 libraries - tested with GAMS Distrib 22.8.1
(Aug 2008).

Contributor: Steve Dirkse, Aug 2008.
Original problem report and model sent by:
Stefan Boeters
CPB Netherlands Bureau for Economic Policy Analysis
Sector International Economics


Small Model of Type : MCP


Category : GAMS Test library


Main file : mcp08.gms

$title Test MCP that turfs up PATH proprocessing error (MCP08,SEQ=401)

$ontext

This model turfed up a bug in the PATH preprocessor.  The bug is known
to exist in the 4.7.00 libraries - tested with GAMS Distrib 22.8.1
(Aug 2008).

Contributor: Steve Dirkse, Aug 2008.
Original problem report and model sent by:
Stefan Boeters
CPB Netherlands Bureau for Economic Policy Analysis
Sector International Economics
$offtext

$stitle small recursive model formulated as MCP

scalars
        q       probability of perfect task performance         /0.5/
        n       number of persons                               /2/
        p       product price                                   /1/
        alpha   production elasticity                           /0.3/
        r       interest rate                                   /0.05/;

variables
        w       wage
        k       capital
        pi      expected profit
        rev     revenue;

equations
        profit
        revenue
        capital
        wages;

capital..    k =e= ((alpha*q**n)/r)**(1/(1-alpha))*n**((2-alpha)/(1-alpha));

wages..      w =e= (1-alpha)*(alpha/r)**(alpha/(1-alpha))*n**(1/(1-alpha))*q**(n/(1-alpha));

revenue..    rev =e= p * k**alpha * n**(2-alpha) * q**n;

profit..     pi =e= rev - n*w - r*k;

model teams1 /capital.k, wages.w, revenue.rev, profit.pi/ ;

k.l = 1;
w.l = 1;
rev.l = 1;
pi.l = 1;

solve teams1 using mcp;

abort$(teams1.solvestat <> %solvestat.NormalCompletion% or teams1.modelstat <> %modelstat.Optimal%) 'wrong status codes';
abort$[abs(  w.l - 0.560465109945 ) > 1e-6] 'bad solution for w';
abort$[abs(  k.l - 9.607973313346 ) > 1e-6] 'bad solution for k';
abort$[abs(rev.l - 1.6013288855577) > 1e-6] 'bad solution for rev';