【问题标题】:bin packing with overlapping objects用重叠的物体装箱
【发布时间】:2012-07-25 11:49:13
【问题描述】:

我有一些容量不同的垃圾箱和一些指定大小的对象。目标是将这些对象打包到垃圾箱中。到目前为止,它类似于装箱问题。但扭曲的是,每个对象都与另一个对象有部分重叠。因此,虽然对象 1 和 2 的大小分别为 s1 和 s2,但当我将它们放在同一个 bin 中时,填充的空间小于 s1+s2。假设我知道每对对象的重叠值,是否也有任何近似算法,例如用于该问题的原始装箱算法?

【问题讨论】:

  • 我在stackoverflow.com/questions/11656784/…发布了另一种看待这个问题的方法
  • 2个以上的对象之间是否有重叠?
  • 是的,它是一个稠密图。每个项目与许多其他项目具有相似性,但相似程度(重叠)不同
  • F()为填充函数,O()为重叠函数。比F(s1,s2)=s1+s2-O(s1,s2)。对于F(s1,s2,s3),它应该类似于s1+s2+s3-O(s1,s2)-O(s1,s3)-O(s2,s3)+O(s1,s2,s3) 以使其正常。如果不是,您甚至可以拥有F() 的负值。例如。 F(s1,s2,s3,s4)si=xO(si,sj)>2x/3
  • @Ante 你说得对,它也需要 O(s1,s2,s3) 这个词

标签: combinatorics np-complete approximation bin-packing


【解决方案1】:

答案是使用一种树来捕获对象的相似性,假设对象可以被破坏。然后运行一个贪心算法来根据树填充垃圾箱。该算法具有 3-x 近似界。不过,也应该有更好的答案。

此方法在Michael Sindelar, Ramesh K. Sitaraman, Prashant J. Shenoy: Sharing-aware algorithms for virtual machine colocation. SPAA 2011: 367-378 中介绍。

我从this thread 得到了这个答案,但只是想通过给出答案来结束这个问题。

【讨论】:

【解决方案2】:

我认为唯一可行的算法是修剪不适合放入垃圾箱的物品并使用另一个垃圾箱。我不是指第一次拟合算法,而是等待一段时间,然后为项目使用新的垃圾箱。实际上,您可以只使用另一个垃圾箱吗?这是一种实用的方法。我的意思是你可以像这个例子一样向左或向右增长垃圾箱:http://codeincomplete.com/posts/2011/5/7/bin_packing/

【讨论】:

  • 这是首次拟合算法。有没有像原始垃圾箱包装那样的限制。对项目进行排序(例如根据它们的大小)是否会改变近似界限?
  • @Masood_mj:我不知道第一次拟合是否能保证您获得最佳效果。也许你是对的,它也只在 euklidian 空间有用?
  • @Masood_mj:我添加了更多信息。也许我不明白你的问题?我的意思不是先装,而是等待一段时间,然后使用新的垃圾箱来装。这是一种实用的方法。我已经为客户编写了一个装箱解决方案?
  • 我不能使用新的垃圾箱。我的垃圾箱和它们的容量是固定的
猜你喜欢
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
相关资源
最近更新 更多