【问题标题】:Correct best-fit algorithm for bin packing?正确的装箱算法?
【发布时间】:2012-09-06 10:13:59
【问题描述】:

我有以下号码 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
  • Bin #8:10,5,1
  • 9 号箱:11,3

哪个是正确的?

【问题讨论】:

  • 这里没有足够的信息来提供合适的答案,但它们的数字分布更均匀,可以归类为“更好”,并且它们在使用时不会留下太多空白空间垃圾箱,也可以归类为“更好”。您的解决方案也缺少 2 个数字。
  • 我没有注意到缺少的 2 个数字。他们的肯定更好,但同时需要提前知道所有数字@dpott197 抱歉不知道
  • Here 是一些解释 First Fit 和 First Fit Decreshing 的图片,以及 Best Fit 的简短解释(但还没有图片 :()。也许有帮助。

标签: c# bin-packing


【解决方案1】:

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

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

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

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

补充说明

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

算法

最佳拟合启发式

每次分配项目时,此启发式方法都会尝试创建尽可能多的箱。同样,所有未装满的垃圾箱都保持打开状态。它将下一个项目 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 步开始重复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 2013-02-03
    • 2014-03-26
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2016-12-29
    • 2013-02-11
    相关资源
    最近更新 更多