【问题标题】:Knapsack with multiple constraints(ex. weight, volume, etc.)具有多重约束的背包(例如重量、体积等)
【发布时间】:2020-10-14 18:13:48
【问题描述】:

我已经成功地用 C++ 编写了算法,以获得整数背包、分数背包和混合型背包的最优解,所有这些都对每个物品的允许携带数量有或没有限制。

这些只处理具有奇异约束的项目,即重量。如果我想解决一个可能有 2 个以上约束的背包,我会从我已经编写的其他代码中提取还是需要编写一个全新的算法?

整数型和混合型背包是用求解动态规划编写的,而分数型则用贪心算法。

例如。 给定两个整数项和一个小数项。

各自的值为 (9, 8, 3)

各自的权重是 (2, 3, 1) max Weight =24

各卷为 (3, 2, 2) max Volume=23

找到最优解并求和。

我相信我已经计算出这个总和是 77.5

【问题讨论】:

  • 这个新问题只针对整数吗?
  • 不,它可以包含整数和小数项。
  • 如果我们有更多关于特定问题的详细信息,例如,我会更容易提出建议
  • 好的,我在编辑一个。
  • 请注意,如果您能够仅使用小数有效地解决此问题,在这种特殊情况下,您可以推导出整数/小数混合解决方案,它可以提供良好的性能。

标签: c++ algorithm dynamic-programming knapsack-problem greedy


【解决方案1】:

一旦您有多个约束,您就进入了线性(如果您的所有变量都可以是小数)或混合整数线性(如果某些需要是整数)编程的领域,您最好的选择是使用 MILP 求解器。有几种商业(cplex、gurobi、xpress)和开源求解器(clp/cbc、glpk)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多