我成功地用C++编写了算法来获得整数背包,分数背包和混合型背包的最优解,所有这些背包都有或没有每个物品允许取多少的界限。
这些仅处理了具有单数a约束的项目,即权重。 如果我想要解决一个可能有2+约束的背包,我会从我已经编写的其他代码中提取出来,还是需要编写一个全新的算法?
整数型和混合型背包用动态规划法求解,分数型背包用贪心法求解。
例:给定两个整数项和一个小数项。
相应的值为(9,8,3)
各自的重量为(2,3,1)最大重量=24
各自的体积为(3,2,2)最大体积=23
求最优解与求和。
我想我已经算出这个数目是七十七点五
一旦你有了多个约束,你就会进入线性(如果你的所有变量都可以是小数)或混合整数线性(如果有些变量需要是整数)编程的领域,你的最佳选择是使用MILP求解器。 有几个商用的(cplex,gurobi,xpress)和开源的求解器(CLP/CBC,glpk)。