我正在寻找一个有效的Multiple Knapsack Problem的伪代码解决方案(优化声明在页面的中间)。我认为这个问题是NP完全的,因此解决方案不需要是最优的,而是如果它是相当有效且易于实现的,那将是好的。
问题在于:
我对阈值很灵活 - 它不需要严格应用,但应该接近。我的想法是将工作项分配到箱中,其中每个箱代表阈值的90%,80%,70%等等。然后,我可以将占90%的项目与占10%的项目进行匹配,依此类推。
有更好的想法吗?
答案 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
......你明白了。