Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最大化体积和价值,最小化背包重量_Java_Algorithm_Dynamic Programming_Knapsack Problem - Fatal编程技术网

Java 最大化体积和价值,最小化背包重量

Java 最大化体积和价值,最小化背包重量,java,algorithm,dynamic-programming,knapsack-problem,Java,Algorithm,Dynamic Programming,Knapsack Problem,在有规则的地方尝试背包变体 你带的任何东西都必须完全放在包里 袋子的可用指标是长度(l)、宽度(w)、高度(h),您可以假设,如果产品按总体积单独或一起装入袋子,则有一种方法可以将其装入 价格价值必须最大化 重量必须在不影响美元价值的情况下最小化 输入基本上是一个项目列表,包含l、w、h、美元价值和重量。似乎这是许多标准,除了常规背包的变种。我所做的是首先消除所有不适合包装袋的产品(体积和尺寸)。接下来,我将使用公共DP伪代码,基于数量和价格,执行常规背包逻辑(计算每个物品是否属于包中) if

在有规则的地方尝试背包变体

  • 你带的任何东西都必须完全放在包里
  • 袋子的可用指标是长度(l)、宽度(w)、高度(h),您可以假设,如果产品按总体积单独或一起装入袋子,则有一种方法可以将其装入
  • 价格价值必须最大化
  • 重量必须在不影响美元价值的情况下最小化
  • 输入基本上是一个项目列表,包含l、w、h、美元价值和重量。似乎这是许多标准,除了常规背包的变种。我所做的是首先消除所有不适合包装袋的产品(体积和尺寸)。接下来,我将使用公共DP伪代码,基于数量和价格,执行常规背包逻辑(计算每个物品是否属于包中)

    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内存不足错误)。正在尝试分支和绑定(但不确定是否正确)。还不确定如何在中拟合最小权重约束

    我尝试过的另一种次优方法是使用基于值/权重比的启发式方法,然后采用最佳体积拟合。另一种方法是找到所有可能的背包解决方案,然后选择最适合的重量(但这也是超指数的)

    如何解决这个问题