昨晚我在开发一个应用程序时遇到了一个特殊的问题,我相信这个问题可能有一个有效的算法来解决。有人能提出建议吗?
问题:
也许一张图片会有帮助:http://www.custom-foam-inserts.com/。我有很多东西适合在一个范围内的隔间:我想尽量减少我需要采取的案件数量。
。
我有一套N件昂贵的电子设备,我想把它们装进特别设计的保护箱里。这些箱子每个都有许多隔间,每个隔间都可以容纳一个物品:其中一些是专门设计用来装一个特定的物品(即相机形状的孔),而有些则是一般的(矩形孔)。我事先知道有C不同大小的舱室和这些是什么大小。
这些箱子有L个不同的布局,每一个至少有一个隔间。布局可以是“两个大长方形隔间和四个小圆形隔间”。
每个隔间大小至少有一个布局,但我有不适合任何舱室大小的项目。每个项目至少适合一个舱室,并可能适合多个不同的舱室:例如,我的DSLR相机可能在一个‘中矩形’室紧密配合,一个松散的适合在一个‘大矩形’和一个完美的适合在一个‘DSLR相机室’,但不会适合一个‘小圆圈’。为此,我列出了适合每个项目的舱室清单。
这些项目具有适度的异构性--例如,可能有50个一个大小的项目,20个另一个大小的项目。
每个盒子有两个成本体积和美元(但是D~与V成正比)。我需要尽量减少其中一个或两个成本,同时把我所有的物品装进箱子里。由于箱子的布局,最优的解决方案可能包含未使用的隔间。如果两个解决方案的体积相同,则选择一个有最多未使用的分区的解决方案。因为每个隔间至少有一个布局,每个项目至少适合一个隔间,所以总是有一个适合所有项目的解决方案。
项目数量:<=2000,平均病例150。舱室数:<= 1000。布局数量:<= 1000。
对这个有什么想法吗?我看过背包和斌的包装算法,我不确定它们是否可行。非常感激的帮助。
发布于 2012-05-03 04:10:22
从问题描述来看,这确实是背包问题,因为您必须最大限度地利用可用空间,同时记住选项的权重。
根据您所追求的目标,您还可以考虑使用遗传算法。由于这个问题是NP完成的,如果您需要添加更多的项目,运行时间最终会爆炸,所以如果我需要与所需时间无关的最佳解决方案,我将主要使用这个方法。
另一方面,遗传算法应该能够在相对较短的时间内提供一些解,但是它所提供的解可能不如背包算法提供的解那么好,所以如果我需要提供一些解的时间有限制,我会选择遗传算法,我不在乎它是否是绝对最好的。
https://stackoverflow.com/questions/10430981
复制相似问题