prodsp.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.

**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 Type :** LP

**Category :** GAMS Model library

**Main file :** prodsp.gms

```
$title Stochastic Programming Example (PRODSP,SEQ=186)
$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.
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.
Keywords: linear programming, production planning, stochastic programming
$offText
Set
i 'product class' / class-1*class-4 /
j 'workstation' / work-1*work-2 /
s 'nodes' / s1*s300 /;
Parameter
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);
Variable
EProfit 'expected profit'
x(i) 'products sold'
v(j,s) 'labor purchased';
Positive Variable x, v;
Equation
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));
Equation foo(i) 'dummy stage 0 constraint for OSLSE';
foo(i).. x(i) =g= 0;
lbal(j,s).. sum(i, t(j,i,s)*x(i)) =l= h(j,s) + v(j,s);
Model mix / all /;
mix.solPrint$(card(s) > 10) = %solPrint.quiet%;
solve mix using lp maximizing eprofit;
display eprofit.l, x.l;
```