n个产品满足某些约束,从而实现利润最大化

时间:2014-10-14 16:29:53

标签: algorithm

我获得了n个产品的清单,其中包含相关的利润和每单位成本。目的是在保持总成本低于某个阈值的同时最大化利润。对于每种产品,产生一个或零。

现在假设我们有三种产品并假设我们将这些产品标记为1,2和3.然后,所有可能的产品组合都可以作为二进制数111,110,101,011,100,010,001和000给出,其中第i个位置的1表示生产产品之一i和类似零。然后,我们可以轻松地检查这些组合中的哪一个具有低于阈值的生产成本并且具有最大利润。然后该算法的阶数为O(2 ^ n),因为对于n个乘积,我们必须检查2 ^ n个二进制数。我们可以通过认识到如果100高于阈值已经我们不需要检查110和111以及类似这样的东西但是顺序不会因此而改变,这可以使这更快一点。如何制作更智能的算法,可能会有更好的时间复杂度。 n可以大到100,在这种情况下,检查2 ^ 100个数字是不可能的。提前致谢

1 个答案:

答案 0 :(得分:0)

如果您的成本是不太大的整数,则可以使用动态编程解决方案来解决背包问题,该问题在David Eisenstat评论中提到的链接中列出。如果您的成本是大整数或小数,那么您最好的选择是使用现有的背包解算器,例如:缩小为整数线性编程问题然后执行类似分支和绑定的操作以便解决。无论如何,你的问题就是背包问题,只需稍加修改你就不必完全填满背包,只要不填满它就可以部分填充。然而,这个变体也与原始配方一起研究,并且有解决方案。此外,很容易修改动态编程解决方案来处理这个问题,让我知道是否不清楚如何以及我将用解释更新我的答案。