Multi-Period Scheduling



   {  Exmpl1-5_MultiPeriodProdSched.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




Back To Top | Maximal Home Page | List of Models | Previous Page | Next Page