Description
The Gas Trade Model (GTM) models interrelated gas markets. Prices may be free to move as to equilibrate supplies and demand. Disequilibria can be introduced with controls over prices and/or quantities traded.
Small Model of Type : NLP
Category : GAMS Model library
Main file : gtm.gms
$title An International Gas Trade Model (GTM,SEQ=53)
$onText
The Gas Trade Model (GTM) models interrelated gas markets.
Prices may be free to move as to equilibrate supplies and
demand. Disequilibria can be introduced with controls over
prices and/or quantities traded.
Manne, A S, and Beltramo, M A, GTM: An International Gas Trade Model ,
International Energy Program Report. Stanford University, 1984.
Keywords: nonlinear programming, gas trade, price elasticity, energy economics,
international trade
$offText
Set
i 'supply regions' / mexico, alberta-bc, atlantic, appalacia
us-gulf, mid-cont, permian-b, rockies
pacific, alaska /
j 'demand regions' / mexico, west-can, ont-quebec, atlantic
new-engl, ny-nj, mid-atl, south-atl
midwest, south-west, central, n-central
west, n-west /
jfx(j) 'regions with fixed demand' / mexico, west-can, ont-quebec, atlantic /
ij(i,j) 'feasible links';
Table sdat(i,*) 'supply data'
ref-p1 ref-q1 ref-p2 ref-q2 limit
* ($/mcf) (tcf) ($/mcf) (tcf) (tcf)
mexico 2.0 .5 2.5
alberta-bc 3.0 1.6 3.75
atlantic .25 .03 .3
appalacia 3.5 .58 7.0 .65 .72
us-gulf 3.5 7.88 7.0 8.82 9.75
mid-cont 3.5 2.07 7.0 2.31 2.55
permian-b 3.5 1.39 7.0 1.55 1.72
rockies 3.5 1.16 7.0 1.30 1.44
pacific 3.5 .42 7.0 .47 .52
alaska 2.0 .80 2.0 .1 inf;
Table ddat(j,*) 'demand data'
ref-p ref-q elas tax ex-dem
* ($/mcf) (tcf) ($/mcf) (tcf)
mexico 1.0 2.2 -.5
west-can 3.0 1.47 -.5
ont-quebec 3.5 1.38 -.5
atlantic 3.5 .20 -.5
new-engl 9.37 .76 -.60
ny-nj 8.33 1.18 -.66
mid-atl 8.26 .89 -.65
south-atl 8.07 1.62 -.89
midwest 8.01 2.96 -.65
south-west 7.29 6.04 -.84
central 7.79 1.17 -.67
n-central 8.06 1.51 -.54
west 8.18 2.10 -.43
n-west 9.39 .36 -.57;
Parameter
supa(i) 'supply constant a'
supb(i) 'supply constant b'
supc(i) 'supply capacity'
dema(j) 'demand constant a'
demb(j) 'demand constant b';
supc(i) = sdat(i,"limit");
supb(i) = ((sdat(i,"ref-p1") - sdat(i,"ref-p2"))
/ (1/(supc(i) - sdat(i,"ref-q1"))-1/(supc(i) - sdat(i,"ref-q2"))))
$ (supc(i) <> inf);
supa(i) = sdat(i,"ref-p1") - supb(i)/(supc(i) - sdat(i,"ref-q1"));
* we rely on supa(i) evaluating to exactly zero in some cases
supa(i) = round(supa(i),4);
supc(i)$(supc(i) = inf) = 100;
sdat(i,"sup-a") = supa(i);
sdat(i,"sup-b") = supb(i);
display sdat;
demb(j) = 1/ddat(j,"elas") + 1;
dema(j) = ddat(j,"ref-p")/demb(j)/ddat(j,"ref-q")**(demb(j) - 1);
ddat(j,"dem-a") = dema(j);
ddat(j,"dem-b") = demb(j);
display ddat;
Table utc(i,j) 'unit transport cost ($ per mcf)'
mexico west-can ont-quebec atlantic new-engl ny-nj mid-atl south-atl midwest south-west
mexico .25 2.29 2.22 2.03 1.96 1.25
alberta-bc .40 .90 1.15 1.10 1.10 1.55 .80 1.25
atlantic 1.50
appalacia .72 .46
us-gulf 2.12 1.08 1.01 .82 .75 .04
mid-cont .86 .14
permian-b .83 .77 .05
rockies .53
alaska 6.0
+ central n-central west n-west
mexico 2.13
alberta-bc .80 .65 .70 .65
us-gulf .54
mid-cont .64
permian-b .55 .94
rockies .31 .58 .70 1.91
pacific .43 ;
Table pc(i,j) 'pipeline capacities (tcf)'
mexico west-can ont-quebec atlantic new-engl ny-nj mid-atl south-atl midwest south-west
mexico inf .067 .067 .067 .067
alberta-bc inf inf .30 .150 .10 inf
atlantic inf inf
appalacia .34 .35
us-gulf inf 1.390 1.060 2.0 2.62 3.73
mid-cont .62 2.30
permian-b .12 1.45
rockies .48
alaska .80
+ central n-central west n-west
mexico .033
alberta-bc inf inf inf inf
mid-cont 1.03
permian-b 1.46
rockies .14 inf .10 inf
pacific .48 ;
Set
check1(i,j) 'supply links with zero cost and non-zero capacity'
check2(i,j) 'supply links with nonzero cost but zero capacity';
check1(i,j) = yes$(utc(i,j) = 0 and pc(i,j) <> 0);
check2(i,j) = yes$(utc(i,j) <> 0 and pc(i,j) = 0);
ij(i,j) = yes$pc(i,j);
display check1, check2;
Variable
x(i,j) 'shipment of natural gas (tcf)'
s(i) 'regional supply (tcf)'
d(j) 'regional demand (tcf)'
benefit 'consumers benefits minus cost';
Positive Variable x, s, d;
Equation
sb(i) 'supply balance (tcf)'
db(j) 'demand balance (tcf)'
bdef 'benefit definition';
sb(i).. sum(j$ij(i,j), x(i,j)) =l= s(i);
db(j).. sum(i$ij(i,j), x(i,j)) =g= d(j);
bdef.. benefit =e= sum(j, dema(j)*d(j)**demb(j))
- sum(i, supa(i)*s(i) - supb(i)*log((supc(i) - s(i))/supc(i)))
- sum((i,j)$ij(i,j), utc(i,j)*x(i,j));
x.up(i,j) = pc(i,j);
d.lo(j) = .2;
d.fx(jfx) = ddat(jfx,"ref-q");
s.up(i) = 0.99*supc(i);
Model gtm 'gas transport model' / all /;
solve gtm maximizing benefit using nlp;
Parameter
report1(i,*) 'supply summary report'
report2(j,*) 'demand summary report';
report1(i,"supply") = s.l(i);
report1(i,"capacity") = s.up(i);
report1(i,"price") = sb.m(i);
report2(j,"demand") = d.l(j);
report2(j,"price") = -db.m(j);
display report1, report2, x.l;