$title Transportation Model as Equilibrium Problem (TRANSMCP,SEQ=126) $onText 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. Dantzig, G B, Chapter 3.3. In Linear Programming and Extensions. Princeton University Press, Princeton, New Jersey, 1963. Keywords: linear complementarity problem, transportation problem, equilibrium model, scheduling $offText Set i 'canning plants' / seattle, san-diego / j 'markets' / new-york, chicago, topeka /; Parameter a(i) 'capacity of plant i in cases' / seattle 350 san-diego 600 / b(j) 'demand at market j in cases' / 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 Variable w(i) 'shadow price at supply node i' p(j) 'shadow price at demand node j' x(i,j) 'shipment quantities in cases'; Equation 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 / 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(i,j,"fixed") = x.l(i,j); report("price",j,"fixed") = p.l(j); report(i,"price","fixed") = w.l(i); * calibrate the demand functions: pbar(j) = p.l(j); * replicate the fixed demand equilibrium using flexible demand func: solve equilqty using mcp; report(i,j,"flex") = x.l(i,j); report("price",j,"flex") = p.l(j); report(i,"price","flex") = w.l(i); * compute a counter-factual equilibrium using fixed demand func: c("seattle","chicago") = 0.5*c("seattle","chicago"); solve fixedqty using mcp; report(i,j,"fixed CF") = x.l(i,j); report("price",j,"fixed CF") = p.l(j); report(i,"price","fixed CF") = w.l(i); * compute a counter-factual equilibrium using flexible demand func: solve equilqty using mcp; report(i,j,"flex CF") = x.l(i,j); report("price",j,"flex CF") = p.l(j); report(i,"price","flex CF") = w.l(i); display report; execute_unload 'mcpReport.gdx', report;