! The Holt-Modigliani-Muth-Simon-Hanssmann-Hess (HanssmannHess.lng)
production planning model.
Given a fluctuating demand forecast for each period in a planning horizon,
what combination of: carrying inventory, backlogging, using overtime, and
changing workforce level from period to period
is the best way of meeting this demand? ;
! Keywords: Holt-Modigliani, Hanssmann-Hess, Production planning,
Workforce scheduling;
SETS:
period: w, p, invp, invn, chgup, chgdn, ovt, dem;
ENDSETS DATA:
cr = 80; ! Cost of regular time;
ch = 60; ! Cost of hiring;
cf = 40; ! Cost of firing/layoffs;
co = 120; ! Cost of overtime;
ci = 130; ! cost of inventory;
cs = 150; ! cost of shortage;
k = 2; ! workforce needed/unit production;
w0 = 100; ! initial workforce level;
inv0 = 50;! initial inventory;
! Demand forecast over planning horizon;
dem = 90 95 110 120 150 115
120 120 115 100 95 90;
ENDDATA
! Parameters:
dem(t) = demand in period t,
k = workforce level required per unit production,
Variables
w(t) = workforce level in period t,
invp(t) = positive inventory in period t,
invn(t) = negative inventory(backlog) in t,
chgup(t) = change up of workforce in t,
chgdn(t) = change down of workforce in t,
ovt(t) = overtime in period t
;
! minimize sum of the various cost types;
min = crtot + chtot + cftot + cotot + citot + cstot;
! Total regular time cost;
crtot = cr*@SUM( period( t): w(t));
! Total hiring cost;
chtot = ch*@SUM( period( t): chgup(t));
! Total firing cost;
cftot = cf*@SUM( period( t): chgdn(t));
! Total overtime cost;
cotot = co*@SUM( period( t): ovt(t));
! Total cost of positive inventory;
citot = ci*@SUM( period( t): invp(t));
! Total cost of backlogging;
cstot = cs*@SUM( period( t): invn(t));
! First period is special;
! Inventory balance equation;
inv0 + p(1) = invp(1) - invn(1) + dem(1);
! Workforce change;
chgup(1) - chgdn(1) = w(1) - w0;
! Overtime to cover excess of production
beyond regular time;
ovt(1) >= k*p(1) - w(1);
! For subsequent periods;
@FOR( period(t) | t #gt# 1:
! Inventory balance;
invp(t-1) - invn(t-1) + p(t) = invp(t) - invn(t) + dem(t);
! Workforce change;
chgup(t) - chgdn(t) = w(t) - w(t-1);
! Overtime;
ovt(t) >= k*p(t) - w(t);
);
! At the end of the planning horizon, you may wish to put
some constraints on ending inventory level and workforce level;
|