Lindo Systems

MODEL:
! Object bundling model.  (OBJBUNDL);
!A broker has eleven loans of size ranging from $55,000 to $910,000. 
 The broker would like to group the loans into packages 
 so that each package has at least $1M in it, 
 and the number of packages is maximized;
! Keywords: bundling, financial, set packing;
 SETS:   OBJECT: VALUE, OVER;
   OXO( OBJECT, OBJECT)| &1 #LE# &2: X;
 ENDSETS
 DATA:
   OBJECT =  A   B   C   D   E   F   G   H   I   J   K;
    VALUE = 910 870 810 640 550 250 120  95 55 543 449;
! The value in each bundle must be >= PKSIZE;
    PKSIZE = 1000;
 ENDDATA
!----------------------------------------------;
!  This method may be time consuming for more 
    than 15 objects;
! Definition of variables;
!  X( I, I) = 1 if object I is lowest numbered
              object in its package;
!  X( I, J) = 1 if object j is assigned to package I;
! Maximize number of packages assembled;
  MAX = @SUM( OBJECT( I): X( I, I));

  @FOR( OBJECT( K):
! Each object can be assigned to at most one package;
    @SUM( OXO( I, K): X( I, K)) <= 1;

! A package must be at least PSIZE in size;
    @SUM( OXO( K, J): VALUE( J) * X( K, J)) 
         - OVER( K) = PKSIZE * X( K, K);
      );

! The X( I, J) must = 0 or 1;
  @FOR( OXO( I, J): @BIN( X( I, J)););
END