Harmonic bin packing

Harmonic bin-packing is a family of online algorithms for bin packing. The input to such an algorithm is a list of items of different sizes. The output is a packing - a partition of the items into bins of fixed capacity, such that the sum of sizes of items in each bin is at most the capacity. Ideally, we would like to use as few bins as possible, but minimizing the number of bins is an NP-hard problem.

The harmonic bin-packing algorithms rely on partitioning the items into categories based on their sizes, following a Harmonic progression. There are several variants of this idea.

Harmonic-k

The Harmonic-k algorithm partitions the interval of sizes ( 0 , 1 ] {\displaystyle (0,1]} harmonically into k 1 {\displaystyle k-1} pieces I j := ( 1 / ( j + 1 ) , 1 / j ] {\displaystyle I_{j}:=(1/(j+1),1/j]} for 1 j < k {\displaystyle 1\leq j<k} and I k := ( 0 , 1 / k ] {\displaystyle I_{k}:=(0,1/k]} such that j = 1 k I j = ( 0 , 1 ] {\displaystyle \bigcup _{j=1}^{k}I_{j}=(0,1]} . An item i L {\displaystyle i\in L} is called an I j {\displaystyle I_{j}} -item, if s ( i ) I j {\displaystyle s(i)\in I_{j}} .

The algorithm divides the set of empty bins into k {\displaystyle k} infinite classes B j {\displaystyle B_{j}} for 1 j k {\displaystyle 1\leq j\leq k} , one bin type for each item type. A bin of type B j {\displaystyle B_{j}} is only used for bins to pack items of type j {\displaystyle j} . Each bin of type B j {\displaystyle B_{j}} for 1 j < k {\displaystyle 1\leq j<k} can contain exactly j {\displaystyle j} I j {\displaystyle I_{j}} -items. The algorithm now acts as follows:

  • If the next item i L {\displaystyle i\in L} is an I j {\displaystyle I_{j}} -item for 1 j < k {\displaystyle 1\leq j<k} , the item is placed in the first (only open) B j {\displaystyle B_{j}} bin that contains fewer than j {\displaystyle j} pieces or opens a new one if no such bin exists.
  • If the next item i L {\displaystyle i\in L} is an I k {\displaystyle I_{k}} -item, the algorithm places it into the bins of type B k {\displaystyle B_{k}} using Next-Fit.

This algorithm was first described by Lee and Lee.[1] It has a time complexity of O ( n log ( n ) ) {\displaystyle {\mathcal {O}}(n\log(n))} where n is the number of input items. At each step, there are at most k {\displaystyle k} open bins that can be potentially used to place items, i.e., it is a k-bounded space algorithm.

Lee and Lee also studied the asymptotic approximation ratio. They defined a sequence σ 1 := 1 {\displaystyle \sigma _{1}:=1} , σ i + 1 := σ i ( σ i + 1 ) {\displaystyle \sigma _{i+1}:=\sigma _{i}(\sigma _{i}+1)} for i 1 {\displaystyle i\geq 1} and proved that for σ l < k < σ l + 1 {\displaystyle \sigma _{l}<k<\sigma _{l+1}} it holds that R H k i = 1 l 1 / σ i + k / ( σ l + 1 ( k 1 ) ) {\displaystyle R_{Hk}^{\infty }\leq \sum _{i=1}^{l}1/\sigma _{i}+k/(\sigma _{l+1}(k-1))} . For k {\displaystyle k\rightarrow \infty } it holds that R H k 1.6910 {\displaystyle R_{Hk}^{\infty }\approx 1.6910} . Additionally, they presented a family of worst-case examples for that R H k = i = 1 l 1 / σ i + k / ( σ l + 1 ( k 1 ) ) {\displaystyle R_{Hk}^{\infty }=\sum _{i=1}^{l}1/\sigma _{i}+k/(\sigma _{l+1}(k-1))}

Refined-Harmonic (RH)

The Refined-Harmonic combines ideas from the Harmonic-k algorithm with ideas from Refined-First-Fit. It places the items larger than 1 / 3 {\displaystyle 1/3} similar as in Refined-First-Fit, while the smaller items are placed using Harmonic-k. The intuition for this strategy is to reduce the huge waste for bins containing pieces that are just larger than 1 / 2 {\displaystyle 1/2} .

The algorithm classifies the items with regard to the following intervals: I 1 := ( 59 / 96 , 1 ] {\displaystyle I_{1}:=(59/96,1]} , I a := ( 1 / 2 , 59 / 96 ] {\displaystyle I_{a}:=(1/2,59/96]} , I 2 := ( 37 / 96 , 1 / 2 ] {\displaystyle I_{2}:=(37/96,1/2]} , I b := ( 1 / 3 , 37 / 96 ] {\displaystyle I_{b}:=(1/3,37/96]} , I j := ( 1 / ( j + 1 ) , 1 / j ] {\displaystyle I_{j}:=(1/(j+1),1/j]} , for j { 3 , , k 1 } {\displaystyle j\in \{3,\dots ,k-1\}} , and I k := ( 0 , 1 / k ] {\displaystyle I_{k}:=(0,1/k]} . The algorithm places the I j {\displaystyle I_{j}} -items as in Harmonic-k, while it follows a different strategy for the items in I a {\displaystyle I_{a}} and I b {\displaystyle I_{b}} . There are four possibilities to pack I a {\displaystyle I_{a}} -items and I b {\displaystyle I_{b}} -items into bins.

  • An I a {\displaystyle I_{a}} -bin contains only one I a {\displaystyle I_{a}} -item.
  • An I b {\displaystyle I_{b}} -bin contains only one I b {\displaystyle I_{b}} -item.
  • An I a b {\displaystyle I_{a}b} -bin contains one I a {\displaystyle I_{a}} -item and one I b {\displaystyle I_{b}} -item.
  • An I b b {\displaystyle I_{b}b} -bin contains two I b {\displaystyle I_{b}} -items.

An I b {\displaystyle I_{b}'} -bin denotes a bin that is designated to contain a second I b {\displaystyle I_{b}} -item. The algorithm uses the numbers N_a, N_b, N_ab, N_bb, and N_b' to count the numbers of corresponding bins in the solution. Furthermore, N_c= N_b+N_ab

Algorithm Refined-Harmonic-k for a list L = (i_1, \dots i_n):
1. N_a = N_b = N_ab = N_bb = N_b' = N_c = 0
2. If i_j is an I_k-piece
       then use algorithm Harmonic-k to pack it
3.     else if i_j is an I_a-item
           then if N_b != 1, 
               then pack i_j into any J_b-bin; N_b--;  N_ab++;
               else place i_j in a new (empty) bin; N_a++;
4.         else if i_j is an I_b-item
               then if N_b' = 1
                   then place i_j into the I_b'-bin; N_b' = 0; N_bb++;
5.                 else if N_bb <= 3N_c
                       then place i_j in a new bin and designate it as an I_b'-bin; N_b' = 1
                       else if N_a != 0
                           then place i_j into any I_a-bin; N_a--; N_ab++;N_c++
                           else place i_j in a new bin; N_b++;N_c++

This algorithm was first described by Lee and Lee.[1] They proved that for k = 20 {\displaystyle k=20} it holds that R R H 373 / 228 {\displaystyle R_{RH}^{\infty }\leq 373/228} .

Other variants

Modified Harmonic (MH) has asymptotic ratio R M H 538 / 33 1.61562 {\displaystyle R_{MH}^{\infty }\leq 538/33\approx 1.61562} .[2]

Modified Harmonic 2 (MH2) has asymptotic ratio R M H 2 239091 / 148304 1.61217 {\displaystyle R_{MH2}^{\infty }\leq 239091/148304\approx 1.61217} .[2]

Harmonic + 1 (H+1) has asymptotic ratio R H + 1 1.59217 {\displaystyle R_{H+1}^{\infty }\geq 1.59217} .[3]

Harmonic ++ (H++) has asymptotic ratio R H + + 1.58889 {\displaystyle R_{H++}^{\infty }\leq 1.58889} [3] and R H + + 1.58333 {\displaystyle R_{H++}^{\infty }\geq 1.58333} .[3]

References

  1. ^ a b Lee, C. C.; Lee, D. T. (July 1985). "A simple on-line bin-packing algorithm". Journal of the ACM. 32 (3): 562–572. doi:10.1145/3828.3833. S2CID 15441740.
  2. ^ a b Ramanan, Prakash; Brown, Donna J; Lee, C.C; Lee, D.T (September 1989). "On-line bin packing in linear time". Journal of Algorithms. 10 (3): 305–326. doi:10.1016/0196-6774(89)90031-X. hdl:2142/74206.
  3. ^ a b c Seiden, Steven S. (2002). "On the online bin packing problem". Journal of the ACM. 49 (5): 640–671. doi:10.1145/585265.585269. S2CID 14164016.