0

我有以下数字 6,8,9,4,3,2,10,7,14,12,6,2,3,1,10,11,13,5

我想知道为这些实现最适合的 1D Bin 打包算法的正确方法。因为在这个视频http://www.youtube.com/watch?v=B2P1TzKKWOI&feature=related他们解决它的方式与我的想法不同,所以我不知道正确的答案。

我的解决方案,先到先得,所以:

  • 垃圾箱 #1:6,8,2
  • 垃圾箱 #2:9,4,3
  • 仓#3:3,10,1
  • 箱#4:7,6
  • 箱#5:14,2
  • 垃圾箱 #6:12
  • 垃圾箱 #7:10
  • 垃圾箱 #8:11,5
  • 9 号箱:13

他们的解决方案,我猜他们将合适的数字“配对”在一起,所以它就像:

  • 垃圾箱 #1:6,10
  • 垃圾箱 #2:9,7
  • 仓#3:14,2
  • 箱#4:12,4
  • 箱#5:14,2
  • 垃圾箱 #6:13,3
  • 垃圾箱 #7:8,6,2
  • 垃圾箱 #8:10,5,1
  • 9 号箱:11,3

哪一个是正确的?

4

1 回答 1

3

我在评论末尾附上了算法。

@AngelicCore,我认为您的解决方案与视频中的解决方案之间的根本区别在于您的解决方案是“在线”解决方案,而视频中的解决方案是“离线”解决方案。

离线装箱假设包装者对每件物品都有完整的信息,并且有时间按照他或她想要的任何顺序排列它们。考虑一个带有运输暂存区的仓库。所有箱子都可以根据需要堆放、码垛和重新订购,直到准备好发货。

在线装箱通常在先进先出 (FIFO) 的基础上“即时”完成。想象一下,您正在接收从运货卡车到传送带的箱子。物料搬运设备迅速将所有箱子重新导向一队外运卡车。

补充说明

箱容量为 16。 (14+13+12+11+10+10+9+8+7+6+6+5+4+3+3+2+2+1)/16 = 126/ 16 ~ 7.87 => ceiling(7.87) = 8 个最小 bin 是下限。

算法

最佳拟合启发式

每次分配项目时,这种启发式尝试创建最满的箱。同样,所有未装满的垃圾箱都保持打开状态。它将下一个项目 j 放在当前内容最大但不超过 Q - qj 的 bin 中(因此项目适合)。如果它不适合任何垃圾箱,则会打开一个新垃圾箱。

初始化:

给定一个项目权重列表 L = {q1, q2, ..., qn}。

将 item1 放入 bin1 并从 L 中移除。Letj=2,m=1。

迭代:

  1. 找到剩余容量最小但大于 qj 的 bin i(如果 Si 是 bin i 中的项目,Q - qk 是 bin i 的剩余容量),并将 j 放入 k∈Sii 中。如果 j 不适合任何 bin,则打开一个新 bin 并将其编号为 m + 1,将 j 放入 bin m + 1 并让 m = m + 1。

  2. 从 L 中删除项目 j。令 j = j + 1。

  3. 当项目保留在 L 中时,从步骤 1 开始重复。

于 2012-09-06T11:22:34.793 回答