$title Transportation Model as Equilibrium Problem (TRANSMCP,SEQ=126)
* Dantzig's original transportation model (TRNSPORT) is
* reformulated as a linear complementarity problem. We first
* solve the model with fixed demand and supply quantities, and
* then we incorporate price-responsiveness on both sides of the
* market.
*
* References: Dantzig, G B., Linear Programming and Extensions
* Princeton University Press, Princeton, New Jersey, 1963,
* Chapter 3-3.
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 325
SAN-DIEGO 575 /,
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 /;
TABLE D(I,J) distance in thousands of miles
NEW-YORK CHICAGO TOPEKA
SEATTLE 2.5 1.7 1.8
SAN-DIEGO 2.5 1.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 ;
PARAMETER PBAR(J) Reference price at demand node J;
POSITIVE
VARIABLES
W(I) shadow price at supply node i,
P(J) shadow price at demand node j,
X(I,J) shipment quantities in cases;
EQUATIONS
SUPPLY(I) supply limit at plant i,
FXDEMAND(J) fixed demand at market j,
PRDEMAND(J) price-responsive demand at market j,
PROFIT(I,J) zero profit conditions;
PROFIT(I,J).. W(I) + C(I,J) =G= P(J);
SUPPLY(I).. A(I) =G= SUM(J, X(I,J));
FXDEMAND(J).. SUM(I, X(I,J)) =G= B(J);
PRDEMAND(J).. SUM(I, X(I,J)) =G= B(J) * (PBAR(J)/P(J))**ESUB(J);
* Declare models including specification of equation-variable
* association:
MODEL FIXEDQTY / PROFIT.X, SUPPLY.W, FXDEMAND.P/ ;
MODEL EQUILQTY / PROFIT.X, SUPPLY.W, PRDEMAND.P/ ;
* Initial estimate:
P.L(J) = 1;
W.L(I) = 1;
PARAMETER REPORT(*,*,*) Summary report;
SOLVE FIXEDQTY USING MCP;
REPORT("FIXED",I,J) = X.L(I,J);
REPORT("FIXED","Price",J) = P.L(J);
REPORT("FIXED",I,"Price") = W.L(I);
* Calibrate the demand functions:
PBAR(J) = P.L(J);
* Replicate the fixed demand equilibrium:
SOLVE EQUILQTY USING MCP;
REPORT("EQUIL",I,J) = X.L(I,J);
REPORT("EQUIL","Price",J) = P.L(J);
REPORT("EQUIL",I,"Price") = W.L(I);
* Compute a counter-factual equilibrium:
C("SEATTLE","CHICAGO") = 0.5 * C("SEATTLE","CHICAGO");
SOLVE FIXEDQTY USING MCP;
REPORT("FIXED",I,J) = X.L(I,J);
REPORT("FIXED","Price",J) = P.L(J);
REPORT("FIXED",I,"Price") = W.L(I);
* Replicate the fixed demand equilibrium:
SOLVE EQUILQTY USING MCP;
REPORT("EQUIL",I,J) = X.L(I,J);
REPORT("EQUIL","Price",J) = P.L(J);
REPORT("EQUIL",I,"Price") = W.L(I);
DISPLAY REPORT;