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