Java 最大化体积和价值,最小化背包重量
在有规则的地方尝试背包变体Java 最大化体积和价值,最小化背包重量,java,algorithm,dynamic-programming,knapsack-problem,Java,Algorithm,Dynamic Programming,Knapsack Problem,在有规则的地方尝试背包变体 你带的任何东西都必须完全放在包里 袋子的可用指标是长度(l)、宽度(w)、高度(h),您可以假设,如果产品按总体积单独或一起装入袋子,则有一种方法可以将其装入 价格价值必须最大化 重量必须在不影响美元价值的情况下最小化 输入基本上是一个项目列表,包含l、w、h、美元价值和重量。似乎这是许多标准,除了常规背包的变种。我所做的是首先消除所有不适合包装袋的产品(体积和尺寸)。接下来,我将使用公共DP伪代码,基于数量和价格,执行常规背包逻辑(计算每个物品是否属于包中) if
if (volume[i] > V) {
return knapsack(i-1, V);
} else {
return Math.max(knapsack(i-1, V), knapsack(i-1, V - volume[i]) + values[i]);
}
考虑到袋子的最大l,w,h是40,40,40,这似乎有点失控。(因此体积为64000),项目数量为16k。(Java内存不足错误)。正在尝试分支和绑定(但不确定是否正确)。还不确定如何在中拟合最小权重约束
我尝试过的另一种次优方法是使用基于值/权重比的启发式方法,然后采用最佳体积拟合。另一种方法是找到所有可能的背包解决方案,然后选择最适合的重量(但这也是超指数的)
如何解决这个问题