Multiproduct Capacitated Lot Sizing    Model: MPSCHD

The following model is a production planning model where multiple products compete for scarce capacity. Each product has a setup time, setup cost, production time, production cost, and holding cost. The question is how much of each product should we produce in each period to minimize total production costs.

MODEL:

! Multiproduct Capacitated lot sizing;

SETS:

 PROD/1..2/: ! Each product has a ...;

  ST,   ! Setup time;

  VT,   ! Production time per unit;

  SC,   ! Setup cost;

  VC,   ! Production cost per unit;

  HC;   ! Holding cost per unit per period;

 TIME/1..6/:;

 PXT( PROD, TIME):

! Each product in each period has...;

  DEM,  ! Demand;

  MAKE, ! Amount to produce;

  Y;    ! = 1 if anything is produced;

ENDSETS

DATA:

 CAP = 200;     ! Capacity per period;

 ST = 0  0;     ! Setup times;

 VT = 1  1;     ! Production time per unit;

 SC = 150  45;  ! Setup costs;

 VC =  7  4;    ! Cost per unit to produce;

 HC =  2  1;    ! Holding cost per unit;

 DEM =  40  60 130   0 100 200  ! Demands;

         0  45  50  35  20  35;

ENDDATA

 

!------------------------------------;

!  The Eppen/Martin model;

SETS:

 PXTXT( PROD, TIME, TIME)| &3 #GE# &2:

  PCOF,

  CCOF,

  X;

ENDSETS

! Compute cost and production amounts for

 various production runs;

@FOR( PROD( I):

 @FOR( TIME( S):

  PCOF( I, S, S) = DEM( I, S);

  CCOF( I, S, S) = VC( I) * DEM( I, S);

  @FOR( TIME( T)| T #GT# S:

   PCOF( I, S, T) = PCOF( I, S, T - 1) +

    DEM( I, T);

   CCOF( I, S, T) = CCOF( I, S, T - 1) +

   ( VC( I) + HC( I) * ( T - S)) * DEM( I, T);

  )

 )

);

 

! The objective;

 MIN = TCOST;

 TCOST = @SUM( PXTXT: CCOF * X) +

  @SUM( PXT( I, S): SC( I) * Y( I, S));

 

 @FOR( PROD( I):

! In period 1, some production run must be started;

!  Note, watch out for periods without demand;

  @SUM( PXTXT( I, S, T) | S #EQ# 1:

   X( I, S, T)) = 1;

  @FOR( TIME( K)| K #GT# 1:

!  If we ended a run in period K - 1...;

   @SUM( PXTXT( I, S, T)| T #EQ# K - 1:

    X( I, S, K - 1))

!  then we must start a run in period k;

     = @SUM( PXTXT( I, K, T): X( I, K, T));

  );

! Setup forcing;

  @FOR( TIME( S):

   Y( I, S) =  @SUM( PXTXT( I, S, T)

    : ( PCOF( I, S, T) #GT# 0) * X( I, S, T));

! Calc amount made each period;

   MAKE( I, S) = @SUM( PXTXT( I, S, T):

    PCOF( I, S, T) * X( I, S, T))

  )

 );

 

! The capacity constraints;

 @FOR( TIME( S):

  @SUM( PROD( I): ST( I) * Y( I, S)) +

   @SUM( PXTXT( I, S, T):

    VT( I) * PCOF( I, S, T) * X( I, S, T)) <= CAP

 );

 

! Make the Y's integer;

 @FOR( PXT: @GIN( Y));

 

END

Model: MPSCHD