$title An exchange model with endogenous provision of portering services $ontext This is a static general equilibrium exchange model with costly trade flows. There are multiple regions, each with a representative consumers. There are multiple commodities. Initial endowments of commodities, e(g,r), are randomly distributed between zero and one. Representative agents in each of these regions are endowed with a single unit of time which they may either devote to leisure or to the provision of transportation services. All agents share identical Cobb-Douglas preferences over the consumption of goods, g, and leisure, L: U(c,L) = prod(g, C(g)) * L Regions are randomly (uniformly) situated on a square field. Interregional distances are Euclidian. Goods exported from region r to region rr rely on portering services provided either by agents from region r or from region rr. When a porter carries a load from region r to region rr, he is assumed to be available to carry a return load from rr to rr, although in equilibrium there may be more porters on the trail from rr to r than there are loads to be carried. The number of porter-hours required for the transport of good g from r to rr depends on commodity g's unit weight, w(g), and the distance between regions r and rr, d(r,rr). This model is implemented as a nonlinear complementarity problem using MPSGE. $offtext SETS r Regions /r1*r10/ g Goods /g1*g10/; ALIAS (s,r,rr); PARAMETERS d(r,rr) Distance x(r) X coordinate of region r y(r) Y coordinate of region r w(g) Weight (shipping cost) e(g,r) Endowments phi(g,r,rr) Iceberg output coefficient theta Commodity value share; * Regional coordinates are randomly distributed: x(r) = UNIFORM(0,1); y(r) = UNIFORM(0,1); * Inter-regional distances are Euclidian: d(r,rr) = SQRT(SQR(x(r)-x(rr)) + SQR(y(r)-y(rr))); * Initial endowments are uniformly distributed between 0 and 1: e(g,r) = UNIFORM(0,1); * Commodity weights (transport costs) are indices between 0 and 1: w(g) = UNIFORM(0,1); * Cobb-Douglas preferences with symmetric value shares: theta = 1/CARD(g); * Iceberg output coefficient declines with distance and with * commodity weight: phi(g,r,rr) = 1-(d(r,rr)/sqrt(2))*w(g); set t(s,r,rr) Transportation routes; t(s,r,rr) = yes$((ord(r) < ord(rr)) and (sameas(s,r) or sameas(s,rr))); $ontext $model:porters * Declare variables according to their interpretation in the * economic equilibrium model: $sectors: * Unlike the algebraic model, MPSGE requires that we explicitly * omit commodities which are not in the model. This is done * using the GAMS exception operator, $: EXPORT(g,r,rr)$(not SAMEAS(r,rr)) ! Export of good g from r to rr PORTER(s,r,rr)$t(s,r,rr) ! Provision of transport services * Note: PORTER(s,r,rr) represents porter services on the r-rr route * provided by porters from region s. In this context s represents either * r or rr -- loads carried from r to rr are only carried by porters * from r or rr. $commodities: P(g,r) ! Commodity prices PL(r) ! Wage rate in region r PT(r,rr)$(not sameas(r,rr)) ! Cost of transport from r to rr $consumers: RA(r) ! Representative agents * Declare a "production" activity which removes one unit * of good g from the region r market and delivers phi(g,r,rr) * units to the corresponding region rr market: $prod:EXPORT(g,r,rr)$(not sameas(r,rr)) o:P(g,rr) q:1 i:P(g,r) q:1 i:PT(r,rr) q:(1-phi(g,r,rr)) * When a porter from s carries loads between r and rr, he provides * transport services in both directions: $PROD:PORTER(s,r,rr)$t(s,r,rr) o:PT(r,rr) q:1 o:PT(rr,r) q:1 i:PL(s) q:1 * Final demand is Cobb-Douglas: $demand:RA(r) s:1 d:P(g,r) q:1 d:PL(r) q:1 e:PL(r) q:1 ! Each region has a unit endowment of time e:P(g,r) q:e(g,r) ! and a random endowment of commodities. $report: v:welfare(r) w:RA(r) ! Generate a welfare index $offtext $sysinclude mpsgeset porters * Generate and solve the model: $include porters.gen solve porters using mcp; PORTER.L(s,r,rr)$(not t(s,r,rr)) = 0; PT.L(r,r) = 0; * Report prices: DISPLAY PT.L; * Report difference between supply and demand of portering * services: PARAMETER loads(r,rr) Aggregate loads from r to rr, xssupply(r,rr) Excess supply of portering services, deadheadpct(r,rr) Porters without loads as a percent of porters on route; loads(r,rr) = sum(g, EXPORT.L(g,r,rr)*(1-phi(g,r,rr))); xssupply(r,rr) = round(sum(s, PORTER.L(s,r,rr)$t(s,r,rr) + PORTER.L(s,rr,r)$t(s,rr,r)) - loads(r,rr) ,3); deadheadpct(r,rr)$(xssupply(r,rr) + loads(r,rr)) = round(100 * xssupply(r,rr) / (xssupply(r,rr) + loads(r,rr))); option deadheadpct:0; display xssupply, deadheadpct; * Produce a report of parameter summary(r,*) Percentage of porters on joint trail from row region; summary(r,"PLnom") = PL.L(r); summary(r,"P") = PROD(g, P.L(g,r))**(1/card(g)); summary(r,"PLreal") = PL.L(r)/summary(r,"P"); summary(r,"INCOME") = RA.L(r); summary(r,"WELFARE") = WELFARE.L(r); summary(r,"LOADS") = sum(t(r,s,rr),PORTER.L(r,s,rr)); display summary;

---- 418 VARIABLE PT.L Cost of transport from r to rr r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r1 0.244 0.105 0.199 0.212 0.302 0.068 0.181 r2 0.134 0.097 0.151 0.166 0.378 0.081 r3 0.289 0.282 0.200 0.034 0.224 0.333 0.119 0.184 r4 0.407 0.378 0.394 0.268 0.323 0.527 0.195 0.427 r5 0.208 0.227 0.194 0.145 0.040 0.412 0.412 0.166 0.121 r6 0.407 0.378 0.360 0.498 0.373 0.439 0.498 0.481 0.498 r7 0.195 0.212 0.170 0.145 0.029 0.416 0.172 0.126 r8 0.105 0.061 0.015 0.052 0.050 r9 0.339 0.297 0.275 0.286 0.246 0.296 0.430 0.325 r10 0.226 0.378 0.210 0.137 0.291 0.342 0.542 0.156 ---- 434 PARAMETER xssupply Excess supply of portering services r2 r4 r5 r6 r10 r1 0.025 0.012 r2 0.026 0.049 0.050 r3 0.001 r4 0.004 r7 0.002 r8 0.038 0.036 r9 0.011 ---- 434 PARAMETER deadheadpct Porters without loads as a percent of porters on route r2 r4 r5 r6 r10 r1 52 100 r2 54 90 75 r3 4 r4 37 r7 21 r8 69 94 r9 36Notice in the summary table that regions with low read wages and low incomes carry most of the loads:

---- 445 PARAMETER summary Percentage of porters on joint trail from row region PLnom P PLreal INCOME WELFARE LOADS r1 0.407 1.114 0.365 4.081 0.365 0.088 r2 0.378 1.126 0.336 3.105 0.277 0.254 r3 0.394 1.109 0.355 4.115 0.370 0.050 r4 0.564 1.096 0.515 6.203 0.547 r5 0.412 1.110 0.372 4.041 0.362 0.109 r6 0.498 1.087 0.458 5.188 0.466 0.053 r7 0.468 1.114 0.420 5.011 0.442 0.027 r8 0.542 1.146 0.473 5.895 0.501 0.011 r9 0.481 1.099 0.437 4.856 0.433 0.081 r10 0.583 1.108 0.526 6.409 0.558