【发布时间】: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。
我的问题是:对于任意数量的盒子和每个盒子的任意数量的目的地,我将如何处理这种情况?为了解决这个问题,让我们先假设每个盒子都有相同的项目数。
我现在的想法是采取贪婪的方法:
- 为每个后续的箱子走下线,并保持目的地的运行总和以及将要运送到那里的物品数量。
- 如果其中任何一项的总和大于箱子容量,请将这些物品放在各自的箱子中。
- 然后,将最大数量的物品带到一个剩余的目的地,称之为“x”,取值(盒子容量 - x),(称之为“y”),并找到数量的值物品运往一个既高于“y”又最接近“y”的目的地。
- 然后,将“x”项放在第一个目的地,将“y 项”放在第二个目的地的另一个框中,然后重复。
还有其他建议或见解吗?非常感谢。
【问题讨论】:
-
我发誓起初我认为这是一个 P=NP 笑话/插科打诨问题。结果很有趣。
-
听起来像是背包问题的变体......
-
嗯,什么意思?我认为,一个盒子里可以有任何目的地的初始分布。
-
例如,将元素从一个盒子移动到另一个盒子有什么限制吗?如果没有,我们可以将所有元素倒入一个大袋子中,然后将它们重新分配到盒子中,而无需关心初始设置。
-
还有,哪个更好:两个盒子每个三个目的地,还是一个盒子两个两个,一个四个目的地?
标签: optimization