0

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

例子:

框 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”),求物品数量为1的值既高于“y”又最接近“y”的目的地。
  4. 然后,将“x”个项目放在第一个目的地,将“y 个项目”放在另一个盒子的第二个目的地,然后重复。

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

4

1 回答 1

0

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

于 2013-06-05T21:04:47.643 回答