harker.gms : Models of Spatial Competition

Description

```A spatial equilibrium model is used to demonstrate different
ways of modeling market behavior. Competitive and Monopolistic markets
are modeled using consumers' and producers' surplus. A Cournot-Nash
Oligopoly model is solved by a Diagonalization or Jacobi algorithm.
```

Reference

• Harker, P T, Alternative Models of Spatial Competition. Operations Research 34, 3 (1986), 410-425.

Small Model of Type : NLP

Category : GAMS Model library

Main file : harker.gms

``````\$title Models of Spatial Competition (HARKER,SEQ=85)

\$onText
A spatial equilibrium model is used to demonstrate different
ways of modeling market behavior. Competitive and Monopolistic markets
are modeled using consumers' and producers' surplus. A Cournot-Nash
Oligopoly model is solved by a Diagonalization or Jacobi algorithm.

Network structure:

one      two     three        demand and supply points
/  \       \     /
/    \       \   /
four -- five -- six              transport nodes

linear demand function:        demand(price) = (rho - price)/eta

linear marginal cost function: cost(supply) = alpha + 2*beta*supply

transport cost:                cost(t(ij)) = kappa(ij)*t(ij) + nu(ij)*t(ij)^3

Harker, P T, Alternative Models of Spatial Competition. Operations
Research 34, 3 (1986), 410-425.

Keywords: nonlinear programming, spatial equilibrium model, micro economics,
market behavior, competitive markets, monopolistic markets, Cournot-Nash
oligopoly
\$offText

Set
n    'nodes'   / one, two, three, four, five, six /
l(n) 'regions' / one, two, three                  /;

Alias (l,lp), (n,np);

Table coefs(l,*) 'demand and supply data'
alpha  beta  rho  eta
one       1.0    .5   19  .2
two       2.0    .4   27  .01
three     1.5    .3   30  .3 ;

Table pairs(n,np,*) 'transport data'
kappa   nu
one.four        1   .5
one.five        2   .2
two.six         3   .3
three.six       1   .4
four.one        2   .3
four.five       1   .1
four.six        1   .1
five.one        3   .5
five.four       2   .2
five.six        1  1.0
six.two         2  .25
six.three       2   .2
six.four        1   .9
six.five        3   .8;

Set arc(n,np) 'active arcs';

arc(n,np) = pairs(n,np,"kappa");

Positive Variable
t(n,np)  'transport'
tt(l,lp) 'notional o-d flows'
d(n)     'demand'
s(n)     'supply';

Variable obj 'objective value';

Equation
bal      'supply demand balance'
sbal(l)  'supply balance'
dbal(l)  'demand balance'
nbal(n)  'node balance'
in(l)    'inflow balance'
objdef   'objective definition'
objoli   'objective definition oligopoly';

Scalar
pm 'product market type'
tm 'transport market type';

bal..     sum(l, d(l)) =e= sum(l, s(l));

nbal(n).. s(n)\$l(n) + sum(arc(np,n), t(arc)) =e= d(n)\$l(n) + sum(arc(n,np), t(arc));

objdef..  obj =e= sum(l, coefs(l,"rho")*d(l) - pm*coefs(l,"eta")*sqr(d(l)))
-  sum(l, coefs(l,"alpha")*s(l) + coefs(l,"beta")*sqr(s(l)))
-  sum(arc, pairs(arc,"kappa")*t(arc)
+ tm*pairs(arc,"nu")*power(t(arc),3));

Model hark / bal, nbal, objdef /;

Parameter
rep1 'transport summary'
rep2 'supply demand and price summary';

s.l(l) = 25;
d.l(l) = 25;

* 1. classical spatial price equilibrium: perfectly competitive
* producers and suppliers facing average cost pricing
* of transportation:

pm =  .5;
tm = 1/3;

solve hark maximizing obj using nlp;

rep1(arc,       "cspe2") = t.l(arc);
rep2("supply",l,"cspe2") = s.l(l);
rep2("demand",l,"cspe2") = d.l(l);
rep2("price ",l,"cspe2") = coefs(l,"rho") - coefs(l,"eta")*d.l(l);

* 2. monopoly pricing equilibrium in which the firm owns both
* means of production and distribution network (hence, marginal
* cost pricing prevails at both the factory and the railhead):

pm = 1;
tm = 1;

solve hark maximizing obj using nlp;

rep1(arc,       "monop1") = t.l(arc);
rep2("supply",l,"monop1") = s.l(l);
rep2("demand",l,"monop1") = d.l(l);
rep2("price ",l,"monop1") = coefs(l,"rho") - coefs(l,"eta")*d.l(l);

* 3. monopoly pricing equilibrium in which the firm uses the
* distribution network with average cost pricing:

pm =   1;
tm = 1/3;

solve hark maximizing obj using nlp;

rep1(arc,       "monop2") = t.l(arc);
rep2("supply",l,"monop2") = s.l(l);
rep2("demand",l,"monop2") = d.l(l);
rep2("price ",l,"monop2") = coefs(l,"rho") - coefs(l,"eta")*d.l(l);

* 4. multi-producer oligopoly model with average cost pricing

pm =   1;
tm = 1/3;

* Additional equation required to solve the a Cournot-Nash
* Oligopoly model by a Diagonalization or Jacobi algorithm.
*
* note the use of d.l(l)-tt.l(lp,l) which holds the values of the
* previous iteration

Variable tt(l,lp) 'notional o-d flows';

Equation
sbal(l) 'supply balance'
dbal(l) 'demand balance'
in(l)   'inflow balance'
objoli  'objective definition oligopoly';

sbal(l).. s(l) =e= sum(lp, tt(l,lp));

dbal(l).. d(l) =e= sum(lp, tt(lp,l));

in(l)..   d(l) =e= tt(l,l) + sum(arc(n,l), t(arc));

objoli..  obj  =e= sum(l, coefs(l,"rho")*d(l) - pm*coefs(l,"eta")
*  sum(lp, (d.l(l) - tt.l(lp,l) + tt(lp,l))*tt(lp,l)))
-  sum(l, coefs(l,"alpha")*s(l) + coefs(l,"beta")*sqr(s(l)))
-  sum(arc, pairs(arc,"kappa")*t(arc)
+ tm*pairs(arc,"nu")*power(t(arc),3));

Model harkoli / nbal, sbal, dbal, in, objoli /;

Set iter 'iteration count' / iter1*iter20 /;

Parameter
objold          'previous objective'
irep(iter,n,np) 'iteration summary';

option irep:8:1:2, limCol = 0, limRow = 0;

tt.l(l,lp) = 1;

objold = 0;
harkoli.objVal = 1;

loop(iter\$(abs(objold - harkoli.objVal) > 1e-5),
objold = harkoli.objVal;
solve harkoli maximizing obj using nlp;
harkoli.solPrint = %solPrint.Quiet%;
irep(iter,arc)   = t.l(arc);
);

display irep;

rep1(arc,       "oligop") = t.l(arc);
rep2("supply",l,"oligop") = s.l(l);
rep2("demand",l,"oligop") = d.l(l);
rep2("price ",l,"oligop") = coefs(l,"rho") - coefs(l,"eta")*d.l(l);

display rep1, rep2;
``````