【问题标题】:Optimization – Rearranging items of a specific type?优化——重新排列特定类型的项目?
【发布时间】:2013-06-06 05:11:31
【问题描述】:

优化 - 重新排列特定类型的项目? 这是我正在处理的个人项目的一个小优化问题:假设您有很多箱物品,并且在每个箱子中,您知道物品必须运送到不同的地点。

例子:

框 1:1000 个项目,500 个到位置 A,500 个到位置 B。

框 2:1000 个项目,500 个到位置 A,500 个到位置 B。

我希望能够重新安排物品,以便我可以将尽可能多的整箱运送到一个目的地。例如,在上面的示例中,我可以重新排列项目,使 new_box 1 有 1000 个项目到位置 A,1000 个到位置 B。

现在你可以想象这种完美的重排情况不会总是发生。如果我有:

框 1:1000 个项目,500 个到位置 A,300 个到位置 B,200 个到位置 C。

框 2:1000 个项目,500 个到位置 A,500 个到位置 B。

然后,我想 (a) 优化到一个目的地的完整盒子的数量,以及 (b) 最小化每个其他盒子中不同位置的数量。例如,有 3 个箱子,每个箱子有 2 个不同的目的地,比有 3 个箱子,每个箱子有 3 个不同的目的地要好。上面第二个例子的最佳重排是:

New_box_1:1000 个项目,1000 个到位置 A。

New_box_2:1000 个项目,800 个到位置 B,200 个到位置 C。

我的问题是:对于任意数量的盒子和每个盒子的任意数量的目的地,我将如何处理这种情况?为了解决这个问题,让我们先假设每个盒子都有相同的项目数。

我现在的想法是采取贪婪的方法:

  1. 为每个后续的箱子走下线,并保持目的地的运行总和以及将要运送到那里的物品数量。
  2. 如果其中任何一项的总和大于箱子容量,请将这些物品放在各自的箱子中。
  3. 然后,将最大数量的物品带到一个剩余的目的地,称之为“x”,取值(盒子容量 - x),(称之为“y”),并找到数量的值物品运往一个既高于“y”又最接近“y”的目的地。
  4. 然后,将“x”项放在第一个目的地,将“y 项”放在第二个目的地的另一个框中,然后重复。

还有其他建议或见解吗?非常感谢。

【问题讨论】:

  • 我发誓起初我认为这是一个 P=NP 笑话/插科打诨问题。结果很有趣。
  • 听起来像是背包问题的变体......
  • 嗯,什么意思?我认为,一个盒子里可以有任何目的地的初始分布。
  • 例如,将元素从一个盒子移动到另一个盒子有什么限制吗?如果没有,我们可以将所有元素倒入一个大袋子中,然后将它们重新分配到盒子中,而无需关心初始设置。
  • 还有,哪个更好:两个盒子每个三个目的地,还是一个盒子两个两个,一个四个目的地?

标签: optimization


【解决方案1】:

我认为这是一个简单的一维装箱问题。问题是一个最多包含 1000 件物品的盒子。然后,您可以使用 bin-packing 算法,例如 best-fit、first-fit 等。

【讨论】:

  • 感谢您的回复。但是,装箱试图最小化包装中使用的箱数量,对吗?我相信我所描述的问题试图最小化每个垃圾箱中不同对象的数量......它仍然是有效的减少吗?谢谢。
  • 此外,无论如何,您总是需要使用相同数量的垃圾箱,因为您只是想重新排列项目。
  • 嗯,理想情况下,我想要一个盒子来存放所有到一个目的地的物品。所有的物品……都是同一种物品,只是去往不同的目的地。在我的第二个示例中,我最初总共有 2000 个项目(2 个箱子,每个箱子有 1000 个);无论我如何重新排列它们,我都会有 2 个垃圾箱。这就是我的意思——我不是要最小化垃圾箱,而是要尽量减少垃圾箱内的总目的地数。
  • 嗯,你能详细说明一下吗?您可以按目的地对项目进行分组(前往不同目的地的项目本质上是我不同“类型”的对象),但您希望尽量减少 within each 的对象类型的数量i> bin,不是整体。在我看来,binpacking 可以最大限度地减少 overall 使用的 bin 总数。我是不是误会了什么?谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-03-14
  • 2014-05-28
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2023-04-05
相关资源
最近更新 更多