这是什么算法?盒子包装/背包?

时间:2012-05-03 12:01:43

标签: java algorithm dynamic-programming

昨晚我正在处理一个应用程序并遇到了一个特殊的问题,我肯定可能有一个有效的算法来解决它。有人可以建议吗?

问题:

TL; DR:也许照片会有所帮助:http://www.custom-foam-inserts.com/。我有很多适合各种隔间的物品:我想尽量减少需要采取的案件数量。

我有一套昂贵的电子设备,我想装入专门设计的保护盒中。这些盒子每个都有许多隔间,每个隔间可以装配一个物品:其中一些专门设计用于适合特定物品(即相机形孔),其中一些是通用的(矩形孔)。我事先知道有不同尺寸的C隔间以及它们的尺寸。

这些盒子有两种不同的布局,每个布局至少有一个隔间。布局可能是“两个大矩形隔间和4个小圆形隔间”。

每个隔间尺寸至少存在于一个布局上,但我的物品不适合任何隔间尺寸。每个项目至少适合一个隔间,可以放入多个不同的隔间:例如,我的DSLR相机可能紧密贴合在“中矩形”隔间中,宽松贴合在“大矩形”中,完美贴合在''单反相机隔间',但不适合'小圆圈'。为此,我列出了哪些隔间适合每个项目。

这些物品是中等异构的 - 例如,可能有50个一个尺寸的物品和20个另一个尺寸的物品。

每个盒子有两个成本Volume和Dollars(但是D~与V成比例)。我需要尽量减少这些费用中的一个或两个,同时将我的所有物品放入包装盒中。由于盒子的布局,最佳解决方案可能包含未使用的隔间。如果两个溶液具有相同的体积,请选择具有最多未使用的隔室的溶液。因为每个隔间至少存在于一个布局中,并且每个项目都适合至少一个隔间,所以始终存在适合所有项目的解决方案。

项目数:< = 2000,平均情况150。 隔间数:< = 1000。 布局数:< = 1000。

关于这个的任何想法?我看了一下Knapsack和Bin Packing算法,我不确定它们是不是可行的方法。非常感谢。

1 个答案:

答案 0 :(得分:1)

从问题描述中确实看起来确实是背包问题,因为您必须最大限度地利用可用空间,同时牢记选项的重量

根据您的目标,您还可以考虑使用Genetic Algorithm。由于这个问题是NP Complete,如果你需要添加更多的项目,运行时间最终会爆炸,所以如果我需要与时间无关的最佳解决方案,我会主要考虑这个问题。

另一方面,遗传算法应该能够在相对较短的时间内提供一些解决方案,但是,它提供的解决方案可能不如Knapsack算法提供的解决方案,所以我会如果我对我需要提供解决方案的时间有限制而选择GA,我不在乎它是不是绝对最好的。