Lindo Systems

! Single product Capacitated lot sizing in LINGO.
  Decide how much to produce each period of a single 
 product so as to
  Minimise setup and holding costs,
 subject to:
  each period:
    satisfying demand,
    not exceeding production capacity,
    not exceeding inventory capacity;
! Keywords: Lot sizing, Capacitated lot sizing, Production planning;
SETS:
  TIME:
   DEM,  ! Demand each time period;
   MAKE, ! Amount to produce each period;
   INV,  ! Amount in inventory at end of period;
   Y;    ! = 1 if anything is produced in period, else 0;
 ENDSETS
 DATA:
  TIME = 1..15;
  PCAP = 200;   ! Production Capacity per period;
  ICAP = 100;   ! Inventory upper limit each period;
  SC = 280 ;    ! Setup cost to produce > 0 in a period;
  HC =  2 ;     ! Holding cost per unit;
  DEM =  40  60 130   0 100 200  111 210   5 121  30  30  30   5   5; ! Demands;
 ! Assume initial inventory is 0;
 ENDDATA

!------------------------------------;
!  The straightforward formulation;

! The objective;
  MIN = SCOST + ICOST;
     SCOST = @SUM( TIME(t): SC*Y(t));
     ICOST = @SUM( TIME(t): HC*INV(t));

! Inventory balance constraints;
    MAKE(1) = DEM(1) + INV(1); ! Period 1 starts with 0 inventory;
  @FOR( TIME(t) | t #GT# 1:    ! Subsequent periods;
      INV(t-1) + MAKE(t) = DEM(t) + INV(t);
        );

  @FOR( TIME(t):  
   ! Inventory capacity;
      INV(t) <= ICAP;
   ! Production capacity and setup forcing;
     MAKE(t) <= @SMIN( PCAP, @SUM( TIME(s) | s #GE# t: DEM(s)))*Y(t);
   ! Make the Y's binary (0 or 1);
      @BIN( Y(t));
       );