算法设计:你能提供多背包问题的解决方案吗?

Posted

技术标签:

【中文标题】算法设计:你能提供多背包问题的解决方案吗?【英文标题】:Algorithm design: can you provide a solution to the multiple knapsack problem? 【发布时间】:2010-03-06 11:19:15 【问题描述】:

我正在寻找有效的Multiple Knapsack Problem 的伪代码解决方案(优化语句位于页面的中间)。我认为这个问题是 NP Complete,所以解决方案不需要是最优的,如果它相当有效且易于实施,那就很好了。

问题是这样的:

我有许多工作项目,每个项目都需要不同(但固定且已知)的时间来完成。 我需要将这些工作项分成几组,以便拥有最少数量的组(理想情况下),每组工作项花费的时间不超过给定的总阈值 - 例如 1 小时。

我对阈值很灵活 - 它不需要严格应用,但应该接近。我的想法是将工作项分配到 bin 中,每个 bin 代表阈值的 90%、80%、70% 等等。然后我可以将占 90% 的项目与占 10% 的项目进行匹配,以此类推。

有更好的想法吗?

【问题讨论】:

您是否尝试阅读从***页面链接的 PDF? diku.dk/hjemmesider/ansatte/pisinger/95-1.pdf (PDF) 是的,我做到了,我无法理解像 1w e ñ e ð ðñ 这样的陈述 | y e ðñ ò ñ e ð ó 好吧,那没用,但你明白了 【参考方案1】:

您需要http://www.or.deis.unibo.it/knapsack.html,第 6.6 章“多重背包问题 - 近似算法”。文本中有伪代码(Pascal 风格)和 Fortran 实现(是的,这是一本旧书)作为 ZIP 文件。

【讨论】:

+1 非常感谢您提供的链接顺便说一句,Martello 和 Toth 都是我在 Uni 的教授!!!【参考方案2】:

据我所知,这个问题是 NP 完备的(***confirms),所以尝试完全解决它可能没有多大意义。 但是,任何数量的方法都可能对您来说足够好:贪婪、遗传算法、模拟退火......贪婪可能是最容易实现的:

while (time available in block greater than smallest task duration)
  find the longest fitting task
  add it

...你明白了。

【讨论】:

我有以下问题 - math.stackexchange.com/questions/2415617。有什么贪婪的方法吗?

以上是关于算法设计:你能提供多背包问题的解决方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java 数据结构 & 算法宁可累死自己, 也要卷死别人 15 背包问题

背包问题(动态规划)

背包问题的求解

你能写出满分的二分查找算法吗

考虑下述背包问题的实例。有5件物品,背包容量为100。

背包问题(下) | 动态规划与MATLAB程序实现