优化——重新排列特定类型的项目?这是我正在处理的个人项目的一个小优化问题:假设您有很多箱物品,并且在每个箱子中,您知道物品必须运送到不同的位置。
例子:
框 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”),求物品数量为1的值既高于“y”又最接近“y”的目的地。
- 然后,将“x”个项目放在第一个目的地,将“y 个项目”放在另一个盒子的第二个目的地,然后重复。
还有其他建议或见解吗?非常感谢。