mcp10.gms : MCP model with negative equ.var

Description

```Builds on transmcp and tests the 'sign flipping' for different solvelink values

Contributor: Alex
```

Small Model of Type : GAMS

Category : GAMS Test library

Main file : mcp10.gms

``````\$title MCP model with negative equ.var (MCP10,SEQ=604)

\$ontext
Builds on transmcp and tests the 'sign flipping' for different solvelink values

Contributor: Alex
\$offtext

Sets
i   canning plants   / seattle, san-diego /
j   markets          / new-york, chicago, topeka / ;

Parameters

a(i)  capacity of plant i in cases (when prices are unity)
/    seattle     350
san-diego   600  /,

b(j)  demand at market j in cases (when prices equal unity)
/    new-york    325
chicago     300
topeka      275  /,

esub(j)  price elasticity of demand (at prices equal to unity)
/    new-york    1.5
chicago     1.2
topeka      2.0  /;

* changed distance to get some non-zero PIs on the supply constraint

Table d(i,j)  distance in thousands of miles
new-york       chicago      topeka
seattle          2.5           1.7          1.8
san-diego       52.5          31.8          1.4  ;

Scalar f  freight in dollars per case per thousand miles  /90/ ;

Parameter c(i,j)  transport cost in thousands of dollars per case ;

c(i,j) = f * d(i,j) / 1000 ;

Variables
x(i,j)  shipment quantities in cases
z       total transportation costs in thousands of dollars ;

positive variable x;

Equations
cost        define objective function
supply(i)   observe supply limit at plant i
demand(j)   satisfy demand at market j ;

cost ..        z  =e=  sum((i,j), c(i,j)*x(i,j)) ;

supply(i) ..   sum(j, x(i,j))  =l=  a(i);

demand(j) ..   sum(i, x(i,j))  =g=  b(j) ;

* new equs and vars needed for mcp

Positive variables
w(i)             shadow price at supply node i,
p(j)             shadow price at demand node j;

Equations
supplyx(i)       reoriented equation
profit(i,j)      zero profit conditions;

profit(i,j)..   w(i) + c(i,j)   =g= p(j);

supplyx(i)..     a(i) =g= sum(j, x(i,j));

*     declare models including specification of equation-variable
*     association:

models transport / cost,supply ,demand /
transx    / cost,supplyx,demand /
transmcp  / profit.x,-supply.w , demand.p/
transmcpX / profit.x, supplyx.w, demand.p/ ;

sets runs        / lp,lpX,mcpX,0*6 /

parameter rep(i,runs) Q&D summary report on supply marginals;

option limcol=0,limrow=0;

solve transport min z us lp;
rep(i,'lp') = -supply.m(I);

solve transx us lp min z;
rep(i,'lpX') = supplyx.m(I);

solve transmcpx us mcp;
rep(i,'mcpX') = supplyx.m(I);

option solprint=off;

scalar handle,count,rc;

supply.m(i) = 0;
solve transmcp us mcp;
handle = transmcp.handle;
count = 0;
while {not handlecollect(handle),
abort\$[count >= 10] 'waited but grid solve not finished';
count = count + 1;
display\$sleep(0.1) 'was sleeping for 0.1 secs', count;
};
display\$handledelete(handle) 'trouble deleting handle';
};
handle = transmcp.handle;
abort\$rc 'waited but multi-threaded solve not finished';
abort\$[0=handlecollect(handle)] 'error collecting model solution';
display\$handledelete(handle) 'trouble deleting handle';
};