“松散”箱式装箱算法

时间:2015-01-08 21:51:40

标签: algorithm bin-packing

无法想到要称之为什么,所以我的谷歌搜索也会缩短......

我正在做一些类似于基本bin packing problem的事情,但有一些改变让我沮丧。

  1. 箱子的数量总是3个,所有3个总是相同的尺寸(相当于所有物品尺寸总和的1/3)
  2. 每件物品必须放在垃圾箱中
  3. 如果项目不完全适合垃圾箱,则可以将项目“分段”为多个连续的垃圾箱。 最小化
  4. 有了这三个标准(特别是3个),我不确定问题是否已经是NP难了,但是第四个标准使得我称之为“松散”问题。

    1. 不必严格执行Bin大小。如果一个物品被“填充”到一个箱子中,比如说,箱子大小的10%,这很好,但只有当它适应整个物品时(不要为碎片物品过度填充)。
    2. 这仍然是一个结构化的问题,还是我的标准已经不足以让它再也难以解决?

      如果你很好奇,我会使用它来渲染包含许多(或)的3个列( bins )包含多个(或者很少)链接。

      目标语言是PHP,但目前最好使用伪代码。

1 个答案:

答案 0 :(得分:0)

想我为了未来的访客而回答我自己的问题......

Loop through items largest to smallest
Does it fit wholly (overstuffing ok) in the first open bin? ...Yes
    Place it
...No
    Does it fit wholly (overstuffing ok) in the next bin? ...Yes
        Place it
    ...No
        Does it fit wholly (overstuffing ok) in the last bin? ...Yes
            Place it
        ...No
            //Place in first open bin, expecting a fragmentation
            Place x "units" of item until bin size reached (no overstuffing)
            Place y "units" of item until bin size reached (no overstuffing), starting at index x into item
            If x+y is still less than item size, place rest in last bin.

如果增加bin会导致索引超出范围,它只会将其视为" no"。可能不是最好的实施,但它到目前为止一直很好。显然,这种方法固定为3个箱,但我想它可以合理地扩展到更多(有限)箱。