prodsp3.gms : Stochastic Programming Example

**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' and 'PRODSP2' in the GAMS Model Library. 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.

**Small Model of Type : ** SP

**Category :** GAMS EMP library

**Main file :** prodsp3.gms

```
$title Stochastic Programming Example (PRODSP3,SEQ=81)
$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' and 'PRODSP2' in the GAMS Model Library.
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
Sets i product class / class-1*class-4 /
j workstation / work-1 *work-2 /
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 /;
Parameters h(j) random available labor
t(j,i) random labor required
table trand(j,*,i) min and max values for uniform distribution
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 ;
parameter hrand(j,*) / work-1.(mean 6000, variance 100)
work-2.(mean 4000, variance 50) /;
t(j,i) = uniform(trand(j,'min',i),trand(j,'max',i));
h('work-1') = normal(6000,100);
h('work-2') = normal(4000, 50);
Variables EProfit expected profit
x(i) products sold
v(j) labor purchased
positive variable x,v
Equations obj expected cost definition
lbal(j) labor balance;
obj.. EProfit =e= sum(i, c(i)*x(i)) - sum(j, q(j)*v(j));
lbal(j).. sum(i, t(j,i)*x(i)) =l= h(j) + v(j);
model mix / obj, lbal /;
file emp / '%emp.info%' /; put emp '* problem %gams.i%';
loop(j,
put / 'randvar ' h.tn(j) ' normal ' hrand(j,'mean'):6:0 hrand(j,'variance'):4:0);
loop((j,i),
put / 'randvar ' t.tn(j,i) ' uniform ' trand(j,'min',i):6:2 trand(j,'max',i):6:2);
alias(j,jp);
loop((jp,j,i),
put / 'correlation ' h.tn(jp) ' ' t.tn(j,i) uniform(-1,1):6:2);
putclose / 'stage 2 v lbal h t';
Set scen scenarios / s1*s300 /;
Parameter
s_h(scen,j)
s_t(scen,j,i);
Set dict / scen .scenario.''
h .randvar .s_h
t .randvar .s_t /;
$ifi not %gams.emp%==lindo $goto spcont2
$echo STOC_NSAMPLE_STAGE 300 > lindo.opt
mix.optfile=1;
$label spcont2
solve mix using emp maximizing eprofit scenario dict;
```