kand.gms : Stochastic Programming

**Description**

A refinery can blend raw materials into different products. At present, the management is trying to decide how much of each of the raw materials to purchase and stock, so that they can be blended to satisfy the demand for the products in future time periods. The demand has to be completely satisfied, and in case of raw material shortage the products can be outsourced at a higher cost. There is an inventory constraint on how much raw material can be stocked in total.

**Reference**

- Kall, P, and Wallace, S W, Stochastic Programming. John Wiley and Sons, Chichester, England, 1994.

**Small Model of Type :** LP

**Category :** GAMS Model library

**Main file :** kand.gms

```
$title Stochastic Programming (KAND,SEQ=187)
$ontext
A refinery can blend raw materials into different products. At present, the management is trying
to decide how much of each of the raw materials to purchase and stock, so that they can be
blended to satisfy the demand for the products in future time periods. The demand has to be
completely satisfied, and in case of raw material shortage the products can be outsourced at a
higher cost. There is an inventory constraint on how much raw material can be stocked in total.
Kall, P, and Wallace, S W, Stochastic Programming. John Wiley and
Sons, Chichester, England, 1994.
$offtext
sets i raw materials / raw-1, raw-2 /
j products / p-1,p-2 /
t time periods / time-1, time-2 /
n nodes / n-1*n-12 /
alias(n,nn);
Parameters c(i) present cost of raw materials / raw-1 2, raw-2 3/
table a(j,i) yields
raw-1 raw-2
p-1 2 6
p-2 3 3.4
table f(j,t) cost of outsourcing
time-1 time-2
p-1 7 10
p-2 12 15
scalar b inventory capacity / 50 /;
table stdat(n,*) scenario tree data
prob p-1 p-2
n-1 .3 200 180
n-2 .4 180 160
n-3 .3 160 140
n-4 .2 200 180
n-5 .5 180 160
n-6 .3 160 140
n-7 .3 200 180
n-8 .4 180 160
n-9 .3 160 140
n-10 .4 200 180
n-11 .4 180 160
n-12 .2 160 140
set tn(t,n) time node mapping / time-1.(n-1*n-3), time-2.(n-4*n-12) /
tree(n,n) / n-1.(n-4*n-6), n-2.(n-7*n-9), n-3.(n-10*n-12) /
parameter dem(n,j) stochastic demand
prob(n) node probability;
dem(n,j) = stdat(n,j);
prob(n)$tn('time-1',n) = stdat(n,'prob');
prob(n)$tn('time-2',n) = sum(tree(nn,n), stdat(nn,'prob')*stdat(n,'prob'));
display prob;
variables x(i,t) raw material purchased for use in time t
y(j,t,n) outsourced products
cost
positive variables x,y;
equations obj total cost definition
bal purchase limit
dembal(j,t,n) demand balance;
obj.. cost =e= sum((i,t), c(i)*x(i,t)) + sum((j,tn(t,n)), prob(n)*f(j,t)*y(j,tn));
bal.. sum((i,t), x(i,t)) =l= b;
dembal(j,tn(t,n)).. sum(i, a(j,i)*x(i,t)) + y(j,tn) =g= dem(n,j);
model kand / all /;
solve kand min cost us lp;
* In order to use the SPOSL system we need to insert some dummy links
* between stages two and three. Without these links, the SPOSL system will
* identify only a two stage problem with different subproblem structures.
* The value EPS is used to insert a constraint entry with numerical values
* of zero.
equation dembalx(j,t,n) demand balance modified to include back link;
dembalx(j,tn(t,n)).. sum(i, a(j,i)*x(i,t)) + y(j,tn) =g= dem(n,j)
+ eps*sum(tree(nn,n), y(j,t-1,nn));
model kandsp / obj, bal, dembalx /;
solve kandsp min cost us lp;
```