MODEL: ! Aggregate Production Planning: Planning for Minimizing the Total Cost;

advertisement
MODEL:
! Aggregate Production Planning:
Planning for Minimizing the Total Cost;
! Demand=1600, 3000, 3200, 3800, 2200, 2200;
! Cost:
Materials:
$10/unit
Inventory holding cost: $2/unit/month
Marginal cost of a stockout: $5/unit/month
Hiring and training costs:
$300/worker
Layoff cost: $500/worker
Labor hours required: 4 hours/unit
Regular time cost: $4/hour
Over time cost:
$6/hour
Cost of subcontracting: $30/unit ;
! Decision Variables:
Worker(t) = Workforce size for month t, t = 1, ..., 6
Hire(t) = Number of employees hired at the beginning of month t, t = 1, ..., 6
LaidOff(t) = Number of employees laid off at the beginning of month t, t = 1, ...,
6
Make(t) = Production in month t, t = 1, ..., 6
Inv(t) = Inventory at the end of month t, t = 1, ..., 6
Stockout(t) = Number of units stocked out at the end of month t, t = 1, ..., 6
Contract(t) = Number of units subcontracted for month t, t = 1, ..., 6
Over(t) = Number of overtime hours worked in month t, t = 1, ..., 6;
! Initialization:
Sales Price $40 per unit, Worker(0)=80, Inv(0)=1000, Inv(6)>=500,
Stockout(0)=0, Stockout(6)=0;
SETS:
Months/m1,m2,m3,m4,m5,m6/:Demand,Make,Over,Inv,Stockout,Contract,Work
er,Hire,Laidoff;
ENDSETS
! Objective Function;
MIN=@SUM( Months:640*Worker+300*Hire+500*Laidoff+6*Over+2*Inv+
5*Stockout + 10*Make + 30*Contract);
! Subject to;
! Workforce size for each month is based on hiring and layoffs;
!
Worker(1)=80+Hire(1)-Laidoff(1);
@FOR( Months(t)|t#EQ#1: Worker(t)=80+Hire(t)-Laidoff(t));
@FOR( Months(t)|t#GT#1: Worker(t)=Worker(t-1)+Hire(t)-Laidoff(t););
! Production for each month cannot exceed capacity;
@FOR( Months(t): Make(t) <= 40*Worker(t) + Over(t)/4) ;
! Inventory balance for each month;
!
@FOR( Months(t): Inv(6)>=500;
!
Inv(1)=1000 + Make(1) + Contract(1) + Stockout(1) - Demand(1); !);
!
Inv(6)>=500;
@FOR( Months(t)|t#EQ#6:Inv(t)>=500);
!
Inv(1)=1000 + Make(1) + Contract(1) + Stockout(1) - Demand(1);
@FOR( Months(t)|t#EQ#1:
Inv(t)=1000 + Make(t) + Contract(t) + Stockout(t) - Demand(t));
@FOR( Months(t)|t#GT#1:
Inv(t)=Inv(t-1) + Make(t) + Contract(t) + Stockout(t) - Demand(t) Stockout(t-1););
!
!
Stockout(0)=0;
Stockout(6)=0;
@FOR( Months(t)|t#EQ#0:Stockout(t)=0);
@FOR( Months(t)|t#EQ#6:Stockout(t)=0);
! Over time for each month;
@FOR( Months(t): Over(t) <= 10*Worker(t););
! All variables are integer;
@FOR(months(t): @GIN(Demand(t);););
@FOR(months(t): @GIN(Make(t);););
@FOR(months(t): @GIN(Over(t);););
@FOR(months(t): @GIN(Inv(t);););
@FOR(months(t): @GIN(Stockout(t);););
@FOR(months(t): @GIN(Contract(t);););
@FOR(months(t): @GIN(Worker(t);););
@FOR(months(t): @GIN(Hire(t);););
@FOR(months(t): @GIN(Laidoff(t);););
DATA:
Demand = 1600 3000 3200 3800 2200 2200;
ENDDATA
END
Download