hark-oligop-ind.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. This model starts from the Cournot-Nash solution and verifies that this is a solution to each of the agent optimization problems considered in turn. Harker, P T, Alternative Models of Spatial Competition. Operations Research 34, 3 (1986), 410-425. Contributor: Steven Dirkse, June 2011 either include hark-oligop or run with a restart from the hark-oligop save file

**Small Model of Type : ** EQUIL

**Category :** GAMS EMP library

**Main file :** hark-oligop-ind.gms

```
$title SPE model from Harker - oligopoly version (HARK-OLIGOP-IND,SEQ=66)
$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. This model starts from the
Cournot-Nash solution and verifies that this is a solution to each of
the agent optimization problems considered in turn.
Harker, P T, Alternative Models of Spatial Competition. Operations
Research 34, 3 (1986), 410-425.
Contributor: Steven Dirkse, June 2011
$offtext
* either include hark-oligop or
* run with a restart from the hark-oligop save file
$include hark-oligop.gms
set Q1(Q) 'one q to solve for';
parameter
cBar(i,j) 'cost coeff for a price-taker in the transport market'
dlqBar(L,Q)
zBar(Q)
sBar(Q)
;
cBar(arc(i,j)) = cVar.L(i,j);
dlqBar(L,Q) = dlq.l(L,Q);
zBar(Q) = z.l(Q);
sBar(Q) = s.l(Q);
Equations
objDef1 objective definition oligopoly
flowBal1(n,Q)
sBal1(Q)
dlBal1(L,Q)
in1(L,Q) inflow balance
out1(Q) outflow balance
;
Variable obj objective value ;
objDef1.. obj =e= sum{Q1(Q),
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), cBar(i,j) * t(i,j,Q)}
};
flowBal1(NL(n),Q1(Q)).. sum(arc(n,j), t(n,j,Q)) =e= sum(arc(i,n), t(i,n,Q));
sBal1(Q1(Q)).. s(Q) =e= sum{L, dlq(L,Q)};
dlBal1(L,Q1(Q)).. dl(L,Q) =E= dlq(L,Q)
+ sum{QQ$[not sameas(Q,QQ)], dlqBar(L,QQ)};
in1(L,Q1(Q))$[not sameas(L,Q)].. dlq(L,Q) =e= sum{arc(i,L), t(i,L,Q)};
out1(Q1(Q)).. s(Q) =E= dlq(Q,Q) + sum{arc(Q,j), t(Q,j,Q)};
model oli1 / objDef1, flowBal1, sBal1, dlBal1, in, out / ;
dl.up(L,Q) = 100;
dlq.up(L,Q) = 100;
s.up(Q) = 100;
scalar dt;
loop{Qi,
Q1(Q) = sameas(Q,Qi);
solve oli1 maximizing obj using nlp;
dt = zBar(Qi) - z.l(Qi);
abort$[abs(zBar(Qi)-z.l(Qi)) > 1e-3] 'NLP found different objective', Qi, zBar, z.l, dt;
dt = sBar(Qi) - s.l(Qi);
abort$[abs(sBar(Qi)-s.l(Qi)) > 1e-3] 'NLP found different supply', Qi, sBar, s.l, dt;
};
```