prodsp2.gms : Stochastic Programming Example - reformulated for DECIS

**Description**

The problem consists of determining the product mix for a furniture shop with two workstations: carpentry and finishing. The availability of labor in man-hours at the two stations is limited. There are four product classes, each consuming a certain number of man-hours at the two stations. Each product earns a certain profit and the shop has the option to purchase labor from outside. The objective is to maximize the profit. The problem is solved for 300 scenarios. See also PRODSP.

**Reference**

- King, A J, Stochastic Programming Problems: Examples from the Literature. In Ermoliev, Y, and Wets, R J, Eds, Numerical Techniques for Stochastic Optimization Problems. Springer Verlag, 1988, pp. 543-567.

**Large Model of Types :** DECIS lp

**Category :** GAMS Model library

**Main file :** prodsp2.gms

```
$title Stochastic Programming Example, reformulated for GAMS/DECIS (PRODSP2,SEQ=200)
$ontext
The problem consists of determining the product mix for a furniture shop with two
workstations: carpentry and finishing. The availability of labor in man-hours at
the two stations is limited. There are four product classes, each consuming a
certain number of man-hours at the two stations. Each product earns a certain
profit and the shop has the option to purchase labor from outside. The objective
is to maximize the profit.
The problem is solved for 300 scenarios.
See also PRODSP.
King, A J, Stochastic Programming Problems: Examples from the
Literature. In Ermoliev, Y, and Wets, R J, Eds, Numerical
Techniques for Stochastic Optimization Problems. Springer Verlag,
1988, pp. 543-567.
$offtext
$if not set decisalg $set decisalg decism
Sets i product class / class-1*class-4 /
j workstation / work-1 *work-2 /
s Nodes / s1*s300 /
Parameters c(i) profit / class-1 12,class-2 20, class-3 18, class-4 40 /
q(j) cost / work-1 5, work-2 10 /
h(j,s) available labor
t(j,i,s) labor required
table trand(j,*,i) min and max values
class-1 class-2 class-3 class-4
work-1.min 3.5 8 6 9
work-1.max 4.5 10 8 11
work-2.min .8 .8 2.5 36
work-2.max 1.2 1.2 3.5 44 ;
t(j,i,s) = uniform(trand(j,'min',i),trand(j,'max',i));
h('work-1',s) = normal(6000,100);
h('work-2',s) = normal(4000, 50);
*--------------------------------------------------------------------------
* first the original deterministic equivalent
* this is a straight LP
*--------------------------------------------------------------------------
Variables EProfit expected profit
x(i) products sold
v(j,s) labor purchased
positive variable x,v
Equations obj expected cost definition
lbal(j,s) labor balance;
obj.. EProfit =e= sum(i, c(i)*x(i)) - 1/card(s)*sum((j,s), q(j)*v(j,s));
lbal(j,s).. sum(i, t(j,i,s)*x(i)) =l= h(j,s) + v(j,s);
model mix universe model / obj, lbal /;
mix.solprint$(card(s) > 10) = %solprint.Quiet%;
solve mix using lp maximizing eprofit;
display eprofit.l,x.l;
parameter stage1(*,i) hold the stage 1 results;
stage1('deterministic',i) = x.l(i);
*--------------------------------------------------------------------------
* Now the DECIS formulation
*--------------------------------------------------------------------------
Equations
obj2 cost function
lbal2(j) labor balance
extra prevent unbounded relaxed master problem
;
variables
profit to be maximized
v2(j) labor purchased
;
positive variable v2;
parameter t2(j,i) mean values;
t2(j,i) = (trand(j,'min',i) + trand(j,'max',i))/2;
parameter h2(j) mean values / work-1 6000, work-2 4000 /;
obj2.. profit =e= sum(i, c(i)*x(i)) - sum(j, q(j)*v2(j));
lbal2(j).. sum(i, t2(j,i)*x(i)) =l= h2(j) + v2(j);
extra.. sum(i, c(i)*x(i)) =l= 1000000;
model mix2 decis model /obj2,lbal2, extra/;
* output the stochastic file using the scenarios
* calculated above. This generates a large stochastic file.
file stg / MODEL.STG /;
put stg;
put 'BLOCKS DISCRETE'/;
loop(s,
put 'BL BLOCK1 PERIOD2 ',(1/card(s)):8:6/;
loop((i,j),
put 'x ',i.tl,' lbal2 ',j.tl,' ',t(j,i,s):12:6/;
);
loop(j,
put 'RHS lbal2 ',j.tl,' ',h(j,s):12:6/;
);
);
putclose;
*output a MINOS option file
file mopt / MINOS.SPC /;
put mopt;
put "begin"/;
put "rows 1000"/;
put "columns 1000"/;
put "elements 100000"/;
put "end"/;
putclose;
*assign stages
x.stage(i) = 1;
v2.stage(j) = 2;
lbal2.stage(j) = 2;
extra.stage=1;
option lp=%decisalg%;
solve mix2 using lp maximizing profit;
stage1('decis using scenarios',i) = x.l(i);
*--------------------------------------------------------------------------
* Let DECIS solve the model exactly
* Stochastic Universe option: 4 "ISTRAT"
*--------------------------------------------------------------------------
file decopt / %decisalg%.opt /;
put decopt;
put '4 "ISTRAT"'/;
putclose;
mix2.optfile=1;
solve mix2 using lp maximizing profit;
stage1('decis using scenarios, exact',i) = x.l(i);
*--------------------------------------------------------------------------
* Better use of the stochastic file: independent distributions
*--------------------------------------------------------------------------
scalar p;
p = 1/card(s);
put stg;
put 'INDEP DISCRETE'/;
loop((i,j),
loop(s,
put 'x ',i.tl,' lbal2 ',j.tl,' ',t(j,i,s):12:6,' PERIOD2 ',p:8:6/;
);
);
loop(j,
loop(s,
put 'RHS lbal2 ',j.tl,' ',h(j,s):12:6,' PERIOD2 ',p:8:6/;
);
);
putclose;
* this problem is way too big to solve exactly so turn off the
* option strategy 4.
mix2.optfile=0;
solve mix2 using lp maximizing profit;
stage1('decis indep. dist.',i) = x.l(i);
display stage1;
```