MPL Model Library MPL Model Library Multi-Period Scheduling, Example 1.5, Shapiro { Exmpl1-5_MultiPeriodSched.mpl } { Roy D. Shapiro, Optimization Models for Planning and Allocation } { Chapter 1, Example 5, Multi-Period Scheduling, Size: 72x74, Page 28 } TITLE MultiPeriodProdScheduling; INDEX month := 1..12; DATA Demand[month] := (3800, 4100, 4700, 5900, 7200, 7900, 6700, 5100, 5300, 6400, 5800, 4800); ProductionCost := 100; InventoryCost := 7; LaborCost := 1600; HiringCost := 300; LayoffCost := 500; StockOutCost := 500; RecordersPerDay := 8; AssemblyCapacity := 7000; MaxNewWorkers := 50; MaxLayoffPercent := 10%; InitInventory := 750; InitWorkforce := 500; VARIABLES Produce[month] -> P; Inventory[month=1..13] -> I; Workers[month=0..12] -> W; Hired[month] -> H; LaidOff[month] -> L; StockOut[month] MACROS TotalProductionCost = SUM(month: ProductionCost * Produce); TotalInventoryCost = SUM(month: InventoryCost * 1/2 (Inventory + Inventory[month+1])); TotalLaborCost = SUM(month: LaborCost * Workers); TotalHiringCost = SUM(month: HiringCost * Hired); TotalLayoffCost = SUM(month: LayoffCost * LaidOff); TotalStockOutCost = SUM(month: StockOutCost * StockOut); MODEL MIN TotalCost = TotalProductionCost + TotalInventoryCost + TotalLaborCost + TotalHiringCost + TotalLayoffCost + TotalStockOutCost; SUBJECT TO InventoryBalance[month]: Produce + Inventory - Inventory[month+1] + StockOut = Demand; WorkforceLimit[month]: Produce <= RecordersPerDay * Workers; AssemblyLimit[month]: Produce <= AssemblyCapacity; WorkforceBalance[month]: Workers = Workers[month-1] + Hired - LaidOff; MaxHired[month]: Hired <= MaxNewWorkers; MaxLaidOff[month]: LaidOff <= MaxLayoffPercent * Workers[month-1]; BOUNDS Inventory[month=1] = InitInventory; Workers[month=0] = InitWorkforce; END Return to MPL Model Library