markov.gms : Strategic Petroleum Reserve

**Description**

This is a linear programming formulation for optimal petroleum stockpile policy based on a stochastic dynamic programming approach. Each state of the Markov process is a pair (s,i) where s is the size of the inventory and i is the state of the world (normal or disrupted). However, we assume the probability of entering state (s',j) from state (s,i) is independent of the stockpile levels.

**Reference**

- Teisberg, T J, A Dynamic Programming Model of the U.S. Strategic Petroleum Reserve. The Bell Journal of Economics 12, 2 (1981), 526-546.

**Small Model of Type :** LP

**Category :** GAMS Model library

**Main file :** markov.gms

```
$Title Strategic Petroleum Reserve (MARKOV,SEQ=82)
$Ontext
This is a linear programming formulation for optimal petroleum
stockpile policy based on a stochastic dynamic programming approach.
Each state of the Markov process is a pair (s,i) where s is the size
of the inventory and i is the state of the world (normal or disrupted).
However, we assume the probability of entering state (s',j) from
state (s,i) is independent of the stockpile levels.
Teisberg, T J, A Dynamic Programming Model of the U.S. Strategic
Petroleum Reserve. Bell Journal of Economics (1981).
$Offtext
Sets s level of the reserve / empty, 3, 6, 9, 12, 15, 18, 21 /
i state of the oil market / normal, disrupted /
Alias(s,sp,spp), (i,j)
* remember that supply is fixed at q = 110 million barrel per year
* and the shape of the demand curve is : d(p) = d + k*p**-e
Scalars b discount factor / .95 /
beta / .0625 /
g u.s. demand / .25 /
e / .1 /
q supply / 110 /
d /-130 /
k / 342 /
pn normal price (us$ per bbl) / 34.526 /
h storage cost / .32 /
Table pr(i,j) transition probability of the word oil market
normal disrupted
normal .8 .2
disrupted .5 .5
Parameters lev(s) level of reserve
dis(i) disruption / disrupted 11 /
p(s,sp,i) price affected by action a
c(s,sp,i) cost of taking action a
pi(s,i,sp,j,spp) probability matrix for problem;
lev(s) = 3*(ord(s)-1);
p(s,sp,i) = ( k / (q - dis(i) - d - (lev(sp)-lev(s)) ))**(1/e);
c(s,sp,i) = g*(d*(p(s,sp,i)-pn) + k*(p(s,sp,i)**(1-e) - pn**(1-e))/(1-e))
+ p(s,sp,i)*(lev(sp)-lev(s)) + h*lev(sp) ;
pi(s,i,sp,j,sp) = pr(i,j);
Display lev, dis, p, c, pi;
Variables z(s,i,sp) multiple of joint probability
pvcost present value of expected cost
Positive variable z
Equations constr(s,i)
equil(s,sp)
cost cost definition;
constr(sp,j).. sum(spp, z(sp,j,spp)) - b*sum((s,i,spp),
pi(s,i,sp,j,spp)*z(s,i,spp)) =e= beta;
equil(s,spp).. z(s,"disrupted",spp)*(ord(spp)-ord(s)) =l= 0;
cost.. pvcost =e= sum((s,i,spp), c(s,spp,i)*z(s,i,spp));
Model strategic / all /;
Solve strategic using lp minimizing pvcost;
```