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

时间:2010-03-06 11:19:16

标签: algorithm knapsack-problem

我正在寻找一个有效的Multiple Knapsack Problem的伪代码解决方案(优化声明在页面的中间)。我认为这个问题是NP完全的,因此解决方案不需要是最优的,而是如果它是相当有效且易于实现的,那将是好的。

问题在于:

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

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

有更好的想法吗?

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

据我所知,问题是NP完整(维基百科confirms),所以在尝试完全解决它时可能没什么意义。 但是,任何数量的方法对你来说都可能足够:贪婪,遗传算法,模拟退火......贪婪可能是最容易实现的:

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

......你明白了。