Description
This model was used in 1974 by the World Bank for a background study for the energy task force. It was used to analyze output policies for OPEC. At the time the study was carried out no full optimization was attempted.
Small Model of Type : NLP
Category : GAMS Model library
Main file : otpop.gms
$title A Dynamic model of OPEC Trade and Production (OTPOP,SEQ=47)
$onText
This model was used in 1974 by the World Bank for a background
study for the energy task force. It was used to analyze output policies
for OPEC. At the time the study was carried out no full optimization
was attempted.
Blitzer, C, Meeraus, A, and Stoutjesdijk, A, A Dynamic model of OPEC Trade
and Production. Journal of Development Economics, 2 (1975), 318-335.
Keywords: nonlinear programming, production policy, trade policy, energy economics
$offText
Set
tt 'total time horizon' / 1965*1990 /
th(tt) 'historical years' / 1965*1974 /
t(tt) 'model horizon' / 1974*1990 /
tp(tt) 'projection years' / 1975*1990 /
n 'memory (years)' / 1*3 /;
Parameter
db(t) 'demand scaling constant'
xb(t) 'OPEC production capacity'
rd(t) 'absorptive capacity'
del(t) 'foreign assets accumulation'
alpha(n) 'weights for ph' / 1 .5, 2 .3, 3 .2 /
phis(tt) 'historical prices ($ bbl)' / 1965*1971 3.5, 1972 4.0, 1973 7.0, 1974 10.0 /
y(tt) 'value of year'
xtr(t) 'x target'
ptr(t) 'p target';
Scalar
a 'price elasticity of demand' / 0 /
b 'non-OPEC price elasticity' / .2 /
g 'long-run demand growth' / .04 /
r 'real rate of return' / .03 /
gr 'growth of absorptive capacity' / .07 /
c 'production and delivery cost' / .25 /
l 'investment lag' / 4 /
v 'terminal discounting' / .25 /
ph 'alternative investment trigger ($ per bbl)' / 3.0 /
pb 'all new energy from alternatives ($ per bbl)' / 9.0 /
xb74 'OPEC production capacity (mill bpd)' / 32.25 /
x74 'OPEC production (mill bpd)' / 29.4 /
d74 'world energy demand (mill bpd)' / 88.2 /
db74 'demand scaling constant'
rd74 'absorptive capacity in year 1974' / 20 /
con 'shift parameter constant';
db74 = d74*phis("1974")**a;
db(t) = db74*(1 + g)**(ord(t) - 1);
con = g/pb**b/(pb - ph);
rd(t) = rd74*(1 + gr)**(ord(t) - 1);
del(t) = (1 + r)**(card(t) - ord(t));
y(tt) = 1964 + ord(tt);
xb(t) = xb74 + 3.0*min(y(t) - 1974,6) + .9*max(y(t) - 1980,0);
xtr(t) = min(xb(t),x74*1.02**(ord(t) - 1));
ptr(t) = 10*1.02**(ord(t) - 1);
display db74, db, rd, del, con, y, xb, xtr, ptr;
$sTitle Model Definition
Variable
x(tt) 'sales of OPEC oil (mill bpd)'
d(tt) 'demand for energy (mill bpd)'
as(tt) 'shift parameter'
p(tt) 'price of energy ($ per bbl)'
pd(tt) 'expected price of energy ($ per bbl)'
k 'final foreign assets (bill $)'
z 'value of oil in ground (bill $)'
xdev 'output deviation'
pdev 'price deviation'
pi 'criterion';
Positive Variable x;
Equation
dem(t) 'energy demand (mill bpd)'
sup(t) 'OPEC supply (mill bpd)'
adef(tt) 'shift parameter definition'
pdef(tt) 'expected price definition ($ per bbl)'
kdef 'foreign assets (bill $)'
zdef 'nonproduced reserves (bill $)'
xtrack 'x tracking error definition'
ptrack 'p tracking error definition'
obj 'criterion definition'
objx 'alternate criterion definition';
dem(t).. d(t) =e= db(t)*p(t)**(-a);
sup(t).. x(t) =e= d(t) - as(t)*p(t)**b;
adef(tt)$tp(tt).. as(tt) =e= as(tt-1) + con*d(tt-1)*(pd(tt-l)-ph);
pdef(tt).. pd(tt) =e= sum(n, alpha(n)*p(tt-(ord(n) - 1)));
kdef.. k =e= sum(t, del(t)*(.365*(1 - c)*p(t)*x(t) - rd(t)));
zdef.. z =e= v*sum(t, .365*(xb(t) - x(t))*p(t + (card(t) - ord(t))));
xtrack.. xdev =e= sum(t, sqr(xtr(t) - x(t)));
ptrack.. pdev =e= sum(t, sqr(ptr(t) - p(t)));
obj.. pi =e= k + z;
objx.. pi =e= sum(t, del(t)*(.365*(1 - c)*p(t)*x(t) - rd(t)))
+ v*sum(t, .365*(xb(t) - x(t))*p(t + (card(t) - ord(t))));
Model
otpop1 / dem, sup, adef, pdef, kdef, zdef, obj /
otpop2 / dem, sup, adef, pdef, ptrack /
otpop3 / dem, sup, adef, pdef, objx /;
x.up(t) = xb(t);
p.lo(tt) = 1;
p.fx(th) = phis(th);
x.fx(th) = x74;
solve otpop2 minimizing pdev using nlp;
solve otpop3 maximizing pi using nlp;
kdef.m = 1;
zdef.m = 1;
solve otpop1 maximizing pi using nlp;