! Pack spheres of radius 1.0 inside a cube of minimum volume.
   X(I), Y(I), Z(I) = coordinates of the center of sphere I.
   ;
! Keywords: Packing, sphere packing;
SETS:
 SPHERE: X, Y, Z;
 SXS(SPHERE, SPHERE)| &1 #LT# &2;
ENDSETS
DATA: ! Get the number of spheres; SPHERE = 1..6 ; ! 6 spheres requires a cube of length 3.88562 on a side; ! Make sure global solver is enabled by clicking on: LINGO | Options | Global Solver | Use Global Solver; ENDDATA ! Min the side size of the cube enclosing all the SPHEREs; MIN = RBIG; ! Each SPHERE of radius 1 must be inside the cube; @FOR( SPHERE(I): [INXL] X(I) >= 1; [INXU] X(I) + 1 <= RBIG; [INYL] Y(I) >= 1; [INYU] Y(I) + 1 <= RBIG; [INZL] Z(I) >= 1; [INZU] Z(I) + 1 <= RBIG; ); ! Spheres I and J cannot overlap; @FOR( SXS(I,J): [NOVLAP] (X(I) - X(J))^2 + (Y(I) - Y(J))^2 + (Z(I) - Z(J))^2 >= (1+1)^2; ); ! Get rid of some symmetry by numbering the spheres according to position on the X coordinate; @FOR( SPHERE(i) | i #GT# 1: X(i) >= X(i-1); );