uimp.gms : UIMP - Production Scheduling Problem

Description

```A company manufactures nuts, bolts and washers using three different machines
that can be operated in normal or overtime production mode. The company
needs to plan operations for the next two periods.
```

Reference

• Ellison, E F D, and Mitra, P, UIMP - User Interface for Mathematical Programming. ACM Transactions on Mathematical Software 8, 2 (1982).

Small Model of Type : LP

Category : GAMS Model library

Main file : uimp.gms

``````\$title UIMP - Production Scheduling Problem (UIMP,SEQ=11)

\$onText
A company manufactures nuts, bolts and washers using three different machines
that can be operated in normal or overtime production mode. The company
needs to plan operations for the next two periods.

Ellison, E F D, and Mitra, P, UIMP - User Interface for Mathematical
Programming. ACM Transactions on Mathematical Software 8, 2 (1982).

Keywords: linear programming, scheduling, multi-period production planning,
manufacturing
\$offText

Set
i 'time periods'    / summer, winter /
j 'production mode' / normal, overtime /
k 'products'        / nuts, bolts, washers /
l 'machines'        / m1*m3 /;

Table mh(l,k) 'machine hours (hours per unit)'
nuts  bolts  washers
m1     4      4        6
m2     7      6        6
m3     3                ;

Table mhadd(i,j) 'addfactors for mh'
normal  overtime
summer                -1
winter      +1          ;

Table av(l,j) 'availability (hours)'
normal  overtime
m1     100        80
m2     100        90
m3      40        30;

Parameter
t(i,j,k,l) 'machine hours required'
a(i,j,l)   'machine hours available';

t(i,j,k,l) = mh(l,k) + mhadd(i,j)\$mh(l,k);
t("winter","overtime","washers","m1") = 5;
a("summer",j,l) = av(l,j);
a("winter",j,l) = av(l,j) + 10;

display mh, mhadd, av, t, a;

Table tc(l,k) 'production cost data'
nuts  bolts  washers
m1     2      3        4
m2     4      3        2
m3     1                ;

Table tcadd(i,j) 'addfactors for tc'
normal  overtime
summer                 1
winter       1         2;

Parameter c(i,j,k,l) 'production cost';
c(i,j,k,l) = tc(l,k) + tcadd(i,j)\$tc(l,k);

display c;

Table p(i,k) 'selling price'
nuts  bolts  washers
summer    10     10        9
winter    11     11       10;

Table d(i,k) 'demand'
nuts  bolts  washers
summer    25     30       30
winter    30     25       25;

Parameter
s(k) 'storage cost'     / (nuts,bolts,washers) 1  /
h(k) 'storage capacity' / (nuts,bolts)         20 /;

Variable
x(i,j,k,l) 'production'
y(i,k)     'products stored'
z(i,k)     'products sold'
cost
revenue
profit;

Positive Variable x, y;

Equation
pdef      'profit definition'
cdef      'cost definition'
rdef      'revenue definition'
ma(i,j,l) 'machine availability'
ib(i,k)   'inventory balance';

pdef.. profit  =e= revenue - cost;

cdef.. cost    =e= sum((i,k), s(k)*y(i,k) + sum((j,l), c(i,j,k,l)*x(i,j,k,l)));

rdef.. revenue =e= sum((i,k), p(i,k)*z(i,k));

ma(i,j,l).. sum(k, t(i,j,k,l)*x(i,j,k,l)) =l= a(i,j,l);

ib(i,k)..   sum((j,l)\$mh(l,k), x(i,j,k,l)) + y(i-1,k) =e= z(i,k) + y(i,k);

z.lo(i,k) = d(i,k);

y.up(i,k) = h(k);

Model uimp 'ellison mitra' / all /;

solve uimp maximizing revenue using lp;
solve uimp maximizing profit  using lp;

Parameter rep 'summary report';
rep(l,i,k)        = sum(j, x.l(i,j,k,l));
rep("demand",i,k) = d(i,k);
rep("supply",i,k) = sum(l, rep(l,i,k));

display rep;
``````