hark-oligop.gms : SPE model from Harker - oligopoly version

Description

A spatial price equilibrium model is used to demonstrate different
ways of modeling market behavior. In this variant, we look at
the Cournot-Nash model that arises when we assume an oligopoly,
i.e. the production in each region is controlled by a single firm,
where the regional firms are independent.

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

Contributor: Steven Dirkse, June 2011


Small Model of Type : EQUIL


Category : GAMS EMP library


Main file : hark-oligop.gms   includes :  hark-data.inc [html]

$title SPE model from Harker - oligopoly version (HARK-OLIGOP,SEQ=65)

$onText

A spatial price equilibrium model is used to demonstrate different
ways of modeling market behavior. In this variant, we look at
the Cournot-Nash model that arises when we assume an oligopoly,
i.e. the production in each region is controlled by a single firm,
where the regional firms are independent.

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

Contributor: Steven Dirkse, June 2011
$offText

$eolCom //

$include hark-data.inc

positive variables
  t(n,n,Q)   'transport quantity of firm Qs good'
  dl(L,Q)    'total demand in region L in Qs model'
  dlq(L,Q)   'demand for firm Qs goods in region L in Qs model'
  s(Q)        supply quantity
  ;
variable
  ttVar(i,j)     'total flow on arcs'
  cVar(i,j)      'unit transportation cost on arc'
  dlqVar(L,Q)    'demand for firm Qs goods in region L in firm QQs model'
  z(Q);
t.up(arc(i,j),Q)=100;

equations
  flowBal(n,Q) flow balance for Qs good in Qs model
  sBal(Q)      supply balance
  in(L,Q)      inflow balance
  out(Q)       outflow balance

  objDefD(Q)   'with transport cost allowed to vary'
  dlBalD(L,Q)  'with dlqBar allowed to vary'
  ttVarDef(i,j)
  cVarDef(i,j)
  dlqVarDef(L,Q)
  ;

objDefD(Q).. z(Q) =e=
    sum {L, (rho(L) - eta(L)*dl(L,Q)) * dlq(L,Q) }
   - (alpha(Q)*s(Q) + beta(Q)*sqr(s(Q)))
   -sum{arc(i,j), cVar(i,j) * t(i,j,Q)};

flowBal(NL(n),Q)..  sum(arc(n,j), t(n,j,Q)) =e= sum(arc(i,n), t(i,n,Q));

sBal(Q).. s(Q) =e= sum{L, dlq(L,Q)};

dlBalD(L,Q)..  dl(L,Q) =E= dlq(L,Q) + sum{QQ$[not sameas(Q,QQ)], dlqVar(L,QQ)};

in(L,Q)$[not sameas(L,Q)].. dlq(L,Q) =e= sum{arc(i,L), t(i,L,Q)};

out(Q).. s(Q) =E= dlq(Q,Q) + sum{arc(Q,j), t(Q,j,Q)};

ttVarDef(arc(i,j)).. ttVar(i,j) =E= sum{Q, t(i,j,Q)};

cVarDef(arc(i,j))..  cVar(i,j) =E= kappa(i,j) + nu(i,j)*sqr(ttVar(i,j));

dlqVarDef(L,Q).. dlqVar(L,Q) =E= dlq(L,Q);

model nash / objDefD, flowBal, sBal, dlBalD, in, out,
             ttVarDef, cVarDef, dlqVarDef /;

file myinfo / '%emp.info%' /;
put myinfo '* Cournot-Nash equilibrium version of Harker model';
put / 'equilibrium'
loop {Q,
  put / 'max' z(Q)/' ';
  loop{L,
    put dl(L,Q) dlq(L,Q);
  };
  put s(Q) /' ';
  loop{arc(i,j),
    put t(i,j,Q);
  };
  put /' ' objDefD(Q);
  loop{NL(n),
    put flowBal(n,Q);
  };
  put /' ';
  loop{L,
    put dlBalD(L,Q);
  };
  put /' ';
  loop{L$[not sameas(L,Q)],
    put in(L,Q);
  };
  put / ' ' out(Q) sBal(Q);
};
put / 'vi';
put / '  ttVarDef  ttVar';
put / '  cVarDef   cVar';
put / '  dlqVarDef dlqVar';
putclose;

solve nash using emp;

parameters tab6 table VI from page 422 Harker paper;

tab6("totProfit","oligop") = sum{Q, z.l(Q)};
tab6("totSupply","oligop") = sum{Q, s.l(Q)};
tab6("theta1","oligop") = rho('one') - eta('one')*dl.l('one','one');
tab6("theta2","oligop") = rho('two') - eta('two')*dl.l('two','two');
tab6("theta3","oligop") = rho('three') - eta('three')*dl.l('three','three');

display tab6;